// *********** THIS FILE IS GENERATED - DO NOT EDIT ***********
//     See validation_layer_generator.py for modifications
// ************************************************************

// Copyright (c) 2017-2026 The Khronos Group Inc.
// Copyright (c) 2017-2019 Valve Corporation
// Copyright (c) 2017-2019 LunarG, Inc.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Author: Mark Young <marky@lunarg.com>
//

#include "xr_generated_core_validation.hpp"

#include "api_layer_platform_defines.h"
#include "hex_and_handles.h"
#include "validation_utils.h"
#include "xr_dependencies.h"
#include "xr_generated_dispatch_table.h"

#include "api_layer_platform_defines.h"
#include "xr_dependencies.h"
#include <openxr/openxr.h>
#include <openxr/openxr_platform.h>

#include <algorithm>
#include <cstring>
#include <memory>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

#ifdef __clang__
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif

// Structure used for indicating status of 'flags' test.
enum ValidateXrFlagsResult {
    VALIDATE_XR_FLAGS_ZERO,
    VALIDATE_XR_FLAGS_INVALID,
    VALIDATE_XR_FLAGS_SUCCESS,
};

// Unordered Map associating pointer to a vector of session label information to a session's handle
std::unordered_map<XrSession, std::vector<GenValidUsageXrInternalSessionLabel*>*> g_xr_session_labels;

InstanceHandleInfo g_instance_info;
HandleInfo<XrSession> g_session_info;
HandleInfo<XrSpace> g_space_info;
HandleInfo<XrAction> g_action_info;
HandleInfo<XrSwapchain> g_swapchain_info;
HandleInfo<XrActionSet> g_actionset_info;
HandleInfo<XrDebugUtilsMessengerEXT> g_debugutilsmessengerext_info;
HandleInfo<XrSpatialAnchorMSFT> g_spatialanchormsft_info;
HandleInfo<XrSpatialGraphNodeBindingMSFT> g_spatialgraphnodebindingmsft_info;
HandleInfo<XrHandTrackerEXT> g_handtrackerext_info;
HandleInfo<XrBodyTrackerFB> g_bodytrackerfb_info;
HandleInfo<XrSceneObserverMSFT> g_sceneobservermsft_info;
HandleInfo<XrSceneMSFT> g_scenemsft_info;
HandleInfo<XrFacialTrackerHTC> g_facialtrackerhtc_info;
HandleInfo<XrFoveationProfileFB> g_foveationprofilefb_info;
HandleInfo<XrTriangleMeshFB> g_trianglemeshfb_info;
HandleInfo<XrPassthroughFB> g_passthroughfb_info;
HandleInfo<XrPassthroughLayerFB> g_passthroughlayerfb_info;
HandleInfo<XrGeometryInstanceFB> g_geometryinstancefb_info;
HandleInfo<XrMarkerDetectorML> g_markerdetectorml_info;
HandleInfo<XrExportedLocalizationMapML> g_exportedlocalizationmapml_info;
HandleInfo<XrSpatialAnchorsStorageML> g_spatialanchorsstorageml_info;
HandleInfo<XrSpatialAnchorStoreConnectionMSFT> g_spatialanchorstoreconnectionmsft_info;
HandleInfo<XrSpaceUserFB> g_spaceuserfb_info;
HandleInfo<XrFaceTrackerFB> g_facetrackerfb_info;
HandleInfo<XrEyeTrackerFB> g_eyetrackerfb_info;
HandleInfo<XrVirtualKeyboardMETA> g_virtualkeyboardmeta_info;
HandleInfo<XrPassthroughColorLutMETA> g_passthroughcolorlutmeta_info;
HandleInfo<XrFaceTracker2FB> g_facetracker2fb_info;
HandleInfo<XrEnvironmentDepthProviderMETA> g_environmentdepthprovidermeta_info;
HandleInfo<XrEnvironmentDepthSwapchainMETA> g_environmentdepthswapchainmeta_info;
HandleInfo<XrRenderModelEXT> g_rendermodelext_info;
HandleInfo<XrRenderModelAssetEXT> g_rendermodelassetext_info;
HandleInfo<XrPassthroughHTC> g_passthroughhtc_info;
HandleInfo<XrBodyTrackerHTC> g_bodytrackerhtc_info;
HandleInfo<XrBodyTrackerBD> g_bodytrackerbd_info;
HandleInfo<XrFaceTrackerBD> g_facetrackerbd_info;
HandleInfo<XrSenseDataProviderBD> g_sensedataproviderbd_info;
HandleInfo<XrSenseDataSnapshotBD> g_sensedatasnapshotbd_info;
HandleInfo<XrAnchorBD> g_anchorbd_info;
HandleInfo<XrSpatialAudioRendererBD> g_spatialaudiorendererbd_info;
HandleInfo<XrSoundFieldBD> g_soundfieldbd_info;
HandleInfo<XrSoundObjectBD> g_soundobjectbd_info;
HandleInfo<XrSoundObstacleBD> g_soundobstaclebd_info;
HandleInfo<XrSoundObstacleMaterialBD> g_soundobstaclematerialbd_info;
HandleInfo<XrPlaneDetectorEXT> g_planedetectorext_info;
HandleInfo<XrTrackableTrackerANDROID> g_trackabletrackerandroid_info;
HandleInfo<XrEyeTrackerANDROID> g_eyetrackerandroid_info;
HandleInfo<XrDeviceAnchorPersistenceANDROID> g_deviceanchorpersistenceandroid_info;
HandleInfo<XrFaceTrackerANDROID> g_facetrackerandroid_info;
HandleInfo<XrPassthroughLayerANDROID> g_passthroughlayerandroid_info;
HandleInfo<XrWorldMeshDetectorML> g_worldmeshdetectorml_info;
HandleInfo<XrFacialExpressionClientML> g_facialexpressionclientml_info;
HandleInfo<XrEnvironmentRaycasterMETA> g_environmentraycastermeta_info;
HandleInfo<XrLightEstimatorANDROID> g_lightestimatorandroid_info;
HandleInfo<XrTrackableImageDatabaseANDROID> g_trackableimagedatabaseandroid_info;
HandleInfo<XrSceneMeshingTrackerANDROID> g_scenemeshingtrackerandroid_info;
HandleInfo<XrSceneMeshSnapshotANDROID> g_scenemeshsnapshotandroid_info;
HandleInfo<XrSpatialEntityEXT> g_spatialentityext_info;
HandleInfo<XrSpatialContextEXT> g_spatialcontextext_info;
HandleInfo<XrSpatialSnapshotEXT> g_spatialsnapshotext_info;
HandleInfo<XrSpatialPersistenceContextEXT> g_spatialpersistencecontextext_info;
ValidateXrHandleResult VerifyXrInstanceHandle(const XrInstance* handle_to_check);
ValidateXrHandleResult VerifyXrSessionHandle(const XrSession* handle_to_check);
ValidateXrHandleResult VerifyXrSpaceHandle(const XrSpace* handle_to_check);
ValidateXrHandleResult VerifyXrActionHandle(const XrAction* handle_to_check);
ValidateXrHandleResult VerifyXrSwapchainHandle(const XrSwapchain* handle_to_check);
ValidateXrHandleResult VerifyXrActionSetHandle(const XrActionSet* handle_to_check);
ValidateXrHandleResult VerifyXrDebugUtilsMessengerEXTHandle(const XrDebugUtilsMessengerEXT* handle_to_check);
ValidateXrHandleResult VerifyXrSpatialAnchorMSFTHandle(const XrSpatialAnchorMSFT* handle_to_check);
ValidateXrHandleResult VerifyXrSpatialGraphNodeBindingMSFTHandle(const XrSpatialGraphNodeBindingMSFT* handle_to_check);
ValidateXrHandleResult VerifyXrHandTrackerEXTHandle(const XrHandTrackerEXT* handle_to_check);
ValidateXrHandleResult VerifyXrBodyTrackerFBHandle(const XrBodyTrackerFB* handle_to_check);
ValidateXrHandleResult VerifyXrSceneObserverMSFTHandle(const XrSceneObserverMSFT* handle_to_check);
ValidateXrHandleResult VerifyXrSceneMSFTHandle(const XrSceneMSFT* handle_to_check);
ValidateXrHandleResult VerifyXrFacialTrackerHTCHandle(const XrFacialTrackerHTC* handle_to_check);
ValidateXrHandleResult VerifyXrFoveationProfileFBHandle(const XrFoveationProfileFB* handle_to_check);
ValidateXrHandleResult VerifyXrTriangleMeshFBHandle(const XrTriangleMeshFB* handle_to_check);
ValidateXrHandleResult VerifyXrPassthroughFBHandle(const XrPassthroughFB* handle_to_check);
ValidateXrHandleResult VerifyXrPassthroughLayerFBHandle(const XrPassthroughLayerFB* handle_to_check);
ValidateXrHandleResult VerifyXrGeometryInstanceFBHandle(const XrGeometryInstanceFB* handle_to_check);
ValidateXrHandleResult VerifyXrMarkerDetectorMLHandle(const XrMarkerDetectorML* handle_to_check);
ValidateXrHandleResult VerifyXrExportedLocalizationMapMLHandle(const XrExportedLocalizationMapML* handle_to_check);
ValidateXrHandleResult VerifyXrSpatialAnchorsStorageMLHandle(const XrSpatialAnchorsStorageML* handle_to_check);
ValidateXrHandleResult VerifyXrSpatialAnchorStoreConnectionMSFTHandle(const XrSpatialAnchorStoreConnectionMSFT* handle_to_check);
ValidateXrHandleResult VerifyXrSpaceUserFBHandle(const XrSpaceUserFB* handle_to_check);
ValidateXrHandleResult VerifyXrFaceTrackerFBHandle(const XrFaceTrackerFB* handle_to_check);
ValidateXrHandleResult VerifyXrEyeTrackerFBHandle(const XrEyeTrackerFB* handle_to_check);
ValidateXrHandleResult VerifyXrVirtualKeyboardMETAHandle(const XrVirtualKeyboardMETA* handle_to_check);
ValidateXrHandleResult VerifyXrPassthroughColorLutMETAHandle(const XrPassthroughColorLutMETA* handle_to_check);
ValidateXrHandleResult VerifyXrFaceTracker2FBHandle(const XrFaceTracker2FB* handle_to_check);
ValidateXrHandleResult VerifyXrEnvironmentDepthProviderMETAHandle(const XrEnvironmentDepthProviderMETA* handle_to_check);
ValidateXrHandleResult VerifyXrEnvironmentDepthSwapchainMETAHandle(const XrEnvironmentDepthSwapchainMETA* handle_to_check);
ValidateXrHandleResult VerifyXrRenderModelEXTHandle(const XrRenderModelEXT* handle_to_check);
ValidateXrHandleResult VerifyXrRenderModelAssetEXTHandle(const XrRenderModelAssetEXT* handle_to_check);
ValidateXrHandleResult VerifyXrPassthroughHTCHandle(const XrPassthroughHTC* handle_to_check);
ValidateXrHandleResult VerifyXrBodyTrackerHTCHandle(const XrBodyTrackerHTC* handle_to_check);
ValidateXrHandleResult VerifyXrBodyTrackerBDHandle(const XrBodyTrackerBD* handle_to_check);
ValidateXrHandleResult VerifyXrFaceTrackerBDHandle(const XrFaceTrackerBD* handle_to_check);
ValidateXrHandleResult VerifyXrSenseDataProviderBDHandle(const XrSenseDataProviderBD* handle_to_check);
ValidateXrHandleResult VerifyXrSenseDataSnapshotBDHandle(const XrSenseDataSnapshotBD* handle_to_check);
ValidateXrHandleResult VerifyXrAnchorBDHandle(const XrAnchorBD* handle_to_check);
ValidateXrHandleResult VerifyXrSpatialAudioRendererBDHandle(const XrSpatialAudioRendererBD* handle_to_check);
ValidateXrHandleResult VerifyXrSoundFieldBDHandle(const XrSoundFieldBD* handle_to_check);
ValidateXrHandleResult VerifyXrSoundObjectBDHandle(const XrSoundObjectBD* handle_to_check);
ValidateXrHandleResult VerifyXrSoundObstacleBDHandle(const XrSoundObstacleBD* handle_to_check);
ValidateXrHandleResult VerifyXrSoundObstacleMaterialBDHandle(const XrSoundObstacleMaterialBD* handle_to_check);
ValidateXrHandleResult VerifyXrPlaneDetectorEXTHandle(const XrPlaneDetectorEXT* handle_to_check);
ValidateXrHandleResult VerifyXrTrackableTrackerANDROIDHandle(const XrTrackableTrackerANDROID* handle_to_check);
ValidateXrHandleResult VerifyXrEyeTrackerANDROIDHandle(const XrEyeTrackerANDROID* handle_to_check);
ValidateXrHandleResult VerifyXrDeviceAnchorPersistenceANDROIDHandle(const XrDeviceAnchorPersistenceANDROID* handle_to_check);
ValidateXrHandleResult VerifyXrFaceTrackerANDROIDHandle(const XrFaceTrackerANDROID* handle_to_check);
ValidateXrHandleResult VerifyXrPassthroughLayerANDROIDHandle(const XrPassthroughLayerANDROID* handle_to_check);
ValidateXrHandleResult VerifyXrWorldMeshDetectorMLHandle(const XrWorldMeshDetectorML* handle_to_check);
ValidateXrHandleResult VerifyXrFacialExpressionClientMLHandle(const XrFacialExpressionClientML* handle_to_check);
ValidateXrHandleResult VerifyXrEnvironmentRaycasterMETAHandle(const XrEnvironmentRaycasterMETA* handle_to_check);
ValidateXrHandleResult VerifyXrLightEstimatorANDROIDHandle(const XrLightEstimatorANDROID* handle_to_check);
ValidateXrHandleResult VerifyXrTrackableImageDatabaseANDROIDHandle(const XrTrackableImageDatabaseANDROID* handle_to_check);
ValidateXrHandleResult VerifyXrSceneMeshingTrackerANDROIDHandle(const XrSceneMeshingTrackerANDROID* handle_to_check);
ValidateXrHandleResult VerifyXrSceneMeshSnapshotANDROIDHandle(const XrSceneMeshSnapshotANDROID* handle_to_check);
ValidateXrHandleResult VerifyXrSpatialEntityEXTHandle(const XrSpatialEntityEXT* handle_to_check);
ValidateXrHandleResult VerifyXrSpatialContextEXTHandle(const XrSpatialContextEXT* handle_to_check);
ValidateXrHandleResult VerifyXrSpatialSnapshotEXTHandle(const XrSpatialSnapshotEXT* handle_to_check);
ValidateXrHandleResult VerifyXrSpatialPersistenceContextEXTHandle(const XrSpatialPersistenceContextEXT* handle_to_check);

// Write out prototypes for handle parent verification functions
bool VerifyXrParent(XrObjectType handle1_type, const uint64_t handle1,
                    XrObjectType handle2_type, const uint64_t handle2,
                    bool check_this);

// Function to check if an extension has been enabled
bool ExtensionEnabled(const std::vector<std::string> &extensions, const char* const check_extension_name);

// Functions to validate structures
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrApiLayerProperties* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtensionProperties* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrApplicationInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInstanceCreateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInstanceProperties* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataBuffer* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemGetInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemGraphicsProperties* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemTrackingProperties* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemProperties* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSessionCreateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVector3f* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceVelocity* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrQuaternionf* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPosef* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrReferenceSpaceCreateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtent2Df* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionSpaceCreateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceLocation* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewConfigurationProperties* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewConfigurationView* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainCreateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageBaseHeader* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageAcquireInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageWaitInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageReleaseInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSessionBeginInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameWaitInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameState* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameBeginInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerBaseHeader* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameEndInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewLocateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewState* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFovf* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrView* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionSetCreateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionCreateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionSuggestedBinding* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionProfileSuggestedBinding* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSessionActionSetsAttachInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionProfileState* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStateGetInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStateBoolean* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStateFloat* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVector2f* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStateVector2f* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStatePose* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActiveActionSet* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionsSyncInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBoundSourcesForActionEnumerateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInputSourceLocalizedNameGetInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticActionInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticBaseHeader* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBaseInStructure* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBaseOutStructure* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrOffset2Di* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtent2Di* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRect2Di* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainSubImage* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerProjectionView* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerProjection* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerQuad* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataBaseHeader* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataEventsLost* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataInstanceLossPending* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSessionStateChanged* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataReferenceSpaceChangePending* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataInteractionProfileChanged* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticVibration* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrOffset2Df* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRect2Df* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVector4f* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColor4f* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColor3f* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtent3Df* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpheref* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBoxf* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrustumf* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrUuid* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpacesLocateInfo* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceLocationData* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceLocations* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceVelocityData* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceVelocities* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerCubeKHR* value);
#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInstanceCreateInfoAndroidKHR* value);
#endif // defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerDepthInfoKHR* value);
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanSwapchainFormatListCreateInfoKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerCylinderKHR* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerEquirectKHR* value);
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLWin32KHR* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32)
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLXlibKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB)
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLXcbKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB)
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLWaylandKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND)
#if defined(XR_USE_GRAPHICS_API_OPENGL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageOpenGLKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
#if defined(XR_USE_GRAPHICS_API_OPENGL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsOpenGLKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLESAndroidKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageOpenGLESKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsOpenGLESKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingVulkanKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageVulkanKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsVulkanKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_D3D11)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingD3D11KHR* value);
#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D11)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageD3D11KHR* value);
#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D11)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsD3D11KHR* value);
#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D12)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingD3D12KHR* value);
#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_D3D12)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageD3D12KHR* value);
#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_D3D12)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsD3D12KHR* value);
#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_METAL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingMetalKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_METAL)
#if defined(XR_USE_GRAPHICS_API_METAL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageMetalKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_METAL)
#if defined(XR_USE_GRAPHICS_API_METAL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsMetalKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_METAL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVisibilityMaskKHR* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVisibilityMaskChangedKHR* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerColorScaleBiasKHR* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLoaderInitInfoBaseHeaderKHR* value);
#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLoaderInitInfoAndroidKHR* value);
#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanInstanceCreateInfoKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanDeviceCreateInfoKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanGraphicsDeviceGetInfoKHR* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerEquirect2KHR* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBindingModificationBaseHeaderKHR* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBindingModificationsKHR* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataPerfSettingsEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDebugUtilsObjectNameInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDebugUtilsLabelEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDebugUtilsMessengerCallbackDataEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDebugUtilsMessengerCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEyeGazeInteractionPropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeGazeSampleTimeEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSessionCreateInfoOverlayEXTX* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataMainSessionVisibilityChangedEXTX* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorSpaceCreateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerImageLayoutFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerAlphaBlendFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewConfigurationDepthRangeEXT* value);
#if defined(XR_USE_PLATFORM_EGL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingEGLMNDX* value);
#endif // defined(XR_USE_PLATFORM_EGL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialGraphNodeSpaceCreateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialGraphNodeBindingPropertiesMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemHandTrackingPropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackerCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointsLocateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointLocationEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointVelocityEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointLocationsEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointVelocitiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemHandTrackingMeshPropertiesMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshSpaceCreateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshUpdateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshIndexBufferMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshVertexMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshVertexBufferMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandPoseTypeInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationSessionBeginInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationStateMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationFrameStateMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationLayerInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationFrameEndInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationSwapchainCreateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelKeyStateMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelNodePropertiesMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelPropertiesMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelNodeStateMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelStateMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewConfigurationViewFovEPIC* value);
#if defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_PLATFORM_WIN32)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHolographicWindowAttachmentMSFT* value);
#endif // defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_PLATFORM_WIN32)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerReprojectionInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerReprojectionPlaneOverrideMSFT* value);
#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAndroidSurfaceSwapchainCreateInfoFB* value);
#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateBaseHeaderFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerSecureContentFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemBodyTrackingPropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackerCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodySkeletonJointFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodySkeletonFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointsLocateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationsFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionProfileDpadBindingEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionProfileAnalogThresholdVALVE* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointsMotionRangeInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrUuidMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneObserverCreateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneCreateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneSphereBoundMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneOrientedBoxBoundMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneFrustumBoundMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneBoundsMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrNewSceneComputeInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVisualMeshComputeLodInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentsMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentsGetInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentLocationMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentLocationsMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentsLocateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneObjectMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneObjectsMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentParentFilterInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneObjectTypesFilterInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrScenePlaneMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrScenePlanesMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrScenePlaneAlignmentFilterInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshesMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshBuffersGetInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshBuffersMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshVertexBufferMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshIndicesUint32MSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshIndicesUint16MSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSerializedSceneFragmentDataGetInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDeserializeSceneFragmentMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneDeserializeInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataDisplayRefreshRateChangedFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViveTrackerPathsHTCX* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataViveTrackerConnectedHTCX* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFacialTrackingPropertiesHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialExpressionsHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialTrackerCreateInfoHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemColorSpacePropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVector4sFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingMeshFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingScaleFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingAimStateFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandCapsuleFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingCapsulesStateFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialEntityPropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceComponentStatusSetInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceComponentStatusFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpatialAnchorCreateCompleteFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceSetStatusCompleteFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationProfileCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainCreateInfoFoveationFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateFoveationFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationLevelProfileCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemKeyboardTrackingPropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrKeyboardTrackingDescriptionFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrKeyboardSpaceCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrKeyboardTrackingQueryFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTriangleMeshCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughPropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughProperties2FB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughLayerCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerPassthroughFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGeometryInstanceCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGeometryInstanceTransformFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughStyleFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorMapMonoToRgbaFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorMapMonoToMonoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughBrightnessContrastSaturationFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataPassthroughStateChangedFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelPathInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelPropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelBufferFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelLoadInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemRenderModelPropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelCapabilitiesRequestFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewLocateFoveatedRenderingVARJO* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveatedViewConfigurationViewVARJO* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFoveatedRenderingPropertiesVARJO* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerDepthTestVARJO* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemMarkerTrackingPropertiesVARJO* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataMarkerTrackingUpdateVARJO* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerSpaceCreateInfoVARJO* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameEndInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGlobalDimmerFrameEndInfoML* value);
#if defined(XR_USE_PLATFORM_ML)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCoordinateSpaceCreateInfoML* value);
#endif // defined(XR_USE_PLATFORM_ML)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemMarkerUnderstandingPropertiesML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorCreateInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorArucoInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorSizeInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorAprilTagInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorCustomProfileInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorSnapshotInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorStateML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerSpaceCreateInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalizationMapML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataLocalizationChangedML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalizationMapQueryInfoBaseHeaderML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMapLocalizationRequestInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalizationMapImportInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalizationEnableEventsInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsCreateInfoBaseHeaderML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsCreateInfoFromPoseML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialAnchorsCompletionML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorStateML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsCreateStorageInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsQueryInfoBaseHeaderML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsQueryInfoRadiusML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsQueryCompletionML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsCreateInfoFromUuidsML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsPublishInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsPublishCompletionML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsDeleteInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsDeleteCompletionML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsUpdateExpirationInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsUpdateExpirationCompletionML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCompletionResultML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsPublishCompletionDetailsML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsDeleteCompletionDetailsML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsUpdateExpirationCompletionDetailsML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorPersistenceNameMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorPersistenceInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkerMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkersMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkerTypeFilterMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkerQRCodeMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkerQRCodesMSFT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceQueryInfoBaseHeaderFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceFilterInfoBaseHeaderFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceQueryInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceStorageLocationFilterInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceUuidFilterInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceComponentFilterInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceQueryResultFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceQueryResultsFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceQueryResultsAvailableFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceQueryCompleteFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceSaveInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceEraseInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceSaveCompleteFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceEraseCompleteFB* value);
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageFoveationVulkanFB* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateAndroidSurfaceDimensionsFB* value);
#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateSamplerOpenGLESFB* value);
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateSamplerVulkanFB* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceShareInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceShareCompleteFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerSpaceWarpInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpaceWarpPropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticAmplitudeEnvelopeVibrationFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrOffset3DfFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRect3DfFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSemanticLabelsFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRoomLayoutFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBoundary2DFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSemanticLabelsSupportInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDigitalLensControlALMALENCE* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSceneCaptureCompleteFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneCaptureRequestInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceContainerFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationEyeTrackedProfileCreateInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationEyeTrackedStateMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFoveationEyeTrackedPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFaceTrackingPropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackerCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionStatusFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionWeightsFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeGazeFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeTrackerCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeGazesInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEyeTrackingPropertiesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeGazesFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughKeyboardHandsIntensityFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerSettingsFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticPcmVibrationFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDevicePcmSampleRateStateFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameSynthesisInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameSynthesisConfigViewEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerDepthTestFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalDimmingFrameEndInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughPreferencesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemVirtualKeyboardPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardCreateInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardSpaceCreateInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardLocationInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardModelVisibilitySetInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardAnimationStateMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardModelAnimationStatesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardTextureDataMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardInputInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardTextContextChangeInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardCommitTextMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardBackspaceMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardEnterMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardShownMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardHiddenMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExternalCameraIntrinsicsOCULUS* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExternalCameraExtrinsicsOCULUS* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExternalCameraOCULUS* value);
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanSwapchainCreateInfoMETA* value);
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPerformanceMetricsStateMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPerformanceMetricsCounterMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceListSaveInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceListSaveCompleteFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceUserCreateInfoFB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemHeadsetIdPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpaceDiscoveryPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceFilterBaseHeaderMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceDiscoveryInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceFilterUuidMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceFilterComponentMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceDiscoveryResultMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceDiscoveryResultsMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceDiscoveryResultsAvailableMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceDiscoveryCompleteMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRecommendedLayerResolutionMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRecommendedLayerResolutionGetInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpacePersistencePropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpacesSaveInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpacesSaveResultMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpacesEraseInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpacesEraseResultMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorLutDataMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorLutCreateInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorLutUpdateInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorMapLutMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorMapInterpolatedLutMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughColorLutPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceTriangleMeshGetInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceTriangleMeshMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPropertiesBodyTrackingFullBodyMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataPassthroughLayerResumedMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackingCalibrationStatusMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackingCalibrationInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPropertiesBodyTrackingCalibrationMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPropertiesBodyTrackingFidelityMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackingFidelityStatusMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFaceTrackingProperties2FB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackerCreateInfo2FB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionInfo2FB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionWeights2FB* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialEntitySharingPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrShareSpacesRecipientBaseHeaderMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrShareSpacesInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataShareSpacesCompleteMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthProviderCreateInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthSwapchainCreateInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthSwapchainStateMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthImageAcquireInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthImageViewMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthImageMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthImageTimestampMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthHandRemovalSetInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEnvironmentDepthPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelPropertiesGetInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelPropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelSpaceCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelStateGetInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelNodeStateEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelStateEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetDataGetInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetDataEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetPropertiesGetInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetNodePropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetPropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionRenderModelIdsEnumerateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionRenderModelSubactionPathInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionRenderModelTopLevelUserPathGetInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataInteractionRenderModelsChangedEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandGestureQCOM* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughCreateInfoHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughMeshTransformInfoHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerPassthroughHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationApplyInfoHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationConfigurationHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationDynamicModeInfoHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationCustomModeInfoHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemAnchorPropertiesHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorNameHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemBodyTrackingPropertiesHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackerCreateInfoHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointsLocateInfoHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationsHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodySkeletonJointHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodySkeletonHTC* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActiveActionSetPriorityEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActiveActionSetPrioritiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemForceFeedbackCurlPropertiesMNDX* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrForceFeedbackCurlApplyLocationMNDX* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrForceFeedbackCurlApplyLocationsMNDX* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemBodyTrackingPropertiesBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackerCreateInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointsLocateInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationsBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFacialSimulationPropertiesBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackerCreateInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialSimulationDataGetInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialSimulationDataBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLipExpressionDataBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialSensingPropertiesBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentGetInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataBaseHeaderBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityLocationGetInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataLocationBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataSemanticBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataBoundingBox2DBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataPolygonBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataBoundingBox3DBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataTriangleMeshBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataProviderCreateInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataProviderStartInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSenseDataProviderStateChangedBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSenseDataUpdatedBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataQueryInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataQueryCompletionBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrQueriedSenseDataGetInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityStateBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrQueriedSenseDataBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataFilterUuidBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataFilterSemanticBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityAnchorCreateInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAnchorSpaceCreateInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFutureCompletionEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialAnchorPropertiesBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateCompletionBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorPersistInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorUnpersistInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialAnchorSharingPropertiesBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorShareInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSharedSpatialAnchorDownloadInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialScenePropertiesBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneCaptureInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialMeshPropertiesBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataProviderCreateInfoSpatialMeshBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFuturePollResultProgressBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialPlanePropertiesBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataPlaneOrientationBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataFilterPlaneOrientationBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAudioRendererCreateInfoBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAudioBufferBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectDirectivityCardioidBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectShapeSphereBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAttenuationCurvePointBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectDistanceAttenuationCurveBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectDistanceAttenuationBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectConfigBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundFieldConfigBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundFieldChannelDefinitionSurroundBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundFieldChannelDefinitionAmbixBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundFieldChannelDefinitionFumaBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundTriangleMeshBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObstacleConfigBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObstacleMaterialConfigBD* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingDataSourceInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingDataSourceStateEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPlaneDetectionPropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorBeginInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorGetInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorLocationEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorLocationsEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorPolygonBufferEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableTrackerCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableGetInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackablePlaneANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAnchorSpaceCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemTrackablesPropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEyeTrackingPropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyesGetInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeTrackerCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDeviceAnchorPersistenceCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPersistedAnchorSpaceCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPersistedAnchorSpaceInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemDeviceAnchorPersistencePropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackerCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceStateGetInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceStateANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFaceTrackingPropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughCameraStatePropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughCameraStateGetInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataRecommendedResolutionChangedANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughLayerCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughLayerMeshANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerPassthroughANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughLayerPropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRaycastInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRaycastHitResultANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRaycastHitResultsANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPerformanceMetricsStateANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPerformanceMetricsCounterANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableObjectANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableObjectConfigurationANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFutureCancelInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFuturePollInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFutureCompletionBaseHeaderEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFuturePollResultEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataUserPresenceChangedEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemUserPresencePropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataHeadsetFitChangedML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataEyeCalibrationChangedML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrUserCalibrationEnableEventsInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemNotificationsSetInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshDetectorCreateInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBlockStateML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshStateRequestInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshStateRequestCompletionML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBufferRecommendedSizeInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBufferSizeML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBufferML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBlockRequestML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshGetInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBlockML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshRequestCompletionInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshRequestCompletionML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFacialExpressionPropertiesML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialExpressionClientCreateInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialExpressionBlendShapeGetInfoML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialExpressionBlendShapePropertiesML* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemBoundaryVisibilityPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataBoundaryVisibilityChangedMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSimultaneousHandsAndControllersPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSimultaneousHandsAndControllersTrackingResumeInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSimultaneousHandsAndControllersTrackingPauseInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackingVisemesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFaceTrackingVisemesPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRoomMeshFaceMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRoomMeshFaceIndicesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceRoomMeshGetInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRoomMeshMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColocationDiscoveryStartInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColocationDiscoveryStopInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColocationAdvertisementStartInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColocationAdvertisementStopInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataStartColocationAdvertisementCompleteMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataStopColocationAdvertisementCompleteMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataColocationAdvertisementCompleteMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataStartColocationDiscoveryCompleteMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataColocationDiscoveryResultMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataColocationDiscoveryCompleteMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataStopColocationDiscoveryCompleteMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemColocationDiscoveryPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialEntityGroupSharingPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrShareSpacesRecipientGroupsMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceGroupUuidFilterInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEnvironmentRaycastPropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycasterCreateInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycasterCreateCompletionMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycastFilterBaseHeaderMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycastHitGetInfoMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycastHitMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycastFilterDistanceMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtent3DiMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTilePropertiesMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTilePropertiesHintMETA* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemLightEstimationPropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLightEstimatorCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLightEstimateGetInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLightEstimateANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDirectionalLightANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAmbientLightANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSphericalHarmonicsANDROID* value);
#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAnchorSharingInfoANDROID* value);
#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAnchorSharingTokenANDROID* value);
#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemAnchorSharingExportPropertiesANDROID* value);
#endif // defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemMarkerTrackingPropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableMarkerDatabaseEntryANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableMarkerDatabaseANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableMarkerConfigurationANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableMarkerANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemQrCodeTrackingPropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableQrCodeConfigurationANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableQrCodeANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemImageTrackingPropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableImageDatabaseEntryANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableImageDatabaseCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateTrackableImageDatabaseCompletionANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableImageConfigurationANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableImageANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataImageTrackingLostANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSceneMeshingPropertiesANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshingTrackerCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshSnapshotCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshSnapshotCreationResultANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneSubmeshStateANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneSubmeshDataANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityComponentTypesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationBaseHeaderEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialContextCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialContextCompletionEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialDiscoverySnapshotCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialDiscoverySnapshotCompletionEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentDataQueryConditionEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentDataQueryResultEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialBufferEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialBufferGetInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialBounded2DDataEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentBounded2DListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentBounded3DListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentParentListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialMeshDataEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentMesh3DListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityFromIdCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialUpdateSnapshotCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpatialDiscoveryRecommendedEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialFilterTrackingStateEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationPlaneTrackingEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentPlaneAlignmentListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentMesh2DListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialPolygon2DDataEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentPolygon2DListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentPlaneSemanticLabelListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrStationaryReferenceSpaceGenerationIdGetInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrStationaryReferenceSpaceGenerationIdResultEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationQrCodeEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationMicroQrCodeEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationArucoMarkerEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationAprilTagEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialMarkerSizeEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialMarkerStaticOptimizationEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialMarkerDataEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentMarkerListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationAnchorEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentAnchorListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialPersistenceContextCreateInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialPersistenceContextCompletionEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialContextPersistenceConfigEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialDiscoveryPersistenceUuidFilterEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialPersistenceDataEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentPersistenceListEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticParametricPropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticParametricPointEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticParametricTransientEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticParametricVibrationEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemHapticParametricPropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityPersistInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPersistSpatialEntityCompletionEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityUnpersistInfoEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrUnpersistSpatialEntityCompletionEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationObjectTrackingANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentObjectSemanticLabelListANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialRaycastResultDataANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationDepthRaycastANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialRaycastInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentRaycastResultListANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialRaycastSnapshotCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorParentANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialDiscoveryUniqueEntitiesFilterANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentSubsumedByListANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorSpaceFromIdCreateInfoANDROID* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBatteryStateDisplayEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLoaderInitPropertyValueEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLoaderInitInfoPropertiesEXT* value);
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataViewConfigurationViewsChangedEXT* value);
// Function used to clean up any residual map values that point to an instance prior to that
// instance being deleted.
void GenValidUsageCleanUpMaps(GenValidUsageXrInstanceInfo *instance_info) {
    EraseAllInstanceTableMapElements(instance_info);
    g_session_info.removeHandlesForInstance(instance_info);
    g_space_info.removeHandlesForInstance(instance_info);
    g_action_info.removeHandlesForInstance(instance_info);
    g_swapchain_info.removeHandlesForInstance(instance_info);
    g_actionset_info.removeHandlesForInstance(instance_info);
    g_debugutilsmessengerext_info.removeHandlesForInstance(instance_info);
    g_spatialanchormsft_info.removeHandlesForInstance(instance_info);
    g_spatialgraphnodebindingmsft_info.removeHandlesForInstance(instance_info);
    g_handtrackerext_info.removeHandlesForInstance(instance_info);
    g_bodytrackerfb_info.removeHandlesForInstance(instance_info);
    g_sceneobservermsft_info.removeHandlesForInstance(instance_info);
    g_scenemsft_info.removeHandlesForInstance(instance_info);
    g_facialtrackerhtc_info.removeHandlesForInstance(instance_info);
    g_foveationprofilefb_info.removeHandlesForInstance(instance_info);
    g_trianglemeshfb_info.removeHandlesForInstance(instance_info);
    g_passthroughfb_info.removeHandlesForInstance(instance_info);
    g_passthroughlayerfb_info.removeHandlesForInstance(instance_info);
    g_geometryinstancefb_info.removeHandlesForInstance(instance_info);
    g_markerdetectorml_info.removeHandlesForInstance(instance_info);
    g_exportedlocalizationmapml_info.removeHandlesForInstance(instance_info);
    g_spatialanchorsstorageml_info.removeHandlesForInstance(instance_info);
    g_spatialanchorstoreconnectionmsft_info.removeHandlesForInstance(instance_info);
    g_spaceuserfb_info.removeHandlesForInstance(instance_info);
    g_facetrackerfb_info.removeHandlesForInstance(instance_info);
    g_eyetrackerfb_info.removeHandlesForInstance(instance_info);
    g_virtualkeyboardmeta_info.removeHandlesForInstance(instance_info);
    g_passthroughcolorlutmeta_info.removeHandlesForInstance(instance_info);
    g_facetracker2fb_info.removeHandlesForInstance(instance_info);
    g_environmentdepthprovidermeta_info.removeHandlesForInstance(instance_info);
    g_environmentdepthswapchainmeta_info.removeHandlesForInstance(instance_info);
    g_rendermodelext_info.removeHandlesForInstance(instance_info);
    g_rendermodelassetext_info.removeHandlesForInstance(instance_info);
    g_passthroughhtc_info.removeHandlesForInstance(instance_info);
    g_bodytrackerhtc_info.removeHandlesForInstance(instance_info);
    g_bodytrackerbd_info.removeHandlesForInstance(instance_info);
    g_facetrackerbd_info.removeHandlesForInstance(instance_info);
    g_sensedataproviderbd_info.removeHandlesForInstance(instance_info);
    g_sensedatasnapshotbd_info.removeHandlesForInstance(instance_info);
    g_anchorbd_info.removeHandlesForInstance(instance_info);
    g_spatialaudiorendererbd_info.removeHandlesForInstance(instance_info);
    g_soundfieldbd_info.removeHandlesForInstance(instance_info);
    g_soundobjectbd_info.removeHandlesForInstance(instance_info);
    g_soundobstaclebd_info.removeHandlesForInstance(instance_info);
    g_soundobstaclematerialbd_info.removeHandlesForInstance(instance_info);
    g_planedetectorext_info.removeHandlesForInstance(instance_info);
    g_trackabletrackerandroid_info.removeHandlesForInstance(instance_info);
    g_eyetrackerandroid_info.removeHandlesForInstance(instance_info);
    g_deviceanchorpersistenceandroid_info.removeHandlesForInstance(instance_info);
    g_facetrackerandroid_info.removeHandlesForInstance(instance_info);
    g_passthroughlayerandroid_info.removeHandlesForInstance(instance_info);
    g_worldmeshdetectorml_info.removeHandlesForInstance(instance_info);
    g_facialexpressionclientml_info.removeHandlesForInstance(instance_info);
    g_environmentraycastermeta_info.removeHandlesForInstance(instance_info);
    g_lightestimatorandroid_info.removeHandlesForInstance(instance_info);
    g_trackableimagedatabaseandroid_info.removeHandlesForInstance(instance_info);
    g_scenemeshingtrackerandroid_info.removeHandlesForInstance(instance_info);
    g_scenemeshsnapshotandroid_info.removeHandlesForInstance(instance_info);
    g_spatialentityext_info.removeHandlesForInstance(instance_info);
    g_spatialcontextext_info.removeHandlesForInstance(instance_info);
    g_spatialsnapshotext_info.removeHandlesForInstance(instance_info);
    g_spatialpersistencecontextext_info.removeHandlesForInstance(instance_info);
}

// Function to convert XrObjectType to string
std::string GenValidUsageXrObjectTypeToString(const XrObjectType& type) {
    std::string object_string;
    if (type == XR_OBJECT_TYPE_UNKNOWN) {
        object_string = "Unknown XR Object";
    } else if (type == XR_OBJECT_TYPE_INSTANCE) {
        object_string = "XrInstance";
    } else if (type == XR_OBJECT_TYPE_SESSION) {
        object_string = "XrSession";
    } else if (type == XR_OBJECT_TYPE_SWAPCHAIN) {
        object_string = "XrSwapchain";
    } else if (type == XR_OBJECT_TYPE_SPACE) {
        object_string = "XrSpace";
    } else if (type == XR_OBJECT_TYPE_ACTION_SET) {
        object_string = "XrActionSet";
    } else if (type == XR_OBJECT_TYPE_ACTION) {
        object_string = "XrAction";
    } else if (type == XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT) {
        object_string = "XrDebugUtilsMessengerEXT";
    } else if (type == XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT) {
        object_string = "XrSpatialAnchorMSFT";
    } else if (type == XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT) {
        object_string = "XrSpatialGraphNodeBindingMSFT";
    } else if (type == XR_OBJECT_TYPE_HAND_TRACKER_EXT) {
        object_string = "XrHandTrackerEXT";
    } else if (type == XR_OBJECT_TYPE_BODY_TRACKER_FB) {
        object_string = "XrBodyTrackerFB";
    } else if (type == XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT) {
        object_string = "XrSceneObserverMSFT";
    } else if (type == XR_OBJECT_TYPE_SCENE_MSFT) {
        object_string = "XrSceneMSFT";
    } else if (type == XR_OBJECT_TYPE_FACIAL_TRACKER_HTC) {
        object_string = "XrFacialTrackerHTC";
    } else if (type == XR_OBJECT_TYPE_FOVEATION_PROFILE_FB) {
        object_string = "XrFoveationProfileFB";
    } else if (type == XR_OBJECT_TYPE_TRIANGLE_MESH_FB) {
        object_string = "XrTriangleMeshFB";
    } else if (type == XR_OBJECT_TYPE_PASSTHROUGH_FB) {
        object_string = "XrPassthroughFB";
    } else if (type == XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB) {
        object_string = "XrPassthroughLayerFB";
    } else if (type == XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB) {
        object_string = "XrGeometryInstanceFB";
    } else if (type == XR_OBJECT_TYPE_MARKER_DETECTOR_ML) {
        object_string = "XrMarkerDetectorML";
    } else if (type == XR_OBJECT_TYPE_EXPORTED_LOCALIZATION_MAP_ML) {
        object_string = "XrExportedLocalizationMapML";
    } else if (type == XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML) {
        object_string = "XrSpatialAnchorsStorageML";
    } else if (type == XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT) {
        object_string = "XrSpatialAnchorStoreConnectionMSFT";
    } else if (type == XR_OBJECT_TYPE_FACE_TRACKER_FB) {
        object_string = "XrFaceTrackerFB";
    } else if (type == XR_OBJECT_TYPE_EYE_TRACKER_FB) {
        object_string = "XrEyeTrackerFB";
    } else if (type == XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META) {
        object_string = "XrVirtualKeyboardMETA";
    } else if (type == XR_OBJECT_TYPE_SPACE_USER_FB) {
        object_string = "XrSpaceUserFB";
    } else if (type == XR_OBJECT_TYPE_PASSTHROUGH_COLOR_LUT_META) {
        object_string = "XrPassthroughColorLutMETA";
    } else if (type == XR_OBJECT_TYPE_FACE_TRACKER2_FB) {
        object_string = "XrFaceTracker2FB";
    } else if (type == XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META) {
        object_string = "XrEnvironmentDepthProviderMETA";
    } else if (type == XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_META) {
        object_string = "XrEnvironmentDepthSwapchainMETA";
    } else if (type == XR_OBJECT_TYPE_RENDER_MODEL_EXT) {
        object_string = "XrRenderModelEXT";
    } else if (type == XR_OBJECT_TYPE_RENDER_MODEL_ASSET_EXT) {
        object_string = "XrRenderModelAssetEXT";
    } else if (type == XR_OBJECT_TYPE_PASSTHROUGH_HTC) {
        object_string = "XrPassthroughHTC";
    } else if (type == XR_OBJECT_TYPE_BODY_TRACKER_HTC) {
        object_string = "XrBodyTrackerHTC";
    } else if (type == XR_OBJECT_TYPE_BODY_TRACKER_BD) {
        object_string = "XrBodyTrackerBD";
    } else if (type == XR_OBJECT_TYPE_FACE_TRACKER_BD) {
        object_string = "XrFaceTrackerBD";
    } else if (type == XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD) {
        object_string = "XrSenseDataProviderBD";
    } else if (type == XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD) {
        object_string = "XrSenseDataSnapshotBD";
    } else if (type == XR_OBJECT_TYPE_ANCHOR_BD) {
        object_string = "XrAnchorBD";
    } else if (type == XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD) {
        object_string = "XrSpatialAudioRendererBD";
    } else if (type == XR_OBJECT_TYPE_SOUND_FIELD_BD) {
        object_string = "XrSoundFieldBD";
    } else if (type == XR_OBJECT_TYPE_SOUND_OBJECT_BD) {
        object_string = "XrSoundObjectBD";
    } else if (type == XR_OBJECT_TYPE_SOUND_OBSTACLE_BD) {
        object_string = "XrSoundObstacleBD";
    } else if (type == XR_OBJECT_TYPE_SOUND_OBSTACLE_MATERIAL_BD) {
        object_string = "XrSoundObstacleMaterialBD";
    } else if (type == XR_OBJECT_TYPE_PLANE_DETECTOR_EXT) {
        object_string = "XrPlaneDetectorEXT";
    } else if (type == XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID) {
        object_string = "XrTrackableTrackerANDROID";
    } else if (type == XR_OBJECT_TYPE_EYE_TRACKER_ANDROID) {
        object_string = "XrEyeTrackerANDROID";
    } else if (type == XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID) {
        object_string = "XrDeviceAnchorPersistenceANDROID";
    } else if (type == XR_OBJECT_TYPE_FACE_TRACKER_ANDROID) {
        object_string = "XrFaceTrackerANDROID";
    } else if (type == XR_OBJECT_TYPE_PASSTHROUGH_LAYER_ANDROID) {
        object_string = "XrPassthroughLayerANDROID";
    } else if (type == XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML) {
        object_string = "XrWorldMeshDetectorML";
    } else if (type == XR_OBJECT_TYPE_FACIAL_EXPRESSION_CLIENT_ML) {
        object_string = "XrFacialExpressionClientML";
    } else if (type == XR_OBJECT_TYPE_ENVIRONMENT_RAYCASTER_META) {
        object_string = "XrEnvironmentRaycasterMETA";
    } else if (type == XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID) {
        object_string = "XrLightEstimatorANDROID";
    } else if (type == XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID) {
        object_string = "XrTrackableImageDatabaseANDROID";
    } else if (type == XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID) {
        object_string = "XrSceneMeshingTrackerANDROID";
    } else if (type == XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID) {
        object_string = "XrSceneMeshSnapshotANDROID";
    } else if (type == XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT) {
        object_string = "XrSpatialEntityEXT";
    } else if (type == XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT) {
        object_string = "XrSpatialContextEXT";
    } else if (type == XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT) {
        object_string = "XrSpatialSnapshotEXT";
    } else if (type == XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT) {
        object_string = "XrSpatialPersistenceContextEXT";
    }
    return object_string;
}

// Structure used for state validation.

// Result return value for next chain validation
enum NextChainResult {
    NEXT_CHAIN_RESULT_VALID = 0,
    NEXT_CHAIN_RESULT_ERROR = -1,
};

// Prototype for validateNextChain command (it uses the validate structure commands so add it after
NextChainResult ValidateNextChain(GenValidUsageXrInstanceInfo *instance_info,
                                  const std::string &command_name,
                                  std::vector<GenValidUsageXrObjectInfo>& objects_info,
                                  const void* next,
                                  std::unordered_set<XrStructureType>& valid_ext_structs,
                                  std::unordered_set<XrStructureType>& encountered_structs,
                                  std::unordered_set<XrStructureType>& unknown_structs,
                                  std::unordered_set<XrStructureType>& duplicate_structs);

// Function to validate XrInstanceCreateFlags flags
ValidateXrFlagsResult ValidateXrInstanceCreateFlags(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSessionCreateFlags flags
ValidateXrFlagsResult ValidateXrSessionCreateFlags(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSpaceVelocityFlags flags
ValidateXrFlagsResult ValidateXrSpaceVelocityFlags(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SPACE_VELOCITY_LINEAR_VALID_BIT) != 0) {
        // Clear the value XR_SPACE_VELOCITY_LINEAR_VALID_BIT since it is valid
        int_value &= ~XR_SPACE_VELOCITY_LINEAR_VALID_BIT;
    }
    if ((int_value & XR_SPACE_VELOCITY_ANGULAR_VALID_BIT) != 0) {
        // Clear the value XR_SPACE_VELOCITY_ANGULAR_VALID_BIT since it is valid
        int_value &= ~XR_SPACE_VELOCITY_ANGULAR_VALID_BIT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSpaceLocationFlags flags
ValidateXrFlagsResult ValidateXrSpaceLocationFlags(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) != 0) {
        // Clear the value XR_SPACE_LOCATION_ORIENTATION_VALID_BIT since it is valid
        int_value &= ~XR_SPACE_LOCATION_ORIENTATION_VALID_BIT;
    }
    if ((int_value & XR_SPACE_LOCATION_POSITION_VALID_BIT) != 0) {
        // Clear the value XR_SPACE_LOCATION_POSITION_VALID_BIT since it is valid
        int_value &= ~XR_SPACE_LOCATION_POSITION_VALID_BIT;
    }
    if ((int_value & XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT) != 0) {
        // Clear the value XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT since it is valid
        int_value &= ~XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT;
    }
    if ((int_value & XR_SPACE_LOCATION_POSITION_TRACKED_BIT) != 0) {
        // Clear the value XR_SPACE_LOCATION_POSITION_TRACKED_BIT since it is valid
        int_value &= ~XR_SPACE_LOCATION_POSITION_TRACKED_BIT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSwapchainCreateFlags flags
ValidateXrFlagsResult ValidateXrSwapchainCreateFlags(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT) != 0) {
        // Clear the value XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT since it is valid
        int_value &= ~XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT;
    }
    if ((int_value & XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT) != 0) {
        // Clear the value XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT since it is valid
        int_value &= ~XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSwapchainUsageFlags flags
ValidateXrFlagsResult ValidateXrSwapchainUsageFlags(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT) != 0) {
        // Clear the value XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT since it is valid
        int_value &= ~XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT;
    }
    if ((int_value & XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0) {
        // Clear the value XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT since it is valid
        int_value &= ~XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
    }
    if ((int_value & XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT) != 0) {
        // Clear the value XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT since it is valid
        int_value &= ~XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT;
    }
    if ((int_value & XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT) != 0) {
        // Clear the value XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT since it is valid
        int_value &= ~XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT;
    }
    if ((int_value & XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT) != 0) {
        // Clear the value XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT since it is valid
        int_value &= ~XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT;
    }
    if ((int_value & XR_SWAPCHAIN_USAGE_SAMPLED_BIT) != 0) {
        // Clear the value XR_SWAPCHAIN_USAGE_SAMPLED_BIT since it is valid
        int_value &= ~XR_SWAPCHAIN_USAGE_SAMPLED_BIT;
    }
    if ((int_value & XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT) != 0) {
        // Clear the value XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT since it is valid
        int_value &= ~XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT;
    }
    if ((int_value & XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND) != 0) {
        // Clear the value XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND since it is valid
        int_value &= ~XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND;
    }
    if ((int_value & XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR) != 0) {
        // Clear the value XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR since it is valid
        int_value &= ~XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrCompositionLayerFlags flags
ValidateXrFlagsResult ValidateXrCompositionLayerFlags(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT;
    }
    if ((int_value & XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT;
    }
    if ((int_value & XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT;
    }
    if ((int_value & XR_COMPOSITION_LAYER_INVERTED_ALPHA_BIT_EXT) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_INVERTED_ALPHA_BIT_EXT since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_INVERTED_ALPHA_BIT_EXT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrViewStateFlags flags
ValidateXrFlagsResult ValidateXrViewStateFlags(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_VIEW_STATE_ORIENTATION_VALID_BIT) != 0) {
        // Clear the value XR_VIEW_STATE_ORIENTATION_VALID_BIT since it is valid
        int_value &= ~XR_VIEW_STATE_ORIENTATION_VALID_BIT;
    }
    if ((int_value & XR_VIEW_STATE_POSITION_VALID_BIT) != 0) {
        // Clear the value XR_VIEW_STATE_POSITION_VALID_BIT since it is valid
        int_value &= ~XR_VIEW_STATE_POSITION_VALID_BIT;
    }
    if ((int_value & XR_VIEW_STATE_ORIENTATION_TRACKED_BIT) != 0) {
        // Clear the value XR_VIEW_STATE_ORIENTATION_TRACKED_BIT since it is valid
        int_value &= ~XR_VIEW_STATE_ORIENTATION_TRACKED_BIT;
    }
    if ((int_value & XR_VIEW_STATE_POSITION_TRACKED_BIT) != 0) {
        // Clear the value XR_VIEW_STATE_POSITION_TRACKED_BIT since it is valid
        int_value &= ~XR_VIEW_STATE_POSITION_TRACKED_BIT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrInputSourceLocalizedNameFlags flags
ValidateXrFlagsResult ValidateXrInputSourceLocalizedNameFlags(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_INPUT_SOURCE_LOCALIZED_NAME_USER_PATH_BIT) != 0) {
        // Clear the value XR_INPUT_SOURCE_LOCALIZED_NAME_USER_PATH_BIT since it is valid
        int_value &= ~XR_INPUT_SOURCE_LOCALIZED_NAME_USER_PATH_BIT;
    }
    if ((int_value & XR_INPUT_SOURCE_LOCALIZED_NAME_INTERACTION_PROFILE_BIT) != 0) {
        // Clear the value XR_INPUT_SOURCE_LOCALIZED_NAME_INTERACTION_PROFILE_BIT since it is valid
        int_value &= ~XR_INPUT_SOURCE_LOCALIZED_NAME_INTERACTION_PROFILE_BIT;
    }
    if ((int_value & XR_INPUT_SOURCE_LOCALIZED_NAME_COMPONENT_BIT) != 0) {
        // Clear the value XR_INPUT_SOURCE_LOCALIZED_NAME_COMPONENT_BIT since it is valid
        int_value &= ~XR_INPUT_SOURCE_LOCALIZED_NAME_COMPONENT_BIT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

#if defined(XR_USE_GRAPHICS_API_VULKAN)
// Function to validate XrVulkanInstanceCreateFlagsKHR flags
ValidateXrFlagsResult ValidateXrVulkanInstanceCreateFlagsKHR(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
// Function to validate XrVulkanDeviceCreateFlagsKHR flags
ValidateXrFlagsResult ValidateXrVulkanDeviceCreateFlagsKHR(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
// Function to validate XrDebugUtilsMessageSeverityFlagsEXT flags
ValidateXrFlagsResult ValidateXrDebugUtilsMessageSeverityFlagsEXT(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) != 0) {
        // Clear the value XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT since it is valid
        int_value &= ~XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
    }
    if ((int_value & XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) != 0) {
        // Clear the value XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT since it is valid
        int_value &= ~XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT;
    }
    if ((int_value & XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) != 0) {
        // Clear the value XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT since it is valid
        int_value &= ~XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT;
    }
    if ((int_value & XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) != 0) {
        // Clear the value XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT since it is valid
        int_value &= ~XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrDebugUtilsMessageTypeFlagsEXT flags
ValidateXrFlagsResult ValidateXrDebugUtilsMessageTypeFlagsEXT(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT) != 0) {
        // Clear the value XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT since it is valid
        int_value &= ~XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT;
    }
    if ((int_value & XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) != 0) {
        // Clear the value XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT since it is valid
        int_value &= ~XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
    }
    if ((int_value & XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) != 0) {
        // Clear the value XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT since it is valid
        int_value &= ~XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
    }
    if ((int_value & XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT) != 0) {
        // Clear the value XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT since it is valid
        int_value &= ~XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrOverlaySessionCreateFlagsEXTX flags
ValidateXrFlagsResult ValidateXrOverlaySessionCreateFlagsEXTX(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrOverlayMainSessionFlagsEXTX flags
ValidateXrFlagsResult ValidateXrOverlayMainSessionFlagsEXTX(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX) != 0) {
        // Clear the value XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX since it is valid
        int_value &= ~XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrCompositionLayerImageLayoutFlagsFB flags
ValidateXrFlagsResult ValidateXrCompositionLayerImageLayoutFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

#if defined(XR_USE_PLATFORM_ANDROID)
// Function to validate XrAndroidSurfaceSwapchainFlagsFB flags
ValidateXrFlagsResult ValidateXrAndroidSurfaceSwapchainFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB) != 0) {
        // Clear the value XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB since it is valid
        int_value &= ~XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB;
    }
    if ((int_value & XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB) != 0) {
        // Clear the value XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB since it is valid
        int_value &= ~XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

#endif // defined(XR_USE_PLATFORM_ANDROID)
// Function to validate XrCompositionLayerSecureContentFlagsFB flags
ValidateXrFlagsResult ValidateXrCompositionLayerSecureContentFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB;
    }
    if ((int_value & XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrHandTrackingAimFlagsFB flags
ValidateXrFlagsResult ValidateXrHandTrackingAimFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB) != 0) {
        // Clear the value XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB since it is valid
        int_value &= ~XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB;
    }
    if ((int_value & XR_HAND_TRACKING_AIM_VALID_BIT_FB) != 0) {
        // Clear the value XR_HAND_TRACKING_AIM_VALID_BIT_FB since it is valid
        int_value &= ~XR_HAND_TRACKING_AIM_VALID_BIT_FB;
    }
    if ((int_value & XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB) != 0) {
        // Clear the value XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB since it is valid
        int_value &= ~XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB;
    }
    if ((int_value & XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB) != 0) {
        // Clear the value XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB since it is valid
        int_value &= ~XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB;
    }
    if ((int_value & XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB) != 0) {
        // Clear the value XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB since it is valid
        int_value &= ~XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB;
    }
    if ((int_value & XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB) != 0) {
        // Clear the value XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB since it is valid
        int_value &= ~XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB;
    }
    if ((int_value & XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB) != 0) {
        // Clear the value XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB since it is valid
        int_value &= ~XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB;
    }
    if ((int_value & XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB) != 0) {
        // Clear the value XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB since it is valid
        int_value &= ~XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB;
    }
    if ((int_value & XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB) != 0) {
        // Clear the value XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB since it is valid
        int_value &= ~XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSwapchainCreateFoveationFlagsFB flags
ValidateXrFlagsResult ValidateXrSwapchainCreateFoveationFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB) != 0) {
        // Clear the value XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB since it is valid
        int_value &= ~XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB;
    }
    if ((int_value & XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB) != 0) {
        // Clear the value XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB since it is valid
        int_value &= ~XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSwapchainStateFoveationFlagsFB flags
ValidateXrFlagsResult ValidateXrSwapchainStateFoveationFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrKeyboardTrackingFlagsFB flags
ValidateXrFlagsResult ValidateXrKeyboardTrackingFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_KEYBOARD_TRACKING_EXISTS_BIT_FB) != 0) {
        // Clear the value XR_KEYBOARD_TRACKING_EXISTS_BIT_FB since it is valid
        int_value &= ~XR_KEYBOARD_TRACKING_EXISTS_BIT_FB;
    }
    if ((int_value & XR_KEYBOARD_TRACKING_LOCAL_BIT_FB) != 0) {
        // Clear the value XR_KEYBOARD_TRACKING_LOCAL_BIT_FB since it is valid
        int_value &= ~XR_KEYBOARD_TRACKING_LOCAL_BIT_FB;
    }
    if ((int_value & XR_KEYBOARD_TRACKING_REMOTE_BIT_FB) != 0) {
        // Clear the value XR_KEYBOARD_TRACKING_REMOTE_BIT_FB since it is valid
        int_value &= ~XR_KEYBOARD_TRACKING_REMOTE_BIT_FB;
    }
    if ((int_value & XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB) != 0) {
        // Clear the value XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB since it is valid
        int_value &= ~XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrKeyboardTrackingQueryFlagsFB flags
ValidateXrFlagsResult ValidateXrKeyboardTrackingQueryFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB) != 0) {
        // Clear the value XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB since it is valid
        int_value &= ~XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB;
    }
    if ((int_value & XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB) != 0) {
        // Clear the value XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB since it is valid
        int_value &= ~XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrTriangleMeshFlagsFB flags
ValidateXrFlagsResult ValidateXrTriangleMeshFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_TRIANGLE_MESH_MUTABLE_BIT_FB) != 0) {
        // Clear the value XR_TRIANGLE_MESH_MUTABLE_BIT_FB since it is valid
        int_value &= ~XR_TRIANGLE_MESH_MUTABLE_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrPassthroughCapabilityFlagsFB flags
ValidateXrFlagsResult ValidateXrPassthroughCapabilityFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_PASSTHROUGH_CAPABILITY_BIT_FB) != 0) {
        // Clear the value XR_PASSTHROUGH_CAPABILITY_BIT_FB since it is valid
        int_value &= ~XR_PASSTHROUGH_CAPABILITY_BIT_FB;
    }
    if ((int_value & XR_PASSTHROUGH_CAPABILITY_COLOR_BIT_FB) != 0) {
        // Clear the value XR_PASSTHROUGH_CAPABILITY_COLOR_BIT_FB since it is valid
        int_value &= ~XR_PASSTHROUGH_CAPABILITY_COLOR_BIT_FB;
    }
    if ((int_value & XR_PASSTHROUGH_CAPABILITY_LAYER_DEPTH_BIT_FB) != 0) {
        // Clear the value XR_PASSTHROUGH_CAPABILITY_LAYER_DEPTH_BIT_FB since it is valid
        int_value &= ~XR_PASSTHROUGH_CAPABILITY_LAYER_DEPTH_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrPassthroughFlagsFB flags
ValidateXrFlagsResult ValidateXrPassthroughFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB) != 0) {
        // Clear the value XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB since it is valid
        int_value &= ~XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB;
    }
    if ((int_value & XR_PASSTHROUGH_LAYER_DEPTH_BIT_FB) != 0) {
        // Clear the value XR_PASSTHROUGH_LAYER_DEPTH_BIT_FB since it is valid
        int_value &= ~XR_PASSTHROUGH_LAYER_DEPTH_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrPassthroughStateChangedFlagsFB flags
ValidateXrFlagsResult ValidateXrPassthroughStateChangedFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB) != 0) {
        // Clear the value XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB since it is valid
        int_value &= ~XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB;
    }
    if ((int_value & XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB) != 0) {
        // Clear the value XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB since it is valid
        int_value &= ~XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB;
    }
    if ((int_value & XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB) != 0) {
        // Clear the value XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB since it is valid
        int_value &= ~XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB;
    }
    if ((int_value & XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB) != 0) {
        // Clear the value XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB since it is valid
        int_value &= ~XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrRenderModelFlagsFB flags
ValidateXrFlagsResult ValidateXrRenderModelFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB) != 0) {
        // Clear the value XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB since it is valid
        int_value &= ~XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB;
    }
    if ((int_value & XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB) != 0) {
        // Clear the value XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB since it is valid
        int_value &= ~XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrFrameEndInfoFlagsML flags
ValidateXrFlagsResult ValidateXrFrameEndInfoFlagsML(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_FRAME_END_INFO_PROTECTED_BIT_ML) != 0) {
        // Clear the value XR_FRAME_END_INFO_PROTECTED_BIT_ML since it is valid
        int_value &= ~XR_FRAME_END_INFO_PROTECTED_BIT_ML;
    }
    if ((int_value & XR_FRAME_END_INFO_VIGNETTE_BIT_ML) != 0) {
        // Clear the value XR_FRAME_END_INFO_VIGNETTE_BIT_ML since it is valid
        int_value &= ~XR_FRAME_END_INFO_VIGNETTE_BIT_ML;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrGlobalDimmerFrameEndInfoFlagsML flags
ValidateXrFlagsResult ValidateXrGlobalDimmerFrameEndInfoFlagsML(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_GLOBAL_DIMMER_FRAME_END_INFO_ENABLED_BIT_ML) != 0) {
        // Clear the value XR_GLOBAL_DIMMER_FRAME_END_INFO_ENABLED_BIT_ML since it is valid
        int_value &= ~XR_GLOBAL_DIMMER_FRAME_END_INFO_ENABLED_BIT_ML;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrLocalizationMapErrorFlagsML flags
ValidateXrFlagsResult ValidateXrLocalizationMapErrorFlagsML(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_LOCALIZATION_MAP_ERROR_UNKNOWN_BIT_ML) != 0) {
        // Clear the value XR_LOCALIZATION_MAP_ERROR_UNKNOWN_BIT_ML since it is valid
        int_value &= ~XR_LOCALIZATION_MAP_ERROR_UNKNOWN_BIT_ML;
    }
    if ((int_value & XR_LOCALIZATION_MAP_ERROR_OUT_OF_MAPPED_AREA_BIT_ML) != 0) {
        // Clear the value XR_LOCALIZATION_MAP_ERROR_OUT_OF_MAPPED_AREA_BIT_ML since it is valid
        int_value &= ~XR_LOCALIZATION_MAP_ERROR_OUT_OF_MAPPED_AREA_BIT_ML;
    }
    if ((int_value & XR_LOCALIZATION_MAP_ERROR_LOW_FEATURE_COUNT_BIT_ML) != 0) {
        // Clear the value XR_LOCALIZATION_MAP_ERROR_LOW_FEATURE_COUNT_BIT_ML since it is valid
        int_value &= ~XR_LOCALIZATION_MAP_ERROR_LOW_FEATURE_COUNT_BIT_ML;
    }
    if ((int_value & XR_LOCALIZATION_MAP_ERROR_EXCESSIVE_MOTION_BIT_ML) != 0) {
        // Clear the value XR_LOCALIZATION_MAP_ERROR_EXCESSIVE_MOTION_BIT_ML since it is valid
        int_value &= ~XR_LOCALIZATION_MAP_ERROR_EXCESSIVE_MOTION_BIT_ML;
    }
    if ((int_value & XR_LOCALIZATION_MAP_ERROR_LOW_LIGHT_BIT_ML) != 0) {
        // Clear the value XR_LOCALIZATION_MAP_ERROR_LOW_LIGHT_BIT_ML since it is valid
        int_value &= ~XR_LOCALIZATION_MAP_ERROR_LOW_LIGHT_BIT_ML;
    }
    if ((int_value & XR_LOCALIZATION_MAP_ERROR_HEADPOSE_BIT_ML) != 0) {
        // Clear the value XR_LOCALIZATION_MAP_ERROR_HEADPOSE_BIT_ML since it is valid
        int_value &= ~XR_LOCALIZATION_MAP_ERROR_HEADPOSE_BIT_ML;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrCompositionLayerSpaceWarpInfoFlagsFB flags
ValidateXrFlagsResult ValidateXrCompositionLayerSpaceWarpInfoFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSemanticLabelsSupportFlagsFB flags
ValidateXrFlagsResult ValidateXrSemanticLabelsSupportFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SEMANTIC_LABELS_SUPPORT_MULTIPLE_SEMANTIC_LABELS_BIT_FB) != 0) {
        // Clear the value XR_SEMANTIC_LABELS_SUPPORT_MULTIPLE_SEMANTIC_LABELS_BIT_FB since it is valid
        int_value &= ~XR_SEMANTIC_LABELS_SUPPORT_MULTIPLE_SEMANTIC_LABELS_BIT_FB;
    }
    if ((int_value & XR_SEMANTIC_LABELS_SUPPORT_ACCEPT_DESK_TO_TABLE_MIGRATION_BIT_FB) != 0) {
        // Clear the value XR_SEMANTIC_LABELS_SUPPORT_ACCEPT_DESK_TO_TABLE_MIGRATION_BIT_FB since it is valid
        int_value &= ~XR_SEMANTIC_LABELS_SUPPORT_ACCEPT_DESK_TO_TABLE_MIGRATION_BIT_FB;
    }
    if ((int_value & XR_SEMANTIC_LABELS_SUPPORT_ACCEPT_INVISIBLE_WALL_FACE_BIT_FB) != 0) {
        // Clear the value XR_SEMANTIC_LABELS_SUPPORT_ACCEPT_INVISIBLE_WALL_FACE_BIT_FB since it is valid
        int_value &= ~XR_SEMANTIC_LABELS_SUPPORT_ACCEPT_INVISIBLE_WALL_FACE_BIT_FB;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrDigitalLensControlFlagsALMALENCE flags
ValidateXrFlagsResult ValidateXrDigitalLensControlFlagsALMALENCE(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE) != 0) {
        // Clear the value XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE since it is valid
        int_value &= ~XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrFoveationEyeTrackedProfileCreateFlagsMETA flags
ValidateXrFlagsResult ValidateXrFoveationEyeTrackedProfileCreateFlagsMETA(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrFoveationEyeTrackedStateFlagsMETA flags
ValidateXrFlagsResult ValidateXrFoveationEyeTrackedStateFlagsMETA(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_FOVEATION_EYE_TRACKED_STATE_VALID_BIT_META) != 0) {
        // Clear the value XR_FOVEATION_EYE_TRACKED_STATE_VALID_BIT_META since it is valid
        int_value &= ~XR_FOVEATION_EYE_TRACKED_STATE_VALID_BIT_META;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrCompositionLayerSettingsFlagsFB flags
ValidateXrFlagsResult ValidateXrCompositionLayerSettingsFlagsFB(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB;
    }
    if ((int_value & XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB;
    }
    if ((int_value & XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB;
    }
    if ((int_value & XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB;
    }
    if ((int_value & XR_COMPOSITION_LAYER_SETTINGS_AUTO_LAYER_FILTER_BIT_META) != 0) {
        // Clear the value XR_COMPOSITION_LAYER_SETTINGS_AUTO_LAYER_FILTER_BIT_META since it is valid
        int_value &= ~XR_COMPOSITION_LAYER_SETTINGS_AUTO_LAYER_FILTER_BIT_META;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrFrameSynthesisInfoFlagsEXT flags
ValidateXrFlagsResult ValidateXrFrameSynthesisInfoFlagsEXT(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_FRAME_SYNTHESIS_INFO_USE_2D_MOTION_VECTOR_BIT_EXT) != 0) {
        // Clear the value XR_FRAME_SYNTHESIS_INFO_USE_2D_MOTION_VECTOR_BIT_EXT since it is valid
        int_value &= ~XR_FRAME_SYNTHESIS_INFO_USE_2D_MOTION_VECTOR_BIT_EXT;
    }
    if ((int_value & XR_FRAME_SYNTHESIS_INFO_REQUEST_RELAXED_FRAME_INTERVAL_BIT_EXT) != 0) {
        // Clear the value XR_FRAME_SYNTHESIS_INFO_REQUEST_RELAXED_FRAME_INTERVAL_BIT_EXT since it is valid
        int_value &= ~XR_FRAME_SYNTHESIS_INFO_REQUEST_RELAXED_FRAME_INTERVAL_BIT_EXT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrPassthroughPreferenceFlagsMETA flags
ValidateXrFlagsResult ValidateXrPassthroughPreferenceFlagsMETA(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_PASSTHROUGH_PREFERENCE_DEFAULT_TO_ACTIVE_BIT_META) != 0) {
        // Clear the value XR_PASSTHROUGH_PREFERENCE_DEFAULT_TO_ACTIVE_BIT_META since it is valid
        int_value &= ~XR_PASSTHROUGH_PREFERENCE_DEFAULT_TO_ACTIVE_BIT_META;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrVirtualKeyboardInputStateFlagsMETA flags
ValidateXrFlagsResult ValidateXrVirtualKeyboardInputStateFlagsMETA(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_VIRTUAL_KEYBOARD_INPUT_STATE_PRESSED_BIT_META) != 0) {
        // Clear the value XR_VIRTUAL_KEYBOARD_INPUT_STATE_PRESSED_BIT_META since it is valid
        int_value &= ~XR_VIRTUAL_KEYBOARD_INPUT_STATE_PRESSED_BIT_META;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrExternalCameraStatusFlagsOCULUS flags
ValidateXrFlagsResult ValidateXrExternalCameraStatusFlagsOCULUS(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_EXTERNAL_CAMERA_STATUS_CONNECTED_BIT_OCULUS) != 0) {
        // Clear the value XR_EXTERNAL_CAMERA_STATUS_CONNECTED_BIT_OCULUS since it is valid
        int_value &= ~XR_EXTERNAL_CAMERA_STATUS_CONNECTED_BIT_OCULUS;
    }
    if ((int_value & XR_EXTERNAL_CAMERA_STATUS_CALIBRATING_BIT_OCULUS) != 0) {
        // Clear the value XR_EXTERNAL_CAMERA_STATUS_CALIBRATING_BIT_OCULUS since it is valid
        int_value &= ~XR_EXTERNAL_CAMERA_STATUS_CALIBRATING_BIT_OCULUS;
    }
    if ((int_value & XR_EXTERNAL_CAMERA_STATUS_CALIBRATION_FAILED_BIT_OCULUS) != 0) {
        // Clear the value XR_EXTERNAL_CAMERA_STATUS_CALIBRATION_FAILED_BIT_OCULUS since it is valid
        int_value &= ~XR_EXTERNAL_CAMERA_STATUS_CALIBRATION_FAILED_BIT_OCULUS;
    }
    if ((int_value & XR_EXTERNAL_CAMERA_STATUS_CALIBRATED_BIT_OCULUS) != 0) {
        // Clear the value XR_EXTERNAL_CAMERA_STATUS_CALIBRATED_BIT_OCULUS since it is valid
        int_value &= ~XR_EXTERNAL_CAMERA_STATUS_CALIBRATED_BIT_OCULUS;
    }
    if ((int_value & XR_EXTERNAL_CAMERA_STATUS_CAPTURING_BIT_OCULUS) != 0) {
        // Clear the value XR_EXTERNAL_CAMERA_STATUS_CAPTURING_BIT_OCULUS since it is valid
        int_value &= ~XR_EXTERNAL_CAMERA_STATUS_CAPTURING_BIT_OCULUS;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrPerformanceMetricsCounterFlagsMETA flags
ValidateXrFlagsResult ValidateXrPerformanceMetricsCounterFlagsMETA(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META) != 0) {
        // Clear the value XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META since it is valid
        int_value &= ~XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META;
    }
    if ((int_value & XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META) != 0) {
        // Clear the value XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META since it is valid
        int_value &= ~XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META;
    }
    if ((int_value & XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META) != 0) {
        // Clear the value XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META since it is valid
        int_value &= ~XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrEnvironmentDepthProviderCreateFlagsMETA flags
ValidateXrFlagsResult ValidateXrEnvironmentDepthProviderCreateFlagsMETA(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrEnvironmentDepthSwapchainCreateFlagsMETA flags
ValidateXrFlagsResult ValidateXrEnvironmentDepthSwapchainCreateFlagsMETA(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrFoveationDynamicFlagsHTC flags
ValidateXrFlagsResult ValidateXrFoveationDynamicFlagsHTC(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_BIT_HTC) != 0) {
        // Clear the value XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_BIT_HTC since it is valid
        int_value &= ~XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_BIT_HTC;
    }
    if ((int_value & XR_FOVEATION_DYNAMIC_CLEAR_FOV_ENABLED_BIT_HTC) != 0) {
        // Clear the value XR_FOVEATION_DYNAMIC_CLEAR_FOV_ENABLED_BIT_HTC since it is valid
        int_value &= ~XR_FOVEATION_DYNAMIC_CLEAR_FOV_ENABLED_BIT_HTC;
    }
    if ((int_value & XR_FOVEATION_DYNAMIC_FOCAL_CENTER_OFFSET_ENABLED_BIT_HTC) != 0) {
        // Clear the value XR_FOVEATION_DYNAMIC_FOCAL_CENTER_OFFSET_ENABLED_BIT_HTC since it is valid
        int_value &= ~XR_FOVEATION_DYNAMIC_FOCAL_CENTER_OFFSET_ENABLED_BIT_HTC;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSpatialMeshConfigFlagsBD flags
ValidateXrFlagsResult ValidateXrSpatialMeshConfigFlagsBD(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SPATIAL_MESH_CONFIG_SEMANTIC_BIT_BD) != 0) {
        // Clear the value XR_SPATIAL_MESH_CONFIG_SEMANTIC_BIT_BD since it is valid
        int_value &= ~XR_SPATIAL_MESH_CONFIG_SEMANTIC_BIT_BD;
    }
    if ((int_value & XR_SPATIAL_MESH_CONFIG_ALIGN_SEMANTIC_WITH_VERTEX_BIT_BD) != 0) {
        // Clear the value XR_SPATIAL_MESH_CONFIG_ALIGN_SEMANTIC_WITH_VERTEX_BIT_BD since it is valid
        int_value &= ~XR_SPATIAL_MESH_CONFIG_ALIGN_SEMANTIC_WITH_VERTEX_BIT_BD;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSoundObstacleFlagsBD flags
ValidateXrFlagsResult ValidateXrSoundObstacleFlagsBD(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SOUND_OBSTACLE_ENABLED_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBSTACLE_ENABLED_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBSTACLE_ENABLED_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBSTACLE_POSE_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBSTACLE_POSE_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBSTACLE_POSE_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBSTACLE_MESH_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBSTACLE_MESH_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBSTACLE_MESH_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBSTACLE_MATERIALS_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBSTACLE_MATERIALS_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBSTACLE_MATERIALS_BIT_BD;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSoundObjectFlagsBD flags
ValidateXrFlagsResult ValidateXrSoundObjectFlagsBD(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SOUND_OBJECT_ENABLED_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBJECT_ENABLED_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBJECT_ENABLED_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBJECT_POSE_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBJECT_POSE_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBJECT_POSE_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBJECT_DIRECTIVITY_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBJECT_DIRECTIVITY_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBJECT_DIRECTIVITY_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBJECT_SHAPE_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBJECT_SHAPE_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBJECT_SHAPE_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBJECT_MAIN_VOLUME_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBJECT_MAIN_VOLUME_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBJECT_MAIN_VOLUME_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBJECT_REFLECTION_GAIN_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBJECT_REFLECTION_GAIN_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBJECT_REFLECTION_GAIN_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBJECT_ENABLE_DOPPLER_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBJECT_ENABLE_DOPPLER_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBJECT_ENABLE_DOPPLER_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBJECT_DIRECT_SOUND_ATTENUATION_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBJECT_DIRECT_SOUND_ATTENUATION_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBJECT_DIRECT_SOUND_ATTENUATION_BIT_BD;
    }
    if ((int_value & XR_SOUND_OBJECT_INDIRECT_SOUND_ATTENUATION_BIT_BD) != 0) {
        // Clear the value XR_SOUND_OBJECT_INDIRECT_SOUND_ATTENUATION_BIT_BD since it is valid
        int_value &= ~XR_SOUND_OBJECT_INDIRECT_SOUND_ATTENUATION_BIT_BD;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrSoundFieldFlagsBD flags
ValidateXrFlagsResult ValidateXrSoundFieldFlagsBD(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_SOUND_FIELD_ENABLED_BIT_BD) != 0) {
        // Clear the value XR_SOUND_FIELD_ENABLED_BIT_BD since it is valid
        int_value &= ~XR_SOUND_FIELD_ENABLED_BIT_BD;
    }
    if ((int_value & XR_SOUND_FIELD_ORIENTATION_BIT_BD) != 0) {
        // Clear the value XR_SOUND_FIELD_ORIENTATION_BIT_BD since it is valid
        int_value &= ~XR_SOUND_FIELD_ORIENTATION_BIT_BD;
    }
    if ((int_value & XR_SOUND_FIELD_MAIN_VOLUME_BIT_BD) != 0) {
        // Clear the value XR_SOUND_FIELD_MAIN_VOLUME_BIT_BD since it is valid
        int_value &= ~XR_SOUND_FIELD_MAIN_VOLUME_BIT_BD;
    }
    if ((int_value & XR_SOUND_FIELD_LFE_GAIN_BIT_BD) != 0) {
        // Clear the value XR_SOUND_FIELD_LFE_GAIN_BIT_BD since it is valid
        int_value &= ~XR_SOUND_FIELD_LFE_GAIN_BIT_BD;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrPlaneDetectionCapabilityFlagsEXT flags
ValidateXrFlagsResult ValidateXrPlaneDetectionCapabilityFlagsEXT(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_PLANE_DETECTION_CAPABILITY_PLANE_DETECTION_BIT_EXT) != 0) {
        // Clear the value XR_PLANE_DETECTION_CAPABILITY_PLANE_DETECTION_BIT_EXT since it is valid
        int_value &= ~XR_PLANE_DETECTION_CAPABILITY_PLANE_DETECTION_BIT_EXT;
    }
    if ((int_value & XR_PLANE_DETECTION_CAPABILITY_PLANE_HOLES_BIT_EXT) != 0) {
        // Clear the value XR_PLANE_DETECTION_CAPABILITY_PLANE_HOLES_BIT_EXT since it is valid
        int_value &= ~XR_PLANE_DETECTION_CAPABILITY_PLANE_HOLES_BIT_EXT;
    }
    if ((int_value & XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_CEILING_BIT_EXT) != 0) {
        // Clear the value XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_CEILING_BIT_EXT since it is valid
        int_value &= ~XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_CEILING_BIT_EXT;
    }
    if ((int_value & XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_FLOOR_BIT_EXT) != 0) {
        // Clear the value XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_FLOOR_BIT_EXT since it is valid
        int_value &= ~XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_FLOOR_BIT_EXT;
    }
    if ((int_value & XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_WALL_BIT_EXT) != 0) {
        // Clear the value XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_WALL_BIT_EXT since it is valid
        int_value &= ~XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_WALL_BIT_EXT;
    }
    if ((int_value & XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_PLATFORM_BIT_EXT) != 0) {
        // Clear the value XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_PLATFORM_BIT_EXT since it is valid
        int_value &= ~XR_PLANE_DETECTION_CAPABILITY_SEMANTIC_PLATFORM_BIT_EXT;
    }
    if ((int_value & XR_PLANE_DETECTION_CAPABILITY_ORIENTATION_BIT_EXT) != 0) {
        // Clear the value XR_PLANE_DETECTION_CAPABILITY_ORIENTATION_BIT_EXT since it is valid
        int_value &= ~XR_PLANE_DETECTION_CAPABILITY_ORIENTATION_BIT_EXT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrPlaneDetectorFlagsEXT flags
ValidateXrFlagsResult ValidateXrPlaneDetectorFlagsEXT(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_PLANE_DETECTOR_ENABLE_CONTOUR_BIT_EXT) != 0) {
        // Clear the value XR_PLANE_DETECTOR_ENABLE_CONTOUR_BIT_EXT since it is valid
        int_value &= ~XR_PLANE_DETECTOR_ENABLE_CONTOUR_BIT_EXT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrPerformanceMetricsCounterFlagsANDROID flags
ValidateXrFlagsResult ValidateXrPerformanceMetricsCounterFlagsANDROID(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_ANDROID) != 0) {
        // Clear the value XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_ANDROID since it is valid
        int_value &= ~XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_ANDROID;
    }
    if ((int_value & XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROID) != 0) {
        // Clear the value XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROID since it is valid
        int_value &= ~XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_ANDROID;
    }
    if ((int_value & XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_ANDROID) != 0) {
        // Clear the value XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_ANDROID since it is valid
        int_value &= ~XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_ANDROID;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrWorldMeshDetectorFlagsML flags
ValidateXrFlagsResult ValidateXrWorldMeshDetectorFlagsML(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_WORLD_MESH_DETECTOR_POINT_CLOUD_BIT_ML) != 0) {
        // Clear the value XR_WORLD_MESH_DETECTOR_POINT_CLOUD_BIT_ML since it is valid
        int_value &= ~XR_WORLD_MESH_DETECTOR_POINT_CLOUD_BIT_ML;
    }
    if ((int_value & XR_WORLD_MESH_DETECTOR_COMPUTE_NORMALS_BIT_ML) != 0) {
        // Clear the value XR_WORLD_MESH_DETECTOR_COMPUTE_NORMALS_BIT_ML since it is valid
        int_value &= ~XR_WORLD_MESH_DETECTOR_COMPUTE_NORMALS_BIT_ML;
    }
    if ((int_value & XR_WORLD_MESH_DETECTOR_COMPUTE_CONFIDENCE_BIT_ML) != 0) {
        // Clear the value XR_WORLD_MESH_DETECTOR_COMPUTE_CONFIDENCE_BIT_ML since it is valid
        int_value &= ~XR_WORLD_MESH_DETECTOR_COMPUTE_CONFIDENCE_BIT_ML;
    }
    if ((int_value & XR_WORLD_MESH_DETECTOR_PLANARIZE_BIT_ML) != 0) {
        // Clear the value XR_WORLD_MESH_DETECTOR_PLANARIZE_BIT_ML since it is valid
        int_value &= ~XR_WORLD_MESH_DETECTOR_PLANARIZE_BIT_ML;
    }
    if ((int_value & XR_WORLD_MESH_DETECTOR_REMOVE_MESH_SKIRT_BIT_ML) != 0) {
        // Clear the value XR_WORLD_MESH_DETECTOR_REMOVE_MESH_SKIRT_BIT_ML since it is valid
        int_value &= ~XR_WORLD_MESH_DETECTOR_REMOVE_MESH_SKIRT_BIT_ML;
    }
    if ((int_value & XR_WORLD_MESH_DETECTOR_INDEX_ORDER_CW_BIT_ML) != 0) {
        // Clear the value XR_WORLD_MESH_DETECTOR_INDEX_ORDER_CW_BIT_ML since it is valid
        int_value &= ~XR_WORLD_MESH_DETECTOR_INDEX_ORDER_CW_BIT_ML;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrFacialExpressionBlendShapePropertiesFlagsML flags
ValidateXrFlagsResult ValidateXrFacialExpressionBlendShapePropertiesFlagsML(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_VALID_BIT_ML) != 0) {
        // Clear the value XR_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_VALID_BIT_ML since it is valid
        int_value &= ~XR_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_VALID_BIT_ML;
    }
    if ((int_value & XR_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_TRACKED_BIT_ML) != 0) {
        // Clear the value XR_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_TRACKED_BIT_ML since it is valid
        int_value &= ~XR_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_TRACKED_BIT_ML;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrBatteryStateDisplayStateFlagsEXT flags
ValidateXrFlagsResult ValidateXrBatteryStateDisplayStateFlagsEXT(const XrFlags64 value) {
    if (0 == value) {
        return VALIDATE_XR_FLAGS_ZERO;
    }
    XrFlags64 int_value = value;
    if ((int_value & XR_BATTERY_STATE_DISPLAY_STATE_VALID_BIT_EXT) != 0) {
        // Clear the value XR_BATTERY_STATE_DISPLAY_STATE_VALID_BIT_EXT since it is valid
        int_value &= ~XR_BATTERY_STATE_DISPLAY_STATE_VALID_BIT_EXT;
    }
    if ((int_value & XR_BATTERY_STATE_DISPLAY_STATE_CHARGING_BIT_EXT) != 0) {
        // Clear the value XR_BATTERY_STATE_DISPLAY_STATE_CHARGING_BIT_EXT since it is valid
        int_value &= ~XR_BATTERY_STATE_DISPLAY_STATE_CHARGING_BIT_EXT;
    }
    if ((int_value & XR_BATTERY_STATE_DISPLAY_STATE_PLUGGED_IN_BIT_EXT) != 0) {
        // Clear the value XR_BATTERY_STATE_DISPLAY_STATE_PLUGGED_IN_BIT_EXT since it is valid
        int_value &= ~XR_BATTERY_STATE_DISPLAY_STATE_PLUGGED_IN_BIT_EXT;
    }
    if ((int_value & XR_BATTERY_STATE_DISPLAY_STATE_NO_BATTERY_BIT_EXT) != 0) {
        // Clear the value XR_BATTERY_STATE_DISPLAY_STATE_NO_BATTERY_BIT_EXT since it is valid
        int_value &= ~XR_BATTERY_STATE_DISPLAY_STATE_NO_BATTERY_BIT_EXT;
    }
    if (int_value != 0) {
        // Something is left, it must be invalid
        return VALIDATE_XR_FLAGS_INVALID;
    }
    return VALIDATE_XR_FLAGS_SUCCESS;
}

// Function to validate XrResult enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrResult value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_SUCCESS:
            return true;
        case XR_TIMEOUT_EXPIRED:
            return true;
        case XR_SESSION_LOSS_PENDING:
            return true;
        case XR_EVENT_UNAVAILABLE:
            return true;
        case XR_SPACE_BOUNDS_UNAVAILABLE:
            return true;
        case XR_SESSION_NOT_FOCUSED:
            return true;
        case XR_FRAME_DISCARDED:
            return true;
        case XR_ERROR_VALIDATION_FAILURE:
            return true;
        case XR_ERROR_RUNTIME_FAILURE:
            return true;
        case XR_ERROR_OUT_OF_MEMORY:
            return true;
        case XR_ERROR_API_VERSION_UNSUPPORTED:
            return true;
        case XR_ERROR_INITIALIZATION_FAILED:
            return true;
        case XR_ERROR_FUNCTION_UNSUPPORTED:
            return true;
        case XR_ERROR_FEATURE_UNSUPPORTED:
            return true;
        case XR_ERROR_EXTENSION_NOT_PRESENT:
            return true;
        case XR_ERROR_LIMIT_REACHED:
            return true;
        case XR_ERROR_SIZE_INSUFFICIENT:
            return true;
        case XR_ERROR_HANDLE_INVALID:
            return true;
        case XR_ERROR_INSTANCE_LOST:
            return true;
        case XR_ERROR_SESSION_RUNNING:
            return true;
        case XR_ERROR_SESSION_NOT_RUNNING:
            return true;
        case XR_ERROR_SESSION_LOST:
            return true;
        case XR_ERROR_SYSTEM_INVALID:
            return true;
        case XR_ERROR_PATH_INVALID:
            return true;
        case XR_ERROR_PATH_COUNT_EXCEEDED:
            return true;
        case XR_ERROR_PATH_FORMAT_INVALID:
            return true;
        case XR_ERROR_PATH_UNSUPPORTED:
            return true;
        case XR_ERROR_LAYER_INVALID:
            return true;
        case XR_ERROR_LAYER_LIMIT_EXCEEDED:
            return true;
        case XR_ERROR_SWAPCHAIN_RECT_INVALID:
            return true;
        case XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED:
            return true;
        case XR_ERROR_ACTION_TYPE_MISMATCH:
            return true;
        case XR_ERROR_SESSION_NOT_READY:
            return true;
        case XR_ERROR_SESSION_NOT_STOPPING:
            return true;
        case XR_ERROR_TIME_INVALID:
            return true;
        case XR_ERROR_REFERENCE_SPACE_UNSUPPORTED:
            return true;
        case XR_ERROR_FILE_ACCESS_ERROR:
            return true;
        case XR_ERROR_FILE_CONTENTS_INVALID:
            return true;
        case XR_ERROR_FORM_FACTOR_UNSUPPORTED:
            return true;
        case XR_ERROR_FORM_FACTOR_UNAVAILABLE:
            return true;
        case XR_ERROR_API_LAYER_NOT_PRESENT:
            return true;
        case XR_ERROR_CALL_ORDER_INVALID:
            return true;
        case XR_ERROR_GRAPHICS_DEVICE_INVALID:
            return true;
        case XR_ERROR_POSE_INVALID:
            return true;
        case XR_ERROR_INDEX_OUT_OF_RANGE:
            return true;
        case XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED:
            return true;
        case XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED:
            return true;
        case XR_ERROR_NAME_DUPLICATED:
            return true;
        case XR_ERROR_NAME_INVALID:
            return true;
        case XR_ERROR_ACTIONSET_NOT_ATTACHED:
            return true;
        case XR_ERROR_ACTIONSETS_ALREADY_ATTACHED:
            return true;
        case XR_ERROR_LOCALIZED_NAME_DUPLICATED:
            return true;
        case XR_ERROR_LOCALIZED_NAME_INVALID:
            return true;
        case XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING:
            return true;
        case XR_ERROR_RUNTIME_UNAVAILABLE:
            return true;
        case XR_ERROR_EXTENSION_DEPENDENCY_NOT_ENABLED:
            return true;
        case XR_ERROR_PERMISSION_INSUFFICIENT:
            return true;
        case XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR:
            // Enum value XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR requires extension XR_KHR_android_thread_settings, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_android_thread_settings")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_android_thread_settings\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR:
            // Enum value XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR requires extension XR_KHR_android_thread_settings, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_android_thread_settings")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_android_thread_settings\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT:
            // Enum value XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT requires extension XR_MSFT_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT:
            // Enum value XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT requires extension XR_MSFT_secondary_view_configuration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_secondary_view_configuration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_secondary_view_configuration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT:
            // Enum value XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT requires extension XR_MSFT_controller_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_controller_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_controller_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT:
            // Enum value XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT requires extension XR_MSFT_composition_layer_reprojection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_composition_layer_reprojection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_composition_layer_reprojection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT:
            // Enum value XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT:
            // Enum value XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT:
            // Enum value XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT:
            // Enum value XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT:
            // Enum value XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT:
            // Enum value XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB:
            // Enum value XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB requires extension XR_FB_display_refresh_rate, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_display_refresh_rate")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_display_refresh_rate\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB:
            // Enum value XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB requires extension XR_FB_color_space, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_color_space")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_color_space\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB:
            // Enum value XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB:
            // Enum value XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB:
            // Enum value XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB:
            // Enum value XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB:
            // Enum value XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB:
            // Enum value XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB:
            // Enum value XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB:
            // Enum value XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB:
            // Enum value XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_UNKNOWN_PASSTHROUGH_FB:
            // Enum value XR_ERROR_UNKNOWN_PASSTHROUGH_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_UNKNOWN_PASSTHROUGH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_RENDER_MODEL_KEY_INVALID_FB:
            // Enum value XR_ERROR_RENDER_MODEL_KEY_INVALID_FB requires extension XR_FB_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_RENDER_MODEL_KEY_INVALID_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_RENDER_MODEL_UNAVAILABLE_FB:
            // Enum value XR_RENDER_MODEL_UNAVAILABLE_FB requires extension XR_FB_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_RENDER_MODEL_UNAVAILABLE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_MARKER_NOT_TRACKED_VARJO:
            // Enum value XR_ERROR_MARKER_NOT_TRACKED_VARJO requires extension XR_VARJO_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_MARKER_NOT_TRACKED_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_MARKER_ID_INVALID_VARJO:
            // Enum value XR_ERROR_MARKER_ID_INVALID_VARJO requires extension XR_VARJO_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_MARKER_ID_INVALID_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_MARKER_DETECTOR_PERMISSION_DENIED_ML:
            // Enum value XR_ERROR_MARKER_DETECTOR_PERMISSION_DENIED_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_MARKER_DETECTOR_PERMISSION_DENIED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_MARKER_DETECTOR_LOCATE_FAILED_ML:
            // Enum value XR_ERROR_MARKER_DETECTOR_LOCATE_FAILED_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_MARKER_DETECTOR_LOCATE_FAILED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_MARKER_DETECTOR_INVALID_DATA_QUERY_ML:
            // Enum value XR_ERROR_MARKER_DETECTOR_INVALID_DATA_QUERY_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_MARKER_DETECTOR_INVALID_DATA_QUERY_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_MARKER_DETECTOR_INVALID_CREATE_INFO_ML:
            // Enum value XR_ERROR_MARKER_DETECTOR_INVALID_CREATE_INFO_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_MARKER_DETECTOR_INVALID_CREATE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_MARKER_INVALID_ML:
            // Enum value XR_ERROR_MARKER_INVALID_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_MARKER_INVALID_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_LOCALIZATION_MAP_INCOMPATIBLE_ML:
            // Enum value XR_ERROR_LOCALIZATION_MAP_INCOMPATIBLE_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_LOCALIZATION_MAP_INCOMPATIBLE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_LOCALIZATION_MAP_UNAVAILABLE_ML:
            // Enum value XR_ERROR_LOCALIZATION_MAP_UNAVAILABLE_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_LOCALIZATION_MAP_UNAVAILABLE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_LOCALIZATION_MAP_FAIL_ML:
            // Enum value XR_ERROR_LOCALIZATION_MAP_FAIL_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_LOCALIZATION_MAP_FAIL_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_LOCALIZATION_MAP_IMPORT_EXPORT_PERMISSION_DENIED_ML:
            // Enum value XR_ERROR_LOCALIZATION_MAP_IMPORT_EXPORT_PERMISSION_DENIED_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_LOCALIZATION_MAP_IMPORT_EXPORT_PERMISSION_DENIED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_LOCALIZATION_MAP_PERMISSION_DENIED_ML:
            // Enum value XR_ERROR_LOCALIZATION_MAP_PERMISSION_DENIED_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_LOCALIZATION_MAP_PERMISSION_DENIED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_LOCALIZATION_MAP_ALREADY_EXISTS_ML:
            // Enum value XR_ERROR_LOCALIZATION_MAP_ALREADY_EXISTS_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_LOCALIZATION_MAP_ALREADY_EXISTS_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_LOCALIZATION_MAP_CANNOT_EXPORT_CLOUD_MAP_ML:
            // Enum value XR_ERROR_LOCALIZATION_MAP_CANNOT_EXPORT_CLOUD_MAP_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_LOCALIZATION_MAP_CANNOT_EXPORT_CLOUD_MAP_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHORS_PERMISSION_DENIED_ML:
            // Enum value XR_ERROR_SPATIAL_ANCHORS_PERMISSION_DENIED_ML requires extension XR_ML_spatial_anchors, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHORS_PERMISSION_DENIED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHORS_NOT_LOCALIZED_ML:
            // Enum value XR_ERROR_SPATIAL_ANCHORS_NOT_LOCALIZED_ML requires extension XR_ML_spatial_anchors, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHORS_NOT_LOCALIZED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHORS_OUT_OF_MAP_BOUNDS_ML:
            // Enum value XR_ERROR_SPATIAL_ANCHORS_OUT_OF_MAP_BOUNDS_ML requires extension XR_ML_spatial_anchors, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHORS_OUT_OF_MAP_BOUNDS_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHORS_SPACE_NOT_LOCATABLE_ML:
            // Enum value XR_ERROR_SPATIAL_ANCHORS_SPACE_NOT_LOCATABLE_ML requires extension XR_ML_spatial_anchors, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHORS_SPACE_NOT_LOCATABLE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHORS_ANCHOR_NOT_FOUND_ML:
            // Enum value XR_ERROR_SPATIAL_ANCHORS_ANCHOR_NOT_FOUND_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHORS_ANCHOR_NOT_FOUND_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT requires extension XR_MSFT_spatial_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT requires extension XR_MSFT_spatial_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SCENE_MARKER_DATA_NOT_STRING_MSFT:
            // Enum value XR_SCENE_MARKER_DATA_NOT_STRING_MSFT requires extension XR_MSFT_scene_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_SCENE_MARKER_DATA_NOT_STRING_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_MAPPING_INSUFFICIENT_FB:
            // Enum value XR_ERROR_SPACE_MAPPING_INSUFFICIENT_FB requires extension XR_FB_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_MAPPING_INSUFFICIENT_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_LOCALIZATION_FAILED_FB:
            // Enum value XR_ERROR_SPACE_LOCALIZATION_FAILED_FB requires extension XR_FB_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_LOCALIZATION_FAILED_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_NETWORK_TIMEOUT_FB:
            // Enum value XR_ERROR_SPACE_NETWORK_TIMEOUT_FB requires extension XR_FB_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_NETWORK_TIMEOUT_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_NETWORK_REQUEST_FAILED_FB:
            // Enum value XR_ERROR_SPACE_NETWORK_REQUEST_FAILED_FB requires extension XR_FB_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_NETWORK_REQUEST_FAILED_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_CLOUD_STORAGE_DISABLED_FB:
            // Enum value XR_ERROR_SPACE_CLOUD_STORAGE_DISABLED_FB requires extension XR_FB_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_CLOUD_STORAGE_DISABLED_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_INSUFFICIENT_RESOURCES_META:
            // Enum value XR_ERROR_SPACE_INSUFFICIENT_RESOURCES_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_INSUFFICIENT_RESOURCES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_STORAGE_AT_CAPACITY_META:
            // Enum value XR_ERROR_SPACE_STORAGE_AT_CAPACITY_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_STORAGE_AT_CAPACITY_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_INSUFFICIENT_VIEW_META:
            // Enum value XR_ERROR_SPACE_INSUFFICIENT_VIEW_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_INSUFFICIENT_VIEW_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_PERMISSION_INSUFFICIENT_META:
            // Enum value XR_ERROR_SPACE_PERMISSION_INSUFFICIENT_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_PERMISSION_INSUFFICIENT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_RATE_LIMITED_META:
            // Enum value XR_ERROR_SPACE_RATE_LIMITED_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_RATE_LIMITED_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_TOO_DARK_META:
            // Enum value XR_ERROR_SPACE_TOO_DARK_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_TOO_DARK_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_TOO_BRIGHT_META:
            // Enum value XR_ERROR_SPACE_TOO_BRIGHT_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_TOO_BRIGHT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_PASSTHROUGH_COLOR_LUT_BUFFER_SIZE_MISMATCH_META:
            // Enum value XR_ERROR_PASSTHROUGH_COLOR_LUT_BUFFER_SIZE_MISMATCH_META requires extension XR_META_passthrough_color_lut, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_color_lut")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_PASSTHROUGH_COLOR_LUT_BUFFER_SIZE_MISMATCH_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_passthrough_color_lut\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ENVIRONMENT_DEPTH_NOT_AVAILABLE_META:
            // Enum value XR_ENVIRONMENT_DEPTH_NOT_AVAILABLE_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ENVIRONMENT_DEPTH_NOT_AVAILABLE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_RENDER_MODEL_ID_INVALID_EXT:
            // Enum value XR_ERROR_RENDER_MODEL_ID_INVALID_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_RENDER_MODEL_ID_INVALID_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_RENDER_MODEL_ASSET_UNAVAILABLE_EXT:
            // Enum value XR_ERROR_RENDER_MODEL_ASSET_UNAVAILABLE_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_RENDER_MODEL_ASSET_UNAVAILABLE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_RENDER_MODEL_GLTF_EXTENSION_REQUIRED_EXT:
            // Enum value XR_ERROR_RENDER_MODEL_GLTF_EXTENSION_REQUIRED_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_RENDER_MODEL_GLTF_EXTENSION_REQUIRED_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_NOT_INTERACTION_RENDER_MODEL_EXT:
            // Enum value XR_ERROR_NOT_INTERACTION_RENDER_MODEL_EXT requires extension XR_EXT_interaction_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_interaction_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_NOT_INTERACTION_RENDER_MODEL_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_interaction_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_HINT_ALREADY_SET_QCOM:
            // Enum value XR_ERROR_HINT_ALREADY_SET_QCOM requires extension XR_QCOM_tracking_optimization_settings, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_QCOM_tracking_optimization_settings")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_HINT_ALREADY_SET_QCOM\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_QCOM_tracking_optimization_settings\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_NOT_AN_ANCHOR_HTC:
            // Enum value XR_ERROR_NOT_AN_ANCHOR_HTC requires extension XR_HTC_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_NOT_AN_ANCHOR_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ENTITY_ID_INVALID_BD:
            // Enum value XR_ERROR_SPATIAL_ENTITY_ID_INVALID_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ENTITY_ID_INVALID_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_SENSING_SERVICE_UNAVAILABLE_BD:
            // Enum value XR_ERROR_SPATIAL_SENSING_SERVICE_UNAVAILABLE_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_SENSING_SERVICE_UNAVAILABLE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_ANCHOR_NOT_SUPPORTED_FOR_ENTITY_BD:
            // Enum value XR_ERROR_ANCHOR_NOT_SUPPORTED_FOR_ENTITY_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_ANCHOR_NOT_SUPPORTED_FOR_ENTITY_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_NOT_FOUND_BD:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_NOT_FOUND_BD requires extension XR_BD_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_NOT_FOUND_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_SHARING_NETWORK_TIMEOUT_BD:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_SHARING_NETWORK_TIMEOUT_BD requires extension XR_BD_spatial_anchor_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_SHARING_NETWORK_TIMEOUT_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_SHARING_AUTHENTICATION_FAILURE_BD:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_SHARING_AUTHENTICATION_FAILURE_BD requires extension XR_BD_spatial_anchor_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_SHARING_AUTHENTICATION_FAILURE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_SHARING_NETWORK_FAILURE_BD:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_SHARING_NETWORK_FAILURE_BD requires extension XR_BD_spatial_anchor_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_SHARING_NETWORK_FAILURE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_SHARING_LOCALIZATION_FAIL_BD:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_SHARING_LOCALIZATION_FAIL_BD requires extension XR_BD_spatial_anchor_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_SHARING_LOCALIZATION_FAIL_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_SHARING_MAP_INSUFFICIENT_BD:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_SHARING_MAP_INSUFFICIENT_BD requires extension XR_BD_spatial_anchor_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_SHARING_MAP_INSUFFICIENT_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SCENE_CAPTURE_FAILURE_BD:
            // Enum value XR_ERROR_SCENE_CAPTURE_FAILURE_BD requires extension XR_BD_spatial_scene, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_scene")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SCENE_CAPTURE_FAILURE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_scene\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_NOT_LOCATABLE_EXT:
            // Enum value XR_ERROR_SPACE_NOT_LOCATABLE_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_NOT_LOCATABLE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_PLANE_DETECTION_PERMISSION_DENIED_EXT:
            // Enum value XR_ERROR_PLANE_DETECTION_PERMISSION_DENIED_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_PLANE_DETECTION_PERMISSION_DENIED_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID:
            // Enum value XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID requires extension XR_ANDROID_trackables, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID:
            // Enum value XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID requires extension XR_ANDROID_trackables, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID:
            // Enum value XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROID:
            // Enum value XR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROID requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID:
            // Enum value XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID:
            // Enum value XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SERVICE_NOT_READY_ANDROID:
            // Enum value XR_ERROR_SERVICE_NOT_READY_ANDROID requires extension XR_ANDROID_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SERVICE_NOT_READY_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID:
            // Enum value XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID requires extension XR_ANDROID_composition_layer_passthrough_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_composition_layer_passthrough_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_composition_layer_passthrough_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_FUTURE_PENDING_EXT:
            // Enum value XR_ERROR_FUTURE_PENDING_EXT requires extension XR_EXT_future, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_future")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_FUTURE_PENDING_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_future\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_FUTURE_INVALID_EXT:
            // Enum value XR_ERROR_FUTURE_INVALID_EXT requires extension XR_EXT_future, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_future")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_FUTURE_INVALID_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_future\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SYSTEM_NOTIFICATION_PERMISSION_DENIED_ML:
            // Enum value XR_ERROR_SYSTEM_NOTIFICATION_PERMISSION_DENIED_ML requires extension XR_ML_system_notifications, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_system_notifications")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SYSTEM_NOTIFICATION_PERMISSION_DENIED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_system_notifications\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SYSTEM_NOTIFICATION_INCOMPATIBLE_SKU_ML:
            // Enum value XR_ERROR_SYSTEM_NOTIFICATION_INCOMPATIBLE_SKU_ML requires extension XR_ML_system_notifications, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_system_notifications")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SYSTEM_NOTIFICATION_INCOMPATIBLE_SKU_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_system_notifications\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_WORLD_MESH_DETECTOR_PERMISSION_DENIED_ML:
            // Enum value XR_ERROR_WORLD_MESH_DETECTOR_PERMISSION_DENIED_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_WORLD_MESH_DETECTOR_PERMISSION_DENIED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_WORLD_MESH_DETECTOR_SPACE_NOT_LOCATABLE_ML:
            // Enum value XR_ERROR_WORLD_MESH_DETECTOR_SPACE_NOT_LOCATABLE_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_WORLD_MESH_DETECTOR_SPACE_NOT_LOCATABLE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_FACIAL_EXPRESSION_PERMISSION_DENIED_ML:
            // Enum value XR_ERROR_FACIAL_EXPRESSION_PERMISSION_DENIED_ML requires extension XR_ML_facial_expression, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_facial_expression")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_FACIAL_EXPRESSION_PERMISSION_DENIED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_facial_expression\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_BOUNDARY_VISIBILITY_SUPPRESSION_NOT_ALLOWED_META:
            // Enum value XR_BOUNDARY_VISIBILITY_SUPPRESSION_NOT_ALLOWED_META requires extension XR_META_boundary_visibility, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_boundary_visibility")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_BOUNDARY_VISIBILITY_SUPPRESSION_NOT_ALLOWED_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_boundary_visibility\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_COLOCATION_DISCOVERY_NETWORK_FAILED_META:
            // Enum value XR_ERROR_COLOCATION_DISCOVERY_NETWORK_FAILED_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_COLOCATION_DISCOVERY_NETWORK_FAILED_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_COLOCATION_DISCOVERY_NO_DISCOVERY_METHOD_META:
            // Enum value XR_ERROR_COLOCATION_DISCOVERY_NO_DISCOVERY_METHOD_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_COLOCATION_DISCOVERY_NO_DISCOVERY_METHOD_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_COLOCATION_DISCOVERY_ALREADY_ADVERTISING_META:
            // Enum value XR_COLOCATION_DISCOVERY_ALREADY_ADVERTISING_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_COLOCATION_DISCOVERY_ALREADY_ADVERTISING_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_COLOCATION_DISCOVERY_ALREADY_DISCOVERING_META:
            // Enum value XR_COLOCATION_DISCOVERY_ALREADY_DISCOVERING_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_COLOCATION_DISCOVERY_ALREADY_DISCOVERING_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPACE_GROUP_NOT_FOUND_META:
            // Enum value XR_ERROR_SPACE_GROUP_NOT_FOUND_META requires extension XR_META_spatial_entity_group_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_group_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPACE_GROUP_NOT_FOUND_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_group_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_ANCHOR_NOT_OWNED_BY_CALLER_ANDROID:
            // Enum value XR_ERROR_ANCHOR_NOT_OWNED_BY_CALLER_ANDROID requires extension XR_ANDROID_anchor_sharing_export, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_anchor_sharing_export")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_ANCHOR_NOT_OWNED_BY_CALLER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_anchor_sharing_export\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_IMAGE_FORMAT_UNSUPPORTED_ANDROID:
            // Enum value XR_ERROR_IMAGE_FORMAT_UNSUPPORTED_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_IMAGE_FORMAT_UNSUPPORTED_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT:
            // Enum value XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT:
            // Enum value XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT:
            // Enum value XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT:
            // Enum value XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT:
            // Enum value XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT:
            // Enum value XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_PERSISTENCE_SCOPE_UNSUPPORTED_EXT:
            // Enum value XR_ERROR_SPATIAL_PERSISTENCE_SCOPE_UNSUPPORTED_EXT requires extension XR_EXT_spatial_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_PERSISTENCE_SCOPE_UNSUPPORTED_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_PERSISTENCE_SCOPE_INCOMPATIBLE_EXT:
            // Enum value XR_ERROR_SPATIAL_PERSISTENCE_SCOPE_INCOMPATIBLE_EXT requires extension XR_EXT_spatial_persistence_operations, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_PERSISTENCE_SCOPE_INCOMPATIBLE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_ATTACHABLE_COMPONENT_NOT_FOUND_ANDROID:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_ATTACHABLE_COMPONENT_NOT_FOUND_ANDROID requires extension XR_ANDROID_spatial_entity_bound_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_entity_bound_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_ATTACHABLE_COMPONENT_NOT_FOUND_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_entity_bound_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROID:
            // Enum value XR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROID requires extension XR_ANDROID_spatial_anchor_space, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_anchor_space")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrResult value \"XR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_anchor_space\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrStructureType enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrStructureType value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_TYPE_UNKNOWN:
            return false; // Invalid XrStructureType 
        case XR_TYPE_API_LAYER_PROPERTIES:
            return true;
        case XR_TYPE_EXTENSION_PROPERTIES:
            return true;
        case XR_TYPE_INSTANCE_CREATE_INFO:
            return true;
        case XR_TYPE_SYSTEM_GET_INFO:
            return true;
        case XR_TYPE_SYSTEM_PROPERTIES:
            return true;
        case XR_TYPE_VIEW_LOCATE_INFO:
            return true;
        case XR_TYPE_VIEW:
            return true;
        case XR_TYPE_SESSION_CREATE_INFO:
            return true;
        case XR_TYPE_SWAPCHAIN_CREATE_INFO:
            return true;
        case XR_TYPE_SESSION_BEGIN_INFO:
            return true;
        case XR_TYPE_VIEW_STATE:
            return true;
        case XR_TYPE_FRAME_END_INFO:
            return true;
        case XR_TYPE_HAPTIC_VIBRATION:
            return true;
        case XR_TYPE_EVENT_DATA_BUFFER:
            return true;
        case XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING:
            return true;
        case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED:
            return true;
        case XR_TYPE_ACTION_STATE_BOOLEAN:
            return true;
        case XR_TYPE_ACTION_STATE_FLOAT:
            return true;
        case XR_TYPE_ACTION_STATE_VECTOR2F:
            return true;
        case XR_TYPE_ACTION_STATE_POSE:
            return true;
        case XR_TYPE_ACTION_SET_CREATE_INFO:
            return true;
        case XR_TYPE_ACTION_CREATE_INFO:
            return true;
        case XR_TYPE_INSTANCE_PROPERTIES:
            return true;
        case XR_TYPE_FRAME_WAIT_INFO:
            return true;
        case XR_TYPE_COMPOSITION_LAYER_PROJECTION:
            return true;
        case XR_TYPE_COMPOSITION_LAYER_QUAD:
            return true;
        case XR_TYPE_REFERENCE_SPACE_CREATE_INFO:
            return true;
        case XR_TYPE_ACTION_SPACE_CREATE_INFO:
            return true;
        case XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING:
            return true;
        case XR_TYPE_VIEW_CONFIGURATION_VIEW:
            return true;
        case XR_TYPE_SPACE_LOCATION:
            return true;
        case XR_TYPE_SPACE_VELOCITY:
            return true;
        case XR_TYPE_FRAME_STATE:
            return true;
        case XR_TYPE_VIEW_CONFIGURATION_PROPERTIES:
            return true;
        case XR_TYPE_FRAME_BEGIN_INFO:
            return true;
        case XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW:
            return true;
        case XR_TYPE_EVENT_DATA_EVENTS_LOST:
            return true;
        case XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING:
            return true;
        case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED:
            return true;
        case XR_TYPE_INTERACTION_PROFILE_STATE:
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO:
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO:
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO:
            return true;
        case XR_TYPE_ACTION_STATE_GET_INFO:
            return true;
        case XR_TYPE_HAPTIC_ACTION_INFO:
            return true;
        case XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO:
            return true;
        case XR_TYPE_ACTIONS_SYNC_INFO:
            return true;
        case XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO:
            return true;
        case XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO:
            return true;
        case XR_TYPE_SPACES_LOCATE_INFO:
            return true;
        case XR_TYPE_SPACE_LOCATIONS:
            return true;
        case XR_TYPE_SPACE_VELOCITIES:
            return true;
        case XR_TYPE_COMPOSITION_LAYER_CUBE_KHR:
            // Enum value XR_TYPE_COMPOSITION_LAYER_CUBE_KHR requires extension XR_KHR_composition_layer_cube, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_cube")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_CUBE_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_composition_layer_cube\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR:
            // Enum value XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR requires extension XR_KHR_android_create_instance, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_android_create_instance")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_android_create_instance\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR:
            // Enum value XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR requires extension XR_KHR_composition_layer_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_composition_layer_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR:
            // Enum value XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR requires extension XR_KHR_vulkan_swapchain_format_list, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_vulkan_swapchain_format_list")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_vulkan_swapchain_format_list\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT:
            // Enum value XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT requires extension XR_EXT_performance_settings, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_performance_settings")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_performance_settings\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR:
            // Enum value XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR requires extension XR_KHR_composition_layer_cylinder, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_cylinder")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_composition_layer_cylinder\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR:
            // Enum value XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR requires extension XR_KHR_composition_layer_equirect, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_equirect")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_composition_layer_equirect\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT:
            // Enum value XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT requires extension XR_EXT_debug_utils, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_debug_utils")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_debug_utils\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT:
            // Enum value XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT requires extension XR_EXT_debug_utils, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_debug_utils")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_debug_utils\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
            // Enum value XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT requires extension XR_EXT_debug_utils, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_debug_utils")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_debug_utils\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_DEBUG_UTILS_LABEL_EXT:
            // Enum value XR_TYPE_DEBUG_UTILS_LABEL_EXT requires extension XR_EXT_debug_utils, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_debug_utils")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_DEBUG_UTILS_LABEL_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_debug_utils\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR:
            // Enum value XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR requires extension XR_KHR_opengl_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_opengl_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR:
            // Enum value XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR requires extension XR_KHR_opengl_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_opengl_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR:
            // Enum value XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR requires extension XR_KHR_opengl_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_opengl_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR:
            // Enum value XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR requires extension XR_KHR_opengl_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_opengl_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR:
            // Enum value XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR requires extension XR_KHR_opengl_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_opengl_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR:
            // Enum value XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR requires extension XR_KHR_opengl_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_opengl_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR:
            // Enum value XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR requires extension XR_KHR_opengl_es_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_es_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_opengl_es_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR:
            // Enum value XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR requires extension XR_KHR_opengl_es_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_es_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_opengl_es_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR:
            // Enum value XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR requires extension XR_KHR_opengl_es_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_es_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_opengl_es_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR:
            // Enum value XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR requires extension XR_KHR_vulkan_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_vulkan_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_vulkan_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR:
            // Enum value XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR requires extension XR_KHR_vulkan_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_vulkan_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_vulkan_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR:
            // Enum value XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR requires extension XR_KHR_vulkan_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_vulkan_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_vulkan_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_D3D11_KHR:
            // Enum value XR_TYPE_GRAPHICS_BINDING_D3D11_KHR requires extension XR_KHR_D3D11_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_D3D11_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_D3D11_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_D3D11_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR:
            // Enum value XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR requires extension XR_KHR_D3D11_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_D3D11_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_D3D11_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR:
            // Enum value XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR requires extension XR_KHR_D3D11_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_D3D11_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_D3D11_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_D3D12_KHR:
            // Enum value XR_TYPE_GRAPHICS_BINDING_D3D12_KHR requires extension XR_KHR_D3D12_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_D3D12_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_D3D12_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_D3D12_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR:
            // Enum value XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR requires extension XR_KHR_D3D12_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_D3D12_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_D3D12_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR:
            // Enum value XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR requires extension XR_KHR_D3D12_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_D3D12_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_D3D12_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_METAL_KHR:
            // Enum value XR_TYPE_GRAPHICS_BINDING_METAL_KHR requires extension XR_KHR_metal_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_metal_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_METAL_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_metal_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR:
            // Enum value XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR requires extension XR_KHR_metal_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_metal_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_metal_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_REQUIREMENTS_METAL_KHR:
            // Enum value XR_TYPE_GRAPHICS_REQUIREMENTS_METAL_KHR requires extension XR_KHR_metal_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_metal_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_REQUIREMENTS_METAL_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_metal_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT:
            // Enum value XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT requires extension XR_EXT_eye_gaze_interaction, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_eye_gaze_interaction")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_eye_gaze_interaction\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT:
            // Enum value XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT requires extension XR_EXT_eye_gaze_interaction, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_eye_gaze_interaction")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_eye_gaze_interaction\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VISIBILITY_MASK_KHR:
            // Enum value XR_TYPE_VISIBILITY_MASK_KHR requires extension XR_KHR_visibility_mask, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_visibility_mask")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VISIBILITY_MASK_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_visibility_mask\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR:
            // Enum value XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR requires extension XR_KHR_visibility_mask, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_visibility_mask")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_visibility_mask\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX:
            // Enum value XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX requires extension XR_EXTX_overlay, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXTX_overlay")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXTX_overlay\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX:
            // Enum value XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX requires extension XR_EXTX_overlay, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXTX_overlay")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXTX_overlay\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR:
            // Enum value XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR requires extension XR_KHR_composition_layer_color_scale_bias, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_color_scale_bias")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_composition_layer_color_scale_bias\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT requires extension XR_MSFT_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT requires extension XR_MSFT_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB:
            // Enum value XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB requires extension XR_FB_composition_layer_image_layout, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_composition_layer_image_layout")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_composition_layer_image_layout\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB:
            // Enum value XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB requires extension XR_FB_composition_layer_alpha_blend, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_composition_layer_alpha_blend")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_composition_layer_alpha_blend\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT:
            // Enum value XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT requires extension XR_EXT_view_configuration_depth_range, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_view_configuration_depth_range")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_view_configuration_depth_range\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GRAPHICS_BINDING_EGL_MNDX:
            // Enum value XR_TYPE_GRAPHICS_BINDING_EGL_MNDX requires extension XR_MNDX_egl_enable, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MNDX_egl_enable")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GRAPHICS_BINDING_EGL_MNDX\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MNDX_egl_enable\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT:
            // Enum value XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT requires extension XR_MSFT_spatial_graph_bridge, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_graph_bridge")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_graph_bridge\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT:
            // Enum value XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT requires extension XR_MSFT_spatial_graph_bridge, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_graph_bridge")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_graph_bridge\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT:
            // Enum value XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT requires extension XR_MSFT_spatial_graph_bridge, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_graph_bridge")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_graph_bridge\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT:
            // Enum value XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT requires extension XR_MSFT_spatial_graph_bridge, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_graph_bridge")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_graph_bridge\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT:
            // Enum value XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT requires extension XR_EXT_hand_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_hand_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT:
            // Enum value XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT requires extension XR_EXT_hand_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_hand_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT:
            // Enum value XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT requires extension XR_EXT_hand_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_hand_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_JOINT_LOCATIONS_EXT:
            // Enum value XR_TYPE_HAND_JOINT_LOCATIONS_EXT requires extension XR_EXT_hand_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_JOINT_LOCATIONS_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_hand_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_JOINT_VELOCITIES_EXT:
            // Enum value XR_TYPE_HAND_JOINT_VELOCITIES_EXT requires extension XR_EXT_hand_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_JOINT_VELOCITIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_hand_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT:
            // Enum value XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT requires extension XR_MSFT_hand_tracking_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_hand_tracking_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_hand_tracking_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT:
            // Enum value XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT requires extension XR_MSFT_hand_tracking_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_hand_tracking_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_hand_tracking_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT:
            // Enum value XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT requires extension XR_MSFT_hand_tracking_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_hand_tracking_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_hand_tracking_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_MESH_MSFT:
            // Enum value XR_TYPE_HAND_MESH_MSFT requires extension XR_MSFT_hand_tracking_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_hand_tracking_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_MESH_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_hand_tracking_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_POSE_TYPE_INFO_MSFT:
            // Enum value XR_TYPE_HAND_POSE_TYPE_INFO_MSFT requires extension XR_MSFT_hand_tracking_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_hand_tracking_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_POSE_TYPE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_hand_tracking_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT:
            // Enum value XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT requires extension XR_MSFT_secondary_view_configuration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_secondary_view_configuration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_secondary_view_configuration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT:
            // Enum value XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT requires extension XR_MSFT_secondary_view_configuration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_secondary_view_configuration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_secondary_view_configuration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT:
            // Enum value XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT requires extension XR_MSFT_secondary_view_configuration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_secondary_view_configuration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_secondary_view_configuration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT:
            // Enum value XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT requires extension XR_MSFT_secondary_view_configuration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_secondary_view_configuration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_secondary_view_configuration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT:
            // Enum value XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT requires extension XR_MSFT_secondary_view_configuration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_secondary_view_configuration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_secondary_view_configuration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT:
            // Enum value XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT requires extension XR_MSFT_secondary_view_configuration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_secondary_view_configuration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_secondary_view_configuration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT:
            // Enum value XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT requires extension XR_MSFT_controller_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_controller_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_controller_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT:
            // Enum value XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT requires extension XR_MSFT_controller_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_controller_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_controller_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT:
            // Enum value XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT requires extension XR_MSFT_controller_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_controller_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_controller_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT:
            // Enum value XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT requires extension XR_MSFT_controller_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_controller_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_controller_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CONTROLLER_MODEL_STATE_MSFT:
            // Enum value XR_TYPE_CONTROLLER_MODEL_STATE_MSFT requires extension XR_MSFT_controller_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_controller_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CONTROLLER_MODEL_STATE_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_controller_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC:
            // Enum value XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC requires extension XR_EPIC_view_configuration_fov, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EPIC_view_configuration_fov")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EPIC_view_configuration_fov\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT:
            // Enum value XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT requires extension XR_MSFT_holographic_window_attachment, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_holographic_window_attachment")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_holographic_window_attachment\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT:
            // Enum value XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT requires extension XR_MSFT_composition_layer_reprojection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_composition_layer_reprojection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_composition_layer_reprojection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT:
            // Enum value XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT requires extension XR_MSFT_composition_layer_reprojection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_composition_layer_reprojection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_composition_layer_reprojection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB:
            // Enum value XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB requires extension XR_FB_android_surface_swapchain_create, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_android_surface_swapchain_create")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_android_surface_swapchain_create\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB:
            // Enum value XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB requires extension XR_FB_composition_layer_secure_content, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_composition_layer_secure_content")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_composition_layer_secure_content\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_TRACKER_CREATE_INFO_FB:
            // Enum value XR_TYPE_BODY_TRACKER_CREATE_INFO_FB requires extension XR_FB_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_TRACKER_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB:
            // Enum value XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB requires extension XR_FB_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB:
            // Enum value XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB requires extension XR_FB_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_JOINT_LOCATIONS_FB:
            // Enum value XR_TYPE_BODY_JOINT_LOCATIONS_FB requires extension XR_FB_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_JOINT_LOCATIONS_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_SKELETON_FB:
            // Enum value XR_TYPE_BODY_SKELETON_FB requires extension XR_FB_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_SKELETON_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT:
            // Enum value XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT requires extension XR_EXT_dpad_binding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_dpad_binding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_dpad_binding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE:
            // Enum value XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE requires extension XR_VALVE_analog_threshold, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VALVE_analog_threshold")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VALVE_analog_threshold\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT:
            // Enum value XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT requires extension XR_EXT_hand_joints_motion_range, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_joints_motion_range")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_hand_joints_motion_range\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR:
            // Enum value XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR requires extension XR_KHR_loader_init_android, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_loader_init_android")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_loader_init_android\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR:
            // Enum value XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR requires extension XR_KHR_vulkan_enable2, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_vulkan_enable2")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_vulkan_enable2\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR:
            // Enum value XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR requires extension XR_KHR_vulkan_enable2, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_vulkan_enable2")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_vulkan_enable2\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR:
            // Enum value XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR requires extension XR_KHR_vulkan_enable2, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_vulkan_enable2")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_vulkan_enable2\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR:
            // Enum value XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR requires extension XR_KHR_composition_layer_equirect2, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_equirect2")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_composition_layer_equirect2\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT:
            // Enum value XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_CREATE_INFO_MSFT:
            // Enum value XR_TYPE_SCENE_CREATE_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_CREATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT:
            // Enum value XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT:
            // Enum value XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_COMPONENTS_MSFT:
            // Enum value XR_TYPE_SCENE_COMPONENTS_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_COMPONENTS_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT:
            // Enum value XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT:
            // Enum value XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT:
            // Enum value XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_OBJECTS_MSFT:
            // Enum value XR_TYPE_SCENE_OBJECTS_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_OBJECTS_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT:
            // Enum value XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT:
            // Enum value XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_PLANES_MSFT:
            // Enum value XR_TYPE_SCENE_PLANES_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_PLANES_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT:
            // Enum value XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MESHES_MSFT:
            // Enum value XR_TYPE_SCENE_MESHES_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MESHES_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT:
            // Enum value XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MESH_BUFFERS_MSFT:
            // Enum value XR_TYPE_SCENE_MESH_BUFFERS_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MESH_BUFFERS_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT:
            // Enum value XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT:
            // Enum value XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT:
            // Enum value XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT:
            // Enum value XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT requires extension XR_MSFT_scene_understanding_serialization, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding_serialization")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding_serialization\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT:
            // Enum value XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT requires extension XR_MSFT_scene_understanding_serialization, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding_serialization")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding_serialization\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB:
            // Enum value XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB requires extension XR_FB_display_refresh_rate, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_display_refresh_rate")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_display_refresh_rate\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIVE_TRACKER_PATHS_HTCX:
            // Enum value XR_TYPE_VIVE_TRACKER_PATHS_HTCX requires extension XR_HTCX_vive_tracker_interaction, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTCX_vive_tracker_interaction")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIVE_TRACKER_PATHS_HTCX\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTCX_vive_tracker_interaction\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX:
            // Enum value XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX requires extension XR_HTCX_vive_tracker_interaction, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTCX_vive_tracker_interaction")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTCX_vive_tracker_interaction\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC:
            // Enum value XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC requires extension XR_HTC_facial_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_facial_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_facial_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC:
            // Enum value XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC requires extension XR_HTC_facial_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_facial_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_facial_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACIAL_EXPRESSIONS_HTC:
            // Enum value XR_TYPE_FACIAL_EXPRESSIONS_HTC requires extension XR_HTC_facial_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_facial_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACIAL_EXPRESSIONS_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_facial_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB:
            // Enum value XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB requires extension XR_FB_color_space, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_color_space")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_color_space\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_TRACKING_MESH_FB:
            // Enum value XR_TYPE_HAND_TRACKING_MESH_FB requires extension XR_FB_hand_tracking_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_hand_tracking_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_TRACKING_MESH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_hand_tracking_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_TRACKING_SCALE_FB:
            // Enum value XR_TYPE_HAND_TRACKING_SCALE_FB requires extension XR_FB_hand_tracking_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_hand_tracking_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_TRACKING_SCALE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_hand_tracking_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_TRACKING_AIM_STATE_FB:
            // Enum value XR_TYPE_HAND_TRACKING_AIM_STATE_FB requires extension XR_FB_hand_tracking_aim, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_hand_tracking_aim")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_TRACKING_AIM_STATE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_hand_tracking_aim\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB:
            // Enum value XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB requires extension XR_FB_hand_tracking_capsules, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_hand_tracking_capsules")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_hand_tracking_capsules\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB:
            // Enum value XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB:
            // Enum value XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_COMPONENT_STATUS_FB:
            // Enum value XR_TYPE_SPACE_COMPONENT_STATUS_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_COMPONENT_STATUS_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB:
            // Enum value XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB:
            // Enum value XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB requires extension XR_FB_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB:
            // Enum value XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB requires extension XR_FB_foveation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_foveation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_foveation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB:
            // Enum value XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB requires extension XR_FB_foveation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_foveation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_foveation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB:
            // Enum value XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB requires extension XR_FB_foveation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_foveation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_foveation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB:
            // Enum value XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB requires extension XR_FB_foveation_configuration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_foveation_configuration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_foveation_configuration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB:
            // Enum value XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB requires extension XR_FB_keyboard_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_keyboard_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_keyboard_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_KEYBOARD_TRACKING_QUERY_FB:
            // Enum value XR_TYPE_KEYBOARD_TRACKING_QUERY_FB requires extension XR_FB_keyboard_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_keyboard_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_KEYBOARD_TRACKING_QUERY_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_keyboard_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB:
            // Enum value XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB requires extension XR_FB_keyboard_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_keyboard_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_keyboard_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB:
            // Enum value XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB requires extension XR_FB_triangle_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_triangle_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_triangle_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB:
            // Enum value XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_CREATE_INFO_FB:
            // Enum value XR_TYPE_PASSTHROUGH_CREATE_INFO_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB:
            // Enum value XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB:
            // Enum value XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB:
            // Enum value XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB:
            // Enum value XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB:
            // Enum value XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_STYLE_FB:
            // Enum value XR_TYPE_PASSTHROUGH_STYLE_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_STYLE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB:
            // Enum value XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB:
            // Enum value XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB:
            // Enum value XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB:
            // Enum value XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_PATH_INFO_FB:
            // Enum value XR_TYPE_RENDER_MODEL_PATH_INFO_FB requires extension XR_FB_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_PATH_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_PROPERTIES_FB:
            // Enum value XR_TYPE_RENDER_MODEL_PROPERTIES_FB requires extension XR_FB_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_BUFFER_FB:
            // Enum value XR_TYPE_RENDER_MODEL_BUFFER_FB requires extension XR_FB_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_BUFFER_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_LOAD_INFO_FB:
            // Enum value XR_TYPE_RENDER_MODEL_LOAD_INFO_FB requires extension XR_FB_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_LOAD_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB:
            // Enum value XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB requires extension XR_FB_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB:
            // Enum value XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB requires extension XR_FB_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BINDING_MODIFICATIONS_KHR:
            // Enum value XR_TYPE_BINDING_MODIFICATIONS_KHR requires extension XR_KHR_binding_modification, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_binding_modification")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BINDING_MODIFICATIONS_KHR\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_KHR_binding_modification\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO:
            // Enum value XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO requires extension XR_VARJO_foveated_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_foveated_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_foveated_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO:
            // Enum value XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO requires extension XR_VARJO_foveated_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_foveated_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_foveated_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO:
            // Enum value XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO requires extension XR_VARJO_foveated_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_foveated_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_foveated_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO:
            // Enum value XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO requires extension XR_VARJO_composition_layer_depth_test, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_composition_layer_depth_test")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_composition_layer_depth_test\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO:
            // Enum value XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO requires extension XR_VARJO_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO:
            // Enum value XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO requires extension XR_VARJO_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO:
            // Enum value XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO requires extension XR_VARJO_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FRAME_END_INFO_ML:
            // Enum value XR_TYPE_FRAME_END_INFO_ML requires extension XR_ML_frame_end_info, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_frame_end_info")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FRAME_END_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_frame_end_info\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML:
            // Enum value XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML requires extension XR_ML_global_dimmer, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_global_dimmer")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_global_dimmer\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML:
            // Enum value XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML requires extension XR_ML_compat, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_compat")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_compat\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_MARKER_UNDERSTANDING_PROPERTIES_ML:
            // Enum value XR_TYPE_SYSTEM_MARKER_UNDERSTANDING_PROPERTIES_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_MARKER_UNDERSTANDING_PROPERTIES_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MARKER_DETECTOR_CREATE_INFO_ML:
            // Enum value XR_TYPE_MARKER_DETECTOR_CREATE_INFO_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MARKER_DETECTOR_CREATE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MARKER_DETECTOR_ARUCO_INFO_ML:
            // Enum value XR_TYPE_MARKER_DETECTOR_ARUCO_INFO_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MARKER_DETECTOR_ARUCO_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MARKER_DETECTOR_SIZE_INFO_ML:
            // Enum value XR_TYPE_MARKER_DETECTOR_SIZE_INFO_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MARKER_DETECTOR_SIZE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MARKER_DETECTOR_APRIL_TAG_INFO_ML:
            // Enum value XR_TYPE_MARKER_DETECTOR_APRIL_TAG_INFO_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MARKER_DETECTOR_APRIL_TAG_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MARKER_DETECTOR_CUSTOM_PROFILE_INFO_ML:
            // Enum value XR_TYPE_MARKER_DETECTOR_CUSTOM_PROFILE_INFO_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MARKER_DETECTOR_CUSTOM_PROFILE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MARKER_DETECTOR_SNAPSHOT_INFO_ML:
            // Enum value XR_TYPE_MARKER_DETECTOR_SNAPSHOT_INFO_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MARKER_DETECTOR_SNAPSHOT_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MARKER_DETECTOR_STATE_ML:
            // Enum value XR_TYPE_MARKER_DETECTOR_STATE_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MARKER_DETECTOR_STATE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MARKER_SPACE_CREATE_INFO_ML:
            // Enum value XR_TYPE_MARKER_SPACE_CREATE_INFO_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MARKER_SPACE_CREATE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LOCALIZATION_MAP_ML:
            // Enum value XR_TYPE_LOCALIZATION_MAP_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LOCALIZATION_MAP_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML:
            // Enum value XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_MAP_LOCALIZATION_REQUEST_INFO_ML:
            // Enum value XR_TYPE_MAP_LOCALIZATION_REQUEST_INFO_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_MAP_LOCALIZATION_REQUEST_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LOCALIZATION_MAP_IMPORT_INFO_ML:
            // Enum value XR_TYPE_LOCALIZATION_MAP_IMPORT_INFO_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LOCALIZATION_MAP_IMPORT_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LOCALIZATION_ENABLE_EVENTS_INFO_ML:
            // Enum value XR_TYPE_LOCALIZATION_ENABLE_EVENTS_INFO_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LOCALIZATION_ENABLE_EVENTS_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML requires extension XR_ML_spatial_anchors, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CREATE_SPATIAL_ANCHORS_COMPLETION_ML:
            // Enum value XR_TYPE_CREATE_SPATIAL_ANCHORS_COMPLETION_ML requires extension XR_ML_spatial_anchors, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CREATE_SPATIAL_ANCHORS_COMPLETION_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_STATE_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_STATE_ML requires extension XR_ML_spatial_anchors, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_STATE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_CREATE_STORAGE_INFO_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_CREATE_STORAGE_INFO_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_CREATE_STORAGE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_QUERY_COMPLETION_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_QUERY_COMPLETION_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_QUERY_COMPLETION_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_PUBLISH_INFO_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_PUBLISH_INFO_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_PUBLISH_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_DELETE_INFO_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_DELETE_INFO_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_DELETE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_INFO_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_INFO_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_DETAILS_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_DETAILS_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_DETAILS_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_DETAILS_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_DETAILS_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_DETAILS_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_DETAILS_ML:
            // Enum value XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_DETAILS_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_DETAILS_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML:
            // Enum value XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML requires extension XR_ML_user_calibration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_user_calibration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_user_calibration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML:
            // Enum value XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML requires extension XR_ML_user_calibration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_user_calibration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_user_calibration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_USER_CALIBRATION_ENABLE_EVENTS_INFO_ML:
            // Enum value XR_TYPE_USER_CALIBRATION_ENABLE_EVENTS_INFO_ML requires extension XR_ML_user_calibration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_user_calibration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_USER_CALIBRATION_ENABLE_EVENTS_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_user_calibration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT requires extension XR_MSFT_spatial_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT requires extension XR_MSFT_spatial_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MARKERS_MSFT:
            // Enum value XR_TYPE_SCENE_MARKERS_MSFT requires extension XR_MSFT_scene_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MARKERS_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MARKER_TYPE_FILTER_MSFT:
            // Enum value XR_TYPE_SCENE_MARKER_TYPE_FILTER_MSFT requires extension XR_MSFT_scene_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MARKER_TYPE_FILTER_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MARKER_QR_CODES_MSFT:
            // Enum value XR_TYPE_SCENE_MARKER_QR_CODES_MSFT requires extension XR_MSFT_scene_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MARKER_QR_CODES_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_QUERY_INFO_FB:
            // Enum value XR_TYPE_SPACE_QUERY_INFO_FB requires extension XR_FB_spatial_entity_query, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_QUERY_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_QUERY_RESULTS_FB:
            // Enum value XR_TYPE_SPACE_QUERY_RESULTS_FB requires extension XR_FB_spatial_entity_query, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_QUERY_RESULTS_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB:
            // Enum value XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB requires extension XR_FB_spatial_entity_query, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_UUID_FILTER_INFO_FB:
            // Enum value XR_TYPE_SPACE_UUID_FILTER_INFO_FB requires extension XR_FB_spatial_entity_query, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_UUID_FILTER_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB:
            // Enum value XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB requires extension XR_FB_spatial_entity_query, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB:
            // Enum value XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB requires extension XR_FB_spatial_entity_query, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB:
            // Enum value XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB requires extension XR_FB_spatial_entity_query, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_SAVE_INFO_FB:
            // Enum value XR_TYPE_SPACE_SAVE_INFO_FB requires extension XR_FB_spatial_entity_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_SAVE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_ERASE_INFO_FB:
            // Enum value XR_TYPE_SPACE_ERASE_INFO_FB requires extension XR_FB_spatial_entity_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_ERASE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB:
            // Enum value XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB requires extension XR_FB_spatial_entity_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB:
            // Enum value XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB requires extension XR_FB_spatial_entity_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB:
            // Enum value XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB requires extension XR_FB_foveation_vulkan, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_foveation_vulkan")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_foveation_vulkan\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB:
            // Enum value XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB requires extension XR_FB_swapchain_update_state_android_surface, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_swapchain_update_state_android_surface")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_swapchain_update_state_android_surface\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB:
            // Enum value XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB requires extension XR_FB_swapchain_update_state_opengl_es, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_swapchain_update_state_opengl_es")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_swapchain_update_state_opengl_es\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB:
            // Enum value XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB requires extension XR_FB_swapchain_update_state_vulkan, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_swapchain_update_state_vulkan")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_swapchain_update_state_vulkan\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_SHARE_INFO_FB:
            // Enum value XR_TYPE_SPACE_SHARE_INFO_FB requires extension XR_FB_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_SHARE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB:
            // Enum value XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB requires extension XR_FB_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB:
            // Enum value XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB requires extension XR_FB_space_warp, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_space_warp")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_space_warp\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB:
            // Enum value XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB requires extension XR_FB_space_warp, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_space_warp")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_space_warp\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB:
            // Enum value XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB requires extension XR_FB_haptic_amplitude_envelope, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_haptic_amplitude_envelope")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_haptic_amplitude_envelope\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SEMANTIC_LABELS_FB:
            // Enum value XR_TYPE_SEMANTIC_LABELS_FB requires extension XR_FB_scene, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_scene")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SEMANTIC_LABELS_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_scene\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ROOM_LAYOUT_FB:
            // Enum value XR_TYPE_ROOM_LAYOUT_FB requires extension XR_FB_scene, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_scene")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ROOM_LAYOUT_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_scene\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BOUNDARY_2D_FB:
            // Enum value XR_TYPE_BOUNDARY_2D_FB requires extension XR_FB_scene, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_scene")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BOUNDARY_2D_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_scene\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB:
            // Enum value XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB requires extension XR_FB_scene, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_scene")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_scene\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE:
            // Enum value XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE requires extension XR_ALMALENCE_digital_lens_control, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ALMALENCE_digital_lens_control")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ALMALENCE_digital_lens_control\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB:
            // Enum value XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB requires extension XR_FB_scene_capture, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_scene_capture")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_scene_capture\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB:
            // Enum value XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB requires extension XR_FB_scene_capture, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_scene_capture")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_scene_capture\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_CONTAINER_FB:
            // Enum value XR_TYPE_SPACE_CONTAINER_FB requires extension XR_FB_spatial_entity_container, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_container")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_CONTAINER_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_container\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META:
            // Enum value XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META requires extension XR_META_foveation_eye_tracked, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_foveation_eye_tracked")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_foveation_eye_tracked\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META:
            // Enum value XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META requires extension XR_META_foveation_eye_tracked, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_foveation_eye_tracked")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_foveation_eye_tracked\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META requires extension XR_META_foveation_eye_tracked, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_foveation_eye_tracked")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_foveation_eye_tracked\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB:
            // Enum value XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB requires extension XR_FB_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_TRACKER_CREATE_INFO_FB:
            // Enum value XR_TYPE_FACE_TRACKER_CREATE_INFO_FB requires extension XR_FB_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_TRACKER_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_EXPRESSION_INFO_FB:
            // Enum value XR_TYPE_FACE_EXPRESSION_INFO_FB requires extension XR_FB_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_EXPRESSION_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB:
            // Enum value XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB requires extension XR_FB_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EYE_TRACKER_CREATE_INFO_FB:
            // Enum value XR_TYPE_EYE_TRACKER_CREATE_INFO_FB requires extension XR_FB_eye_tracking_social, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_eye_tracking_social")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EYE_TRACKER_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_eye_tracking_social\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EYE_GAZES_INFO_FB:
            // Enum value XR_TYPE_EYE_GAZES_INFO_FB requires extension XR_FB_eye_tracking_social, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_eye_tracking_social")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EYE_GAZES_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_eye_tracking_social\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EYE_GAZES_FB:
            // Enum value XR_TYPE_EYE_GAZES_FB requires extension XR_FB_eye_tracking_social, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_eye_tracking_social")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EYE_GAZES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_eye_tracking_social\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB:
            // Enum value XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB requires extension XR_FB_eye_tracking_social, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_eye_tracking_social")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_eye_tracking_social\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB:
            // Enum value XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB requires extension XR_FB_passthrough_keyboard_hands, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough_keyboard_hands")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough_keyboard_hands\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB:
            // Enum value XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB requires extension XR_FB_composition_layer_settings, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_composition_layer_settings")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_composition_layer_settings\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAPTIC_PCM_VIBRATION_FB:
            // Enum value XR_TYPE_HAPTIC_PCM_VIBRATION_FB requires extension XR_FB_haptic_pcm, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_haptic_pcm")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAPTIC_PCM_VIBRATION_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_haptic_pcm\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB:
            // Enum value XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB requires extension XR_FB_haptic_pcm, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_haptic_pcm")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_haptic_pcm\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FRAME_SYNTHESIS_INFO_EXT:
            // Enum value XR_TYPE_FRAME_SYNTHESIS_INFO_EXT requires extension XR_EXT_frame_synthesis, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_frame_synthesis")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FRAME_SYNTHESIS_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_frame_synthesis\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT:
            // Enum value XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT requires extension XR_EXT_frame_synthesis, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_frame_synthesis")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_frame_synthesis\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB:
            // Enum value XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB requires extension XR_FB_composition_layer_depth_test, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_composition_layer_depth_test")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_composition_layer_depth_test\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META:
            // Enum value XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META requires extension XR_META_local_dimming, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_local_dimming")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_local_dimming\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_PREFERENCES_META:
            // Enum value XR_TYPE_PASSTHROUGH_PREFERENCES_META requires extension XR_META_passthrough_preferences, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_preferences")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_PREFERENCES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_passthrough_preferences\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META:
            // Enum value XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META:
            // Enum value XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META:
            // Enum value XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META:
            // Enum value XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META:
            // Enum value XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META:
            // Enum value XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META:
            // Enum value XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META:
            // Enum value XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META:
            // Enum value XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META:
            // Enum value XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META:
            // Enum value XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META:
            // Enum value XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META:
            // Enum value XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META:
            // Enum value XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EXTERNAL_CAMERA_OCULUS:
            // Enum value XR_TYPE_EXTERNAL_CAMERA_OCULUS requires extension XR_OCULUS_external_camera, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_OCULUS_external_camera")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EXTERNAL_CAMERA_OCULUS\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_OCULUS_external_camera\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META:
            // Enum value XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META requires extension XR_META_vulkan_swapchain_create_info, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_vulkan_swapchain_create_info")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_vulkan_swapchain_create_info\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PERFORMANCE_METRICS_STATE_META:
            // Enum value XR_TYPE_PERFORMANCE_METRICS_STATE_META requires extension XR_META_performance_metrics, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_performance_metrics")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PERFORMANCE_METRICS_STATE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_performance_metrics\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PERFORMANCE_METRICS_COUNTER_META:
            // Enum value XR_TYPE_PERFORMANCE_METRICS_COUNTER_META requires extension XR_META_performance_metrics, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_performance_metrics")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PERFORMANCE_METRICS_COUNTER_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_performance_metrics\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_LIST_SAVE_INFO_FB:
            // Enum value XR_TYPE_SPACE_LIST_SAVE_INFO_FB requires extension XR_FB_spatial_entity_storage_batch, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage_batch")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_LIST_SAVE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_storage_batch\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB:
            // Enum value XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB requires extension XR_FB_spatial_entity_storage_batch, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage_batch")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_storage_batch\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_USER_CREATE_INFO_FB:
            // Enum value XR_TYPE_SPACE_USER_CREATE_INFO_FB requires extension XR_FB_spatial_entity_user, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_user")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_USER_CREATE_INFO_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_user\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META requires extension XR_META_headset_id, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_headset_id")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_headset_id\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPACE_DISCOVERY_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_SPACE_DISCOVERY_PROPERTIES_META requires extension XR_META_spatial_entity_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPACE_DISCOVERY_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_DISCOVERY_INFO_META:
            // Enum value XR_TYPE_SPACE_DISCOVERY_INFO_META requires extension XR_META_spatial_entity_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_DISCOVERY_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_FILTER_UUID_META:
            // Enum value XR_TYPE_SPACE_FILTER_UUID_META requires extension XR_META_spatial_entity_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_FILTER_UUID_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_FILTER_COMPONENT_META:
            // Enum value XR_TYPE_SPACE_FILTER_COMPONENT_META requires extension XR_META_spatial_entity_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_FILTER_COMPONENT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_DISCOVERY_RESULT_META:
            // Enum value XR_TYPE_SPACE_DISCOVERY_RESULT_META requires extension XR_META_spatial_entity_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_DISCOVERY_RESULT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_DISCOVERY_RESULTS_META:
            // Enum value XR_TYPE_SPACE_DISCOVERY_RESULTS_META requires extension XR_META_spatial_entity_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_DISCOVERY_RESULTS_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_RESULTS_AVAILABLE_META:
            // Enum value XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_RESULTS_AVAILABLE_META requires extension XR_META_spatial_entity_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_RESULTS_AVAILABLE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_COMPLETE_META:
            // Enum value XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_COMPLETE_META requires extension XR_META_spatial_entity_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_COMPLETE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_META:
            // Enum value XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_META requires extension XR_META_recommended_layer_resolution, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_recommended_layer_resolution")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_recommended_layer_resolution\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_GET_INFO_META:
            // Enum value XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_GET_INFO_META requires extension XR_META_recommended_layer_resolution, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_recommended_layer_resolution")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_GET_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_recommended_layer_resolution\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPACE_PERSISTENCE_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_SPACE_PERSISTENCE_PROPERTIES_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPACE_PERSISTENCE_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACES_SAVE_INFO_META:
            // Enum value XR_TYPE_SPACES_SAVE_INFO_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACES_SAVE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACES_SAVE_RESULT_META:
            // Enum value XR_TYPE_EVENT_DATA_SPACES_SAVE_RESULT_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACES_SAVE_RESULT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACES_ERASE_INFO_META:
            // Enum value XR_TYPE_SPACES_ERASE_INFO_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACES_ERASE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPACES_ERASE_RESULT_META:
            // Enum value XR_TYPE_EVENT_DATA_SPACES_ERASE_RESULT_META requires extension XR_META_spatial_entity_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPACES_ERASE_RESULT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META requires extension XR_META_passthrough_color_lut, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_color_lut")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_passthrough_color_lut\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META:
            // Enum value XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META requires extension XR_META_passthrough_color_lut, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_color_lut")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_passthrough_color_lut\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META:
            // Enum value XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META requires extension XR_META_passthrough_color_lut, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_color_lut")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_passthrough_color_lut\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META:
            // Enum value XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META requires extension XR_META_passthrough_color_lut, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_color_lut")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_passthrough_color_lut\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META:
            // Enum value XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META requires extension XR_META_passthrough_color_lut, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_color_lut")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_passthrough_color_lut\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_TRIANGLE_MESH_GET_INFO_META:
            // Enum value XR_TYPE_SPACE_TRIANGLE_MESH_GET_INFO_META requires extension XR_META_spatial_entity_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_TRIANGLE_MESH_GET_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_TRIANGLE_MESH_META:
            // Enum value XR_TYPE_SPACE_TRIANGLE_MESH_META requires extension XR_META_spatial_entity_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_TRIANGLE_MESH_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FULL_BODY_META:
            // Enum value XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FULL_BODY_META requires extension XR_META_body_tracking_full_body, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_full_body")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FULL_BODY_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_body_tracking_full_body\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_PASSTHROUGH_LAYER_RESUMED_META:
            // Enum value XR_TYPE_EVENT_DATA_PASSTHROUGH_LAYER_RESUMED_META requires extension XR_META_passthrough_layer_resumed_event, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_layer_resumed_event")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_PASSTHROUGH_LAYER_RESUMED_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_passthrough_layer_resumed_event\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_TRACKING_CALIBRATION_INFO_META:
            // Enum value XR_TYPE_BODY_TRACKING_CALIBRATION_INFO_META requires extension XR_META_body_tracking_calibration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_calibration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_TRACKING_CALIBRATION_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_body_tracking_calibration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_TRACKING_CALIBRATION_STATUS_META:
            // Enum value XR_TYPE_BODY_TRACKING_CALIBRATION_STATUS_META requires extension XR_META_body_tracking_calibration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_calibration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_TRACKING_CALIBRATION_STATUS_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_body_tracking_calibration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_CALIBRATION_META:
            // Enum value XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_CALIBRATION_META requires extension XR_META_body_tracking_calibration, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_calibration")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_CALIBRATION_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_body_tracking_calibration\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_TRACKING_FIDELITY_STATUS_META:
            // Enum value XR_TYPE_BODY_TRACKING_FIDELITY_STATUS_META requires extension XR_META_body_tracking_fidelity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_fidelity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_TRACKING_FIDELITY_STATUS_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_body_tracking_fidelity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FIDELITY_META:
            // Enum value XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FIDELITY_META requires extension XR_META_body_tracking_fidelity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_fidelity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FIDELITY_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_body_tracking_fidelity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES2_FB:
            // Enum value XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES2_FB requires extension XR_FB_face_tracking2, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking2")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES2_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking2\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_TRACKER_CREATE_INFO2_FB:
            // Enum value XR_TYPE_FACE_TRACKER_CREATE_INFO2_FB requires extension XR_FB_face_tracking2, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking2")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_TRACKER_CREATE_INFO2_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking2\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_EXPRESSION_INFO2_FB:
            // Enum value XR_TYPE_FACE_EXPRESSION_INFO2_FB requires extension XR_FB_face_tracking2, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking2")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_EXPRESSION_INFO2_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking2\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_EXPRESSION_WEIGHTS2_FB:
            // Enum value XR_TYPE_FACE_EXPRESSION_WEIGHTS2_FB requires extension XR_FB_face_tracking2, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking2")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_EXPRESSION_WEIGHTS2_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking2\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPATIAL_ENTITY_SHARING_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_SPATIAL_ENTITY_SHARING_PROPERTIES_META requires extension XR_META_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPATIAL_ENTITY_SHARING_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SHARE_SPACES_INFO_META:
            // Enum value XR_TYPE_SHARE_SPACES_INFO_META requires extension XR_META_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SHARE_SPACES_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SHARE_SPACES_COMPLETE_META:
            // Enum value XR_TYPE_EVENT_DATA_SHARE_SPACES_COMPLETE_META requires extension XR_META_spatial_entity_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SHARE_SPACES_COMPLETE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_DEPTH_PROVIDER_CREATE_INFO_META:
            // Enum value XR_TYPE_ENVIRONMENT_DEPTH_PROVIDER_CREATE_INFO_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_DEPTH_PROVIDER_CREATE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_CREATE_INFO_META:
            // Enum value XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_CREATE_INFO_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_CREATE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_STATE_META:
            // Enum value XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_STATE_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_STATE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_ACQUIRE_INFO_META:
            // Enum value XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_ACQUIRE_INFO_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_ACQUIRE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_VIEW_META:
            // Enum value XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_VIEW_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_VIEW_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_META:
            // Enum value XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_DEPTH_HAND_REMOVAL_SET_INFO_META:
            // Enum value XR_TYPE_ENVIRONMENT_DEPTH_HAND_REMOVAL_SET_INFO_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_DEPTH_HAND_REMOVAL_SET_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_ENVIRONMENT_DEPTH_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_ENVIRONMENT_DEPTH_PROPERTIES_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_ENVIRONMENT_DEPTH_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_TIMESTAMP_META:
            // Enum value XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_TIMESTAMP_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_TIMESTAMP_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_CREATE_INFO_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_CREATE_INFO_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_PROPERTIES_GET_INFO_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_PROPERTIES_GET_INFO_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_PROPERTIES_GET_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_PROPERTIES_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_PROPERTIES_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_PROPERTIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_SPACE_CREATE_INFO_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_SPACE_CREATE_INFO_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_SPACE_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_STATE_GET_INFO_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_STATE_GET_INFO_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_STATE_GET_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_STATE_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_STATE_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_STATE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_ASSET_CREATE_INFO_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_ASSET_CREATE_INFO_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_ASSET_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_ASSET_DATA_GET_INFO_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_ASSET_DATA_GET_INFO_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_ASSET_DATA_GET_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_ASSET_DATA_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_ASSET_DATA_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_ASSET_DATA_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_GET_INFO_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_GET_INFO_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_GET_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_EXT:
            // Enum value XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_INTERACTION_RENDER_MODEL_IDS_ENUMERATE_INFO_EXT:
            // Enum value XR_TYPE_INTERACTION_RENDER_MODEL_IDS_ENUMERATE_INFO_EXT requires extension XR_EXT_interaction_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_interaction_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_INTERACTION_RENDER_MODEL_IDS_ENUMERATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_interaction_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_INTERACTION_RENDER_MODEL_SUBACTION_PATH_INFO_EXT:
            // Enum value XR_TYPE_INTERACTION_RENDER_MODEL_SUBACTION_PATH_INFO_EXT requires extension XR_EXT_interaction_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_interaction_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_INTERACTION_RENDER_MODEL_SUBACTION_PATH_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_interaction_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_INTERACTION_RENDER_MODELS_CHANGED_EXT:
            // Enum value XR_TYPE_EVENT_DATA_INTERACTION_RENDER_MODELS_CHANGED_EXT requires extension XR_EXT_interaction_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_interaction_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_INTERACTION_RENDER_MODELS_CHANGED_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_interaction_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_INTERACTION_RENDER_MODEL_TOP_LEVEL_USER_PATH_GET_INFO_EXT:
            // Enum value XR_TYPE_INTERACTION_RENDER_MODEL_TOP_LEVEL_USER_PATH_GET_INFO_EXT requires extension XR_EXT_interaction_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_interaction_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_INTERACTION_RENDER_MODEL_TOP_LEVEL_USER_PATH_GET_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_interaction_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC:
            // Enum value XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC requires extension XR_HTC_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_COLOR_HTC:
            // Enum value XR_TYPE_PASSTHROUGH_COLOR_HTC requires extension XR_HTC_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_COLOR_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC:
            // Enum value XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC requires extension XR_HTC_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC:
            // Enum value XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC requires extension XR_HTC_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FOVEATION_APPLY_INFO_HTC:
            // Enum value XR_TYPE_FOVEATION_APPLY_INFO_HTC requires extension XR_HTC_foveation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_foveation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FOVEATION_APPLY_INFO_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_foveation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC:
            // Enum value XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC requires extension XR_HTC_foveation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_foveation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_foveation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC:
            // Enum value XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC requires extension XR_HTC_foveation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_foveation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_foveation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC:
            // Enum value XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC requires extension XR_HTC_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_HTC:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_HTC requires extension XR_HTC_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_HTC:
            // Enum value XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_HTC requires extension XR_HTC_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_TRACKER_CREATE_INFO_HTC:
            // Enum value XR_TYPE_BODY_TRACKER_CREATE_INFO_HTC requires extension XR_HTC_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_TRACKER_CREATE_INFO_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_JOINTS_LOCATE_INFO_HTC:
            // Enum value XR_TYPE_BODY_JOINTS_LOCATE_INFO_HTC requires extension XR_HTC_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_JOINTS_LOCATE_INFO_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_JOINT_LOCATIONS_HTC:
            // Enum value XR_TYPE_BODY_JOINT_LOCATIONS_HTC requires extension XR_HTC_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_JOINT_LOCATIONS_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_SKELETON_HTC:
            // Enum value XR_TYPE_BODY_SKELETON_HTC requires extension XR_HTC_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_SKELETON_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT:
            // Enum value XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT requires extension XR_EXT_active_action_set_priority, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_active_action_set_priority")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_active_action_set_priority\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX:
            // Enum value XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX requires extension XR_MNDX_force_feedback_curl, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MNDX_force_feedback_curl")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MNDX_force_feedback_curl\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX:
            // Enum value XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX requires extension XR_MNDX_force_feedback_curl, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MNDX_force_feedback_curl")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MNDX_force_feedback_curl\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_TRACKER_CREATE_INFO_BD:
            // Enum value XR_TYPE_BODY_TRACKER_CREATE_INFO_BD requires extension XR_BD_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_TRACKER_CREATE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_JOINTS_LOCATE_INFO_BD:
            // Enum value XR_TYPE_BODY_JOINTS_LOCATE_INFO_BD requires extension XR_BD_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_JOINTS_LOCATE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BODY_JOINT_LOCATIONS_BD:
            // Enum value XR_TYPE_BODY_JOINT_LOCATIONS_BD requires extension XR_BD_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BODY_JOINT_LOCATIONS_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_BD:
            // Enum value XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_BD requires extension XR_BD_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FACIAL_SIMULATION_PROPERTIES_BD:
            // Enum value XR_TYPE_SYSTEM_FACIAL_SIMULATION_PROPERTIES_BD requires extension XR_BD_facial_simulation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_facial_simulation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FACIAL_SIMULATION_PROPERTIES_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_facial_simulation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_TRACKER_CREATE_INFO_BD:
            // Enum value XR_TYPE_FACE_TRACKER_CREATE_INFO_BD requires extension XR_BD_facial_simulation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_facial_simulation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_TRACKER_CREATE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_facial_simulation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACIAL_SIMULATION_DATA_GET_INFO_BD:
            // Enum value XR_TYPE_FACIAL_SIMULATION_DATA_GET_INFO_BD requires extension XR_BD_facial_simulation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_facial_simulation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACIAL_SIMULATION_DATA_GET_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_facial_simulation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACIAL_SIMULATION_DATA_BD:
            // Enum value XR_TYPE_FACIAL_SIMULATION_DATA_BD requires extension XR_BD_facial_simulation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_facial_simulation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACIAL_SIMULATION_DATA_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_facial_simulation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LIP_EXPRESSION_DATA_BD:
            // Enum value XR_TYPE_LIP_EXPRESSION_DATA_BD requires extension XR_BD_facial_simulation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_facial_simulation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LIP_EXPRESSION_DATA_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_facial_simulation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPATIAL_SENSING_PROPERTIES_BD:
            // Enum value XR_TYPE_SYSTEM_SPATIAL_SENSING_PROPERTIES_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPATIAL_SENSING_PROPERTIES_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_COMPONENT_GET_INFO_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_COMPONENT_GET_INFO_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_COMPONENT_GET_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_LOCATION_GET_INFO_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_LOCATION_GET_INFO_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_LOCATION_GET_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_LOCATION_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_LOCATION_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_LOCATION_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_SEMANTIC_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_SEMANTIC_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_SEMANTIC_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_2D_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_2D_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_2D_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_POLYGON_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_POLYGON_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_POLYGON_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_3D_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_3D_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_3D_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_TRIANGLE_MESH_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_TRIANGLE_MESH_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_TRIANGLE_MESH_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_BD:
            // Enum value XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SENSE_DATA_PROVIDER_START_INFO_BD:
            // Enum value XR_TYPE_SENSE_DATA_PROVIDER_START_INFO_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SENSE_DATA_PROVIDER_START_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SENSE_DATA_PROVIDER_STATE_CHANGED_BD:
            // Enum value XR_TYPE_EVENT_DATA_SENSE_DATA_PROVIDER_STATE_CHANGED_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SENSE_DATA_PROVIDER_STATE_CHANGED_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SENSE_DATA_UPDATED_BD:
            // Enum value XR_TYPE_EVENT_DATA_SENSE_DATA_UPDATED_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SENSE_DATA_UPDATED_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SENSE_DATA_QUERY_INFO_BD:
            // Enum value XR_TYPE_SENSE_DATA_QUERY_INFO_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SENSE_DATA_QUERY_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SENSE_DATA_QUERY_COMPLETION_BD:
            // Enum value XR_TYPE_SENSE_DATA_QUERY_COMPLETION_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SENSE_DATA_QUERY_COMPLETION_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SENSE_DATA_FILTER_UUID_BD:
            // Enum value XR_TYPE_SENSE_DATA_FILTER_UUID_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SENSE_DATA_FILTER_UUID_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SENSE_DATA_FILTER_SEMANTIC_BD:
            // Enum value XR_TYPE_SENSE_DATA_FILTER_SEMANTIC_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SENSE_DATA_FILTER_SEMANTIC_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_QUERIED_SENSE_DATA_GET_INFO_BD:
            // Enum value XR_TYPE_QUERIED_SENSE_DATA_GET_INFO_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_QUERIED_SENSE_DATA_GET_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_QUERIED_SENSE_DATA_BD:
            // Enum value XR_TYPE_QUERIED_SENSE_DATA_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_QUERIED_SENSE_DATA_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_STATE_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_STATE_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_STATE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_ANCHOR_CREATE_INFO_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_ANCHOR_CREATE_INFO_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_ANCHOR_CREATE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ANCHOR_SPACE_CREATE_INFO_BD:
            // Enum value XR_TYPE_ANCHOR_SPACE_CREATE_INFO_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ANCHOR_SPACE_CREATE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPATIAL_ANCHOR_PROPERTIES_BD:
            // Enum value XR_TYPE_SYSTEM_SPATIAL_ANCHOR_PROPERTIES_BD requires extension XR_BD_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPATIAL_ANCHOR_PROPERTIES_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_BD:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_BD requires extension XR_BD_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_CREATE_COMPLETION_BD:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_CREATE_COMPLETION_BD requires extension XR_BD_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_CREATE_COMPLETION_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_PERSIST_INFO_BD:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_PERSIST_INFO_BD requires extension XR_BD_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_PERSIST_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_UNPERSIST_INFO_BD:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_UNPERSIST_INFO_BD requires extension XR_BD_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_UNPERSIST_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPATIAL_ANCHOR_SHARING_PROPERTIES_BD:
            // Enum value XR_TYPE_SYSTEM_SPATIAL_ANCHOR_SHARING_PROPERTIES_BD requires extension XR_BD_spatial_anchor_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPATIAL_ANCHOR_SHARING_PROPERTIES_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_SHARE_INFO_BD:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_SHARE_INFO_BD requires extension XR_BD_spatial_anchor_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_SHARE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SHARED_SPATIAL_ANCHOR_DOWNLOAD_INFO_BD:
            // Enum value XR_TYPE_SHARED_SPATIAL_ANCHOR_DOWNLOAD_INFO_BD requires extension XR_BD_spatial_anchor_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SHARED_SPATIAL_ANCHOR_DOWNLOAD_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPATIAL_SCENE_PROPERTIES_BD:
            // Enum value XR_TYPE_SYSTEM_SPATIAL_SCENE_PROPERTIES_BD requires extension XR_BD_spatial_scene, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_scene")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPATIAL_SCENE_PROPERTIES_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_scene\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_CAPTURE_INFO_BD:
            // Enum value XR_TYPE_SCENE_CAPTURE_INFO_BD requires extension XR_BD_spatial_scene, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_scene")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_CAPTURE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_scene\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPATIAL_MESH_PROPERTIES_BD:
            // Enum value XR_TYPE_SYSTEM_SPATIAL_MESH_PROPERTIES_BD requires extension XR_BD_spatial_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPATIAL_MESH_PROPERTIES_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_SPATIAL_MESH_BD:
            // Enum value XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_SPATIAL_MESH_BD requires extension XR_BD_spatial_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_SPATIAL_MESH_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FUTURE_POLL_RESULT_PROGRESS_BD:
            // Enum value XR_TYPE_FUTURE_POLL_RESULT_PROGRESS_BD requires extension XR_BD_future_progress, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_future_progress")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FUTURE_POLL_RESULT_PROGRESS_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_future_progress\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPATIAL_PLANE_PROPERTIES_BD:
            // Enum value XR_TYPE_SYSTEM_SPATIAL_PLANE_PROPERTIES_BD requires extension XR_BD_spatial_plane, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_plane")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPATIAL_PLANE_PROPERTIES_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_plane\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_PLANE_ORIENTATION_BD:
            // Enum value XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_PLANE_ORIENTATION_BD requires extension XR_BD_spatial_plane, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_plane")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_PLANE_ORIENTATION_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_plane\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SENSE_DATA_FILTER_PLANE_ORIENTATION_BD:
            // Enum value XR_TYPE_SENSE_DATA_FILTER_PLANE_ORIENTATION_BD requires extension XR_BD_spatial_plane, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_plane")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SENSE_DATA_FILTER_PLANE_ORIENTATION_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_plane\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_AUDIO_RENDERER_CREATE_INFO_BD:
            // Enum value XR_TYPE_SPATIAL_AUDIO_RENDERER_CREATE_INFO_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_AUDIO_RENDERER_CREATE_INFO_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_AUDIO_BUFFER_BD:
            // Enum value XR_TYPE_AUDIO_BUFFER_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_AUDIO_BUFFER_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_OBJECT_DIRECTIVITY_CARDIOID_BD:
            // Enum value XR_TYPE_SOUND_OBJECT_DIRECTIVITY_CARDIOID_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_OBJECT_DIRECTIVITY_CARDIOID_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_OBJECT_SHAPE_SPHERE_BD:
            // Enum value XR_TYPE_SOUND_OBJECT_SHAPE_SPHERE_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_OBJECT_SHAPE_SPHERE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_BD:
            // Enum value XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_CURVE_BD:
            // Enum value XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_CURVE_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_CURVE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_OBJECT_CONFIG_BD:
            // Enum value XR_TYPE_SOUND_OBJECT_CONFIG_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_OBJECT_CONFIG_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_FIELD_CONFIG_BD:
            // Enum value XR_TYPE_SOUND_FIELD_CONFIG_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_FIELD_CONFIG_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_SURROUND_BD:
            // Enum value XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_SURROUND_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_SURROUND_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_AMBIX_BD:
            // Enum value XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_AMBIX_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_AMBIX_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_FUMA_BD:
            // Enum value XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_FUMA_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_FUMA_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_TRIANGLE_MESH_BD:
            // Enum value XR_TYPE_SOUND_TRIANGLE_MESH_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_TRIANGLE_MESH_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_OBSTACLE_CONFIG_BD:
            // Enum value XR_TYPE_SOUND_OBSTACLE_CONFIG_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_OBSTACLE_CONFIG_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SOUND_OBSTACLE_MATERIAL_CONFIG_BD:
            // Enum value XR_TYPE_SOUND_OBSTACLE_MATERIAL_CONFIG_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SOUND_OBSTACLE_MATERIAL_CONFIG_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT:
            // Enum value XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT requires extension XR_EXT_hand_tracking_data_source, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking_data_source")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_hand_tracking_data_source\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT:
            // Enum value XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT requires extension XR_EXT_hand_tracking_data_source, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking_data_source")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_hand_tracking_data_source\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT:
            // Enum value XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT:
            // Enum value XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT:
            // Enum value XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT:
            // Enum value XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PLANE_DETECTOR_LOCATION_EXT:
            // Enum value XR_TYPE_PLANE_DETECTOR_LOCATION_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PLANE_DETECTOR_LOCATION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT:
            // Enum value XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT:
            // Enum value XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_GET_INFO_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_GET_INFO_ANDROID requires extension XR_ANDROID_trackables, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_GET_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID requires extension XR_ANDROID_trackables, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_PLANE_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_PLANE_ANDROID requires extension XR_ANDROID_trackables, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_PLANE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID requires extension XR_ANDROID_trackables, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_TRACKABLES_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_TRACKABLES_PROPERTIES_ANDROID requires extension XR_ANDROID_trackables, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_TRACKABLES_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EYES_ANDROID:
            // Enum value XR_TYPE_EYES_ANDROID requires extension XR_ANDROID_eye_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_eye_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EYES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_eye_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID requires extension XR_ANDROID_eye_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_eye_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_eye_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EYES_GET_INFO_ANDROID:
            // Enum value XR_TYPE_EYES_GET_INFO_ANDROID requires extension XR_ANDROID_eye_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_eye_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EYES_GET_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_eye_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID requires extension XR_ANDROID_eye_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_eye_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_eye_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID:
            // Enum value XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID requires extension XR_ANDROID_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_STATE_GET_INFO_ANDROID:
            // Enum value XR_TYPE_FACE_STATE_GET_INFO_ANDROID requires extension XR_ANDROID_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_STATE_GET_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_STATE_ANDROID:
            // Enum value XR_TYPE_FACE_STATE_ANDROID requires extension XR_ANDROID_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_STATE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID requires extension XR_ANDROID_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_CAMERA_STATE_GET_INFO_ANDROID:
            // Enum value XR_TYPE_PASSTHROUGH_CAMERA_STATE_GET_INFO_ANDROID requires extension XR_ANDROID_passthrough_camera_state, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_passthrough_camera_state")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_CAMERA_STATE_GET_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_passthrough_camera_state\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_PASSTHROUGH_CAMERA_STATE_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_PASSTHROUGH_CAMERA_STATE_PROPERTIES_ANDROID requires extension XR_ANDROID_passthrough_camera_state, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_passthrough_camera_state")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_PASSTHROUGH_CAMERA_STATE_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_passthrough_camera_state\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_RECOMMENDED_RESOLUTION_CHANGED_ANDROID:
            // Enum value XR_TYPE_EVENT_DATA_RECOMMENDED_RESOLUTION_CHANGED_ANDROID requires extension XR_ANDROID_recommended_resolution, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_recommended_resolution")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_RECOMMENDED_RESOLUTION_CHANGED_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_recommended_resolution\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID requires extension XR_ANDROID_composition_layer_passthrough_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_composition_layer_passthrough_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_composition_layer_passthrough_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID:
            // Enum value XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID requires extension XR_ANDROID_composition_layer_passthrough_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_composition_layer_passthrough_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_composition_layer_passthrough_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID:
            // Enum value XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID requires extension XR_ANDROID_composition_layer_passthrough_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_composition_layer_passthrough_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_composition_layer_passthrough_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID requires extension XR_ANDROID_composition_layer_passthrough_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_composition_layer_passthrough_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_composition_layer_passthrough_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RAYCAST_INFO_ANDROID:
            // Enum value XR_TYPE_RAYCAST_INFO_ANDROID requires extension XR_ANDROID_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RAYCAST_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID:
            // Enum value XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID requires extension XR_ANDROID_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID:
            // Enum value XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID requires extension XR_ANDROID_performance_metrics, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_performance_metrics")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_performance_metrics\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID:
            // Enum value XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID requires extension XR_ANDROID_performance_metrics, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_performance_metrics")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_performance_metrics\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_OBJECT_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_OBJECT_ANDROID requires extension XR_ANDROID_trackables_object, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_object")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_OBJECT_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_object\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID requires extension XR_ANDROID_trackables_object, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_object")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_object\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FUTURE_CANCEL_INFO_EXT:
            // Enum value XR_TYPE_FUTURE_CANCEL_INFO_EXT requires extension XR_EXT_future, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_future")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FUTURE_CANCEL_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_future\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FUTURE_POLL_INFO_EXT:
            // Enum value XR_TYPE_FUTURE_POLL_INFO_EXT requires extension XR_EXT_future, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_future")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FUTURE_POLL_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_future\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FUTURE_COMPLETION_EXT:
            // Enum value XR_TYPE_FUTURE_COMPLETION_EXT requires extension XR_EXT_future, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_future")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FUTURE_COMPLETION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_future\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FUTURE_POLL_RESULT_EXT:
            // Enum value XR_TYPE_FUTURE_POLL_RESULT_EXT requires extension XR_EXT_future, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_future")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FUTURE_POLL_RESULT_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_future\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT:
            // Enum value XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT requires extension XR_EXT_user_presence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_user_presence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_user_presence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_USER_PRESENCE_PROPERTIES_EXT:
            // Enum value XR_TYPE_SYSTEM_USER_PRESENCE_PROPERTIES_EXT requires extension XR_EXT_user_presence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_user_presence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_USER_PRESENCE_PROPERTIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_user_presence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_NOTIFICATIONS_SET_INFO_ML:
            // Enum value XR_TYPE_SYSTEM_NOTIFICATIONS_SET_INFO_ML requires extension XR_ML_system_notifications, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_system_notifications")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_NOTIFICATIONS_SET_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_system_notifications\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_DETECTOR_CREATE_INFO_ML:
            // Enum value XR_TYPE_WORLD_MESH_DETECTOR_CREATE_INFO_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_DETECTOR_CREATE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_STATE_REQUEST_INFO_ML:
            // Enum value XR_TYPE_WORLD_MESH_STATE_REQUEST_INFO_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_STATE_REQUEST_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_BLOCK_STATE_ML:
            // Enum value XR_TYPE_WORLD_MESH_BLOCK_STATE_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_BLOCK_STATE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML:
            // Enum value XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_BUFFER_RECOMMENDED_SIZE_INFO_ML:
            // Enum value XR_TYPE_WORLD_MESH_BUFFER_RECOMMENDED_SIZE_INFO_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_BUFFER_RECOMMENDED_SIZE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_BUFFER_SIZE_ML:
            // Enum value XR_TYPE_WORLD_MESH_BUFFER_SIZE_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_BUFFER_SIZE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_BUFFER_ML:
            // Enum value XR_TYPE_WORLD_MESH_BUFFER_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_BUFFER_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_BLOCK_REQUEST_ML:
            // Enum value XR_TYPE_WORLD_MESH_BLOCK_REQUEST_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_BLOCK_REQUEST_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_GET_INFO_ML:
            // Enum value XR_TYPE_WORLD_MESH_GET_INFO_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_GET_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_BLOCK_ML:
            // Enum value XR_TYPE_WORLD_MESH_BLOCK_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_BLOCK_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML:
            // Enum value XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_INFO_ML:
            // Enum value XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_INFO_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FACIAL_EXPRESSION_PROPERTIES_ML:
            // Enum value XR_TYPE_SYSTEM_FACIAL_EXPRESSION_PROPERTIES_ML requires extension XR_ML_facial_expression, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_facial_expression")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FACIAL_EXPRESSION_PROPERTIES_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_facial_expression\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACIAL_EXPRESSION_CLIENT_CREATE_INFO_ML:
            // Enum value XR_TYPE_FACIAL_EXPRESSION_CLIENT_CREATE_INFO_ML requires extension XR_ML_facial_expression, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_facial_expression")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACIAL_EXPRESSION_CLIENT_CREATE_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_facial_expression\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_GET_INFO_ML:
            // Enum value XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_GET_INFO_ML requires extension XR_ML_facial_expression, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_facial_expression")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_GET_INFO_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_facial_expression\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_ML:
            // Enum value XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_ML requires extension XR_ML_facial_expression, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_facial_expression")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_facial_expression\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_BOUNDARY_VISIBILITY_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_BOUNDARY_VISIBILITY_PROPERTIES_META requires extension XR_META_boundary_visibility, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_boundary_visibility")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_BOUNDARY_VISIBILITY_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_boundary_visibility\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_BOUNDARY_VISIBILITY_CHANGED_META:
            // Enum value XR_TYPE_EVENT_DATA_BOUNDARY_VISIBILITY_CHANGED_META requires extension XR_META_boundary_visibility, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_boundary_visibility")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_BOUNDARY_VISIBILITY_CHANGED_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_boundary_visibility\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SIMULTANEOUS_HANDS_AND_CONTROLLERS_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_SIMULTANEOUS_HANDS_AND_CONTROLLERS_PROPERTIES_META requires extension XR_META_simultaneous_hands_and_controllers, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_simultaneous_hands_and_controllers")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SIMULTANEOUS_HANDS_AND_CONTROLLERS_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_simultaneous_hands_and_controllers\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_RESUME_INFO_META:
            // Enum value XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_RESUME_INFO_META requires extension XR_META_simultaneous_hands_and_controllers, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_simultaneous_hands_and_controllers")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_RESUME_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_simultaneous_hands_and_controllers\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_PAUSE_INFO_META:
            // Enum value XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_PAUSE_INFO_META requires extension XR_META_simultaneous_hands_and_controllers, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_simultaneous_hands_and_controllers")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_PAUSE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_simultaneous_hands_and_controllers\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_FACE_TRACKING_VISEMES_META:
            // Enum value XR_TYPE_FACE_TRACKING_VISEMES_META requires extension XR_META_face_tracking_visemes, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_face_tracking_visemes")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_FACE_TRACKING_VISEMES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_face_tracking_visemes\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_FACE_TRACKING_VISEMES_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_FACE_TRACKING_VISEMES_PROPERTIES_META requires extension XR_META_face_tracking_visemes, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_face_tracking_visemes")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_FACE_TRACKING_VISEMES_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_face_tracking_visemes\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ROOM_MESH_FACE_INDICES_META:
            // Enum value XR_TYPE_ROOM_MESH_FACE_INDICES_META requires extension XR_META_spatial_entity_room_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_room_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ROOM_MESH_FACE_INDICES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_room_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_ROOM_MESH_GET_INFO_META:
            // Enum value XR_TYPE_SPACE_ROOM_MESH_GET_INFO_META requires extension XR_META_spatial_entity_room_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_room_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_ROOM_MESH_GET_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_room_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ROOM_MESH_META:
            // Enum value XR_TYPE_ROOM_MESH_META requires extension XR_META_spatial_entity_room_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_room_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ROOM_MESH_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_room_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COLOCATION_DISCOVERY_START_INFO_META:
            // Enum value XR_TYPE_COLOCATION_DISCOVERY_START_INFO_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COLOCATION_DISCOVERY_START_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COLOCATION_DISCOVERY_STOP_INFO_META:
            // Enum value XR_TYPE_COLOCATION_DISCOVERY_STOP_INFO_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COLOCATION_DISCOVERY_STOP_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COLOCATION_ADVERTISEMENT_START_INFO_META:
            // Enum value XR_TYPE_COLOCATION_ADVERTISEMENT_START_INFO_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COLOCATION_ADVERTISEMENT_START_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_COLOCATION_ADVERTISEMENT_STOP_INFO_META:
            // Enum value XR_TYPE_COLOCATION_ADVERTISEMENT_STOP_INFO_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_COLOCATION_ADVERTISEMENT_STOP_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_START_COLOCATION_ADVERTISEMENT_COMPLETE_META:
            // Enum value XR_TYPE_EVENT_DATA_START_COLOCATION_ADVERTISEMENT_COMPLETE_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_START_COLOCATION_ADVERTISEMENT_COMPLETE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_STOP_COLOCATION_ADVERTISEMENT_COMPLETE_META:
            // Enum value XR_TYPE_EVENT_DATA_STOP_COLOCATION_ADVERTISEMENT_COMPLETE_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_STOP_COLOCATION_ADVERTISEMENT_COMPLETE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_COLOCATION_ADVERTISEMENT_COMPLETE_META:
            // Enum value XR_TYPE_EVENT_DATA_COLOCATION_ADVERTISEMENT_COMPLETE_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_COLOCATION_ADVERTISEMENT_COMPLETE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_START_COLOCATION_DISCOVERY_COMPLETE_META:
            // Enum value XR_TYPE_EVENT_DATA_START_COLOCATION_DISCOVERY_COMPLETE_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_START_COLOCATION_DISCOVERY_COMPLETE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_RESULT_META:
            // Enum value XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_RESULT_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_RESULT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_COMPLETE_META:
            // Enum value XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_COMPLETE_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_COMPLETE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_STOP_COLOCATION_DISCOVERY_COMPLETE_META:
            // Enum value XR_TYPE_EVENT_DATA_STOP_COLOCATION_DISCOVERY_COMPLETE_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_STOP_COLOCATION_DISCOVERY_COMPLETE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_COLOCATION_DISCOVERY_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_COLOCATION_DISCOVERY_PROPERTIES_META requires extension XR_META_colocation_discovery, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_COLOCATION_DISCOVERY_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META:
            // Enum value XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META requires extension XR_META_spatial_entity_group_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_group_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_group_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPACE_GROUP_UUID_FILTER_INFO_META:
            // Enum value XR_TYPE_SPACE_GROUP_UUID_FILTER_INFO_META requires extension XR_META_spatial_entity_group_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_group_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPACE_GROUP_UUID_FILTER_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_group_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SPATIAL_ENTITY_GROUP_SHARING_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_SPATIAL_ENTITY_GROUP_SHARING_PROPERTIES_META requires extension XR_META_spatial_entity_group_sharing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_group_sharing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SPATIAL_ENTITY_GROUP_SHARING_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_group_sharing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_ENVIRONMENT_RAYCAST_PROPERTIES_META:
            // Enum value XR_TYPE_SYSTEM_ENVIRONMENT_RAYCAST_PROPERTIES_META requires extension XR_META_environment_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_ENVIRONMENT_RAYCAST_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_INFO_META:
            // Enum value XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_INFO_META requires extension XR_META_environment_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_COMPLETION_META:
            // Enum value XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_COMPLETION_META requires extension XR_META_environment_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_COMPLETION_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_RAYCAST_HIT_GET_INFO_META:
            // Enum value XR_TYPE_ENVIRONMENT_RAYCAST_HIT_GET_INFO_META requires extension XR_META_environment_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_RAYCAST_HIT_GET_INFO_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_RAYCAST_HIT_META:
            // Enum value XR_TYPE_ENVIRONMENT_RAYCAST_HIT_META requires extension XR_META_environment_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_RAYCAST_HIT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META:
            // Enum value XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META requires extension XR_META_environment_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TILE_PROPERTIES_META:
            // Enum value XR_TYPE_TILE_PROPERTIES_META requires extension XR_META_tile_properties_hint, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_tile_properties_hint")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TILE_PROPERTIES_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_tile_properties_hint\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TILE_PROPERTIES_HINT_META:
            // Enum value XR_TYPE_TILE_PROPERTIES_HINT_META requires extension XR_META_tile_properties_hint, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_tile_properties_hint")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TILE_PROPERTIES_HINT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_tile_properties_hint\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID requires extension XR_ANDROID_light_estimation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID:
            // Enum value XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID requires extension XR_ANDROID_light_estimation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LIGHT_ESTIMATE_ANDROID:
            // Enum value XR_TYPE_LIGHT_ESTIMATE_ANDROID requires extension XR_ANDROID_light_estimation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LIGHT_ESTIMATE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_DIRECTIONAL_LIGHT_ANDROID:
            // Enum value XR_TYPE_DIRECTIONAL_LIGHT_ANDROID requires extension XR_ANDROID_light_estimation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_DIRECTIONAL_LIGHT_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPHERICAL_HARMONICS_ANDROID:
            // Enum value XR_TYPE_SPHERICAL_HARMONICS_ANDROID requires extension XR_ANDROID_light_estimation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPHERICAL_HARMONICS_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_AMBIENT_LIGHT_ANDROID:
            // Enum value XR_TYPE_AMBIENT_LIGHT_ANDROID requires extension XR_ANDROID_light_estimation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_AMBIENT_LIGHT_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID requires extension XR_ANDROID_light_estimation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ANCHOR_SHARING_INFO_ANDROID:
            // Enum value XR_TYPE_ANCHOR_SHARING_INFO_ANDROID requires extension XR_ANDROID_anchor_sharing_export, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_anchor_sharing_export")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ANCHOR_SHARING_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_anchor_sharing_export\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_ANCHOR_SHARING_TOKEN_ANDROID:
            // Enum value XR_TYPE_ANCHOR_SHARING_TOKEN_ANDROID requires extension XR_ANDROID_anchor_sharing_export, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_anchor_sharing_export")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_ANCHOR_SHARING_TOKEN_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_anchor_sharing_export\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_ANCHOR_SHARING_EXPORT_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_ANCHOR_SHARING_EXPORT_PROPERTIES_ANDROID requires extension XR_ANDROID_anchor_sharing_export, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_anchor_sharing_export")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_ANCHOR_SHARING_EXPORT_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_anchor_sharing_export\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID requires extension XR_ANDROID_trackables_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID requires extension XR_ANDROID_trackables_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_MARKER_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_MARKER_ANDROID requires extension XR_ANDROID_trackables_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_MARKER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID requires extension XR_ANDROID_trackables_qr_code, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_qr_code")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_qr_code\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID requires extension XR_ANDROID_trackables_qr_code, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_qr_code")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_qr_code\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_QR_CODE_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_QR_CODE_ANDROID requires extension XR_ANDROID_trackables_qr_code, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_qr_code")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_QR_CODE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_qr_code\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID:
            // Enum value XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_TRACKABLE_IMAGE_ANDROID:
            // Enum value XR_TYPE_TRACKABLE_IMAGE_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_TRACKABLE_IMAGE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID:
            // Enum value XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID:
            // Enum value XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID requires extension XR_ANDROID_scene_meshing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID requires extension XR_ANDROID_scene_meshing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID requires extension XR_ANDROID_scene_meshing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID:
            // Enum value XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID requires extension XR_ANDROID_scene_meshing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_SUBMESH_STATE_ANDROID:
            // Enum value XR_TYPE_SCENE_SUBMESH_STATE_ANDROID requires extension XR_ANDROID_scene_meshing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_SUBMESH_STATE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SCENE_SUBMESH_DATA_ANDROID:
            // Enum value XR_TYPE_SCENE_SUBMESH_DATA_ANDROID requires extension XR_ANDROID_scene_meshing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SCENE_SUBMESH_DATA_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT:
            // Enum value XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT:
            // Enum value XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT:
            // Enum value XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT:
            // Enum value XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT:
            // Enum value XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT:
            // Enum value XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT:
            // Enum value XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT:
            // Enum value XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT:
            // Enum value XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT:
            // Enum value XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT:
            // Enum value XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT:
            // Enum value XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_GET_INFO_EXT:
            // Enum value XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_GET_INFO_EXT requires extension XR_EXT_stationary_reference_space, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_stationary_reference_space")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_GET_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_stationary_reference_space\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_RESULT_EXT:
            // Enum value XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_RESULT_EXT requires extension XR_EXT_stationary_reference_space, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_stationary_reference_space")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_RESULT_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_stationary_reference_space\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT:
            // Enum value XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT:
            // Enum value XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT:
            // Enum value XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT:
            // Enum value XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_MARKER_SIZE_EXT:
            // Enum value XR_TYPE_SPATIAL_MARKER_SIZE_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_MARKER_SIZE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT:
            // Enum value XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT:
            // Enum value XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT requires extension XR_EXT_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_ANCHOR_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_ANCHOR_LIST_EXT requires extension XR_EXT_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_ANCHOR_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT requires extension XR_EXT_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_PERSISTENCE_CONTEXT_CREATE_INFO_EXT:
            // Enum value XR_TYPE_SPATIAL_PERSISTENCE_CONTEXT_CREATE_INFO_EXT requires extension XR_EXT_spatial_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_PERSISTENCE_CONTEXT_CREATE_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT:
            // Enum value XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT requires extension XR_EXT_spatial_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CONTEXT_PERSISTENCE_CONFIG_EXT:
            // Enum value XR_TYPE_SPATIAL_CONTEXT_PERSISTENCE_CONFIG_EXT requires extension XR_EXT_spatial_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CONTEXT_PERSISTENCE_CONFIG_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_DISCOVERY_PERSISTENCE_UUID_FILTER_EXT:
            // Enum value XR_TYPE_SPATIAL_DISCOVERY_PERSISTENCE_UUID_FILTER_EXT requires extension XR_EXT_spatial_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_DISCOVERY_PERSISTENCE_UUID_FILTER_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_PERSISTENCE_LIST_EXT:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_PERSISTENCE_LIST_EXT requires extension XR_EXT_spatial_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_PERSISTENCE_LIST_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT:
            // Enum value XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT requires extension XR_EXT_haptic_parametric, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_haptic_parametric")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_haptic_parametric\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_HAPTIC_PARAMETRIC_PROPERTIES_EXT:
            // Enum value XR_TYPE_HAPTIC_PARAMETRIC_PROPERTIES_EXT requires extension XR_EXT_haptic_parametric, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_haptic_parametric")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_HAPTIC_PARAMETRIC_PROPERTIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_haptic_parametric\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SYSTEM_HAPTIC_PARAMETRIC_PROPERTIES_EXT:
            // Enum value XR_TYPE_SYSTEM_HAPTIC_PARAMETRIC_PROPERTIES_EXT requires extension XR_EXT_haptic_parametric, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_haptic_parametric")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SYSTEM_HAPTIC_PARAMETRIC_PROPERTIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_haptic_parametric\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_PERSIST_INFO_EXT:
            // Enum value XR_TYPE_SPATIAL_ENTITY_PERSIST_INFO_EXT requires extension XR_EXT_spatial_persistence_operations, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_PERSIST_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT:
            // Enum value XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT requires extension XR_EXT_spatial_persistence_operations, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ENTITY_UNPERSIST_INFO_EXT:
            // Enum value XR_TYPE_SPATIAL_ENTITY_UNPERSIST_INFO_EXT requires extension XR_EXT_spatial_persistence_operations, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ENTITY_UNPERSIST_INFO_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT:
            // Enum value XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT requires extension XR_EXT_spatial_persistence_operations, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID:
            // Enum value XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID requires extension XR_ANDROID_spatial_object_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_object_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_object_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID requires extension XR_ANDROID_spatial_object_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_object_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_object_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID:
            // Enum value XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID requires extension XR_ANDROID_spatial_discovery_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_discovery_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_discovery_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID:
            // Enum value XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID requires extension XR_ANDROID_spatial_discovery_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_discovery_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_discovery_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID requires extension XR_ANDROID_spatial_discovery_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_discovery_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_discovery_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID requires extension XR_ANDROID_spatial_discovery_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_discovery_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_discovery_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID requires extension XR_ANDROID_spatial_entity_bound_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_entity_bound_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_entity_bound_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID:
            // Enum value XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID requires extension XR_ANDROID_spatial_component_subsumed_by, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_component_subsumed_by")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_component_subsumed_by\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID:
            // Enum value XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID requires extension XR_ANDROID_spatial_component_subsumed_by, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_component_subsumed_by")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_component_subsumed_by\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID:
            // Enum value XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID requires extension XR_ANDROID_spatial_anchor_space, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_anchor_space")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_anchor_space\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_BATTERY_STATE_DISPLAY_EXT:
            // Enum value XR_TYPE_BATTERY_STATE_DISPLAY_EXT requires extension XR_EXT_interaction_profile_battery_state_display, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_interaction_profile_battery_state_display")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_BATTERY_STATE_DISPLAY_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_interaction_profile_battery_state_display\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT:
            // Enum value XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT requires extension XR_EXT_loader_init_properties, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_loader_init_properties")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_loader_init_properties\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TYPE_EVENT_DATA_VIEW_CONFIGURATION_VIEWS_CHANGED_EXT:
            // Enum value XR_TYPE_EVENT_DATA_VIEW_CONFIGURATION_VIEWS_CHANGED_EXT requires extension XR_EXT_view_configuration_views_change, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_view_configuration_views_change")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrStructureType value \"XR_TYPE_EVENT_DATA_VIEW_CONFIGURATION_VIEWS_CHANGED_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_view_configuration_views_change\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrFormFactor enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFormFactor value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY:
            return true;
        case XR_FORM_FACTOR_HANDHELD_DISPLAY:
            return true;
    default:
        return false;
}
}

// Function to validate XrViewConfigurationType enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrViewConfigurationType value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO:
            return true;
        case XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO:
            return true;
        case XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO_WITH_FOVEATED_INSET:
            return true;
        case XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT:
            // Enum value XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT requires extension XR_MSFT_first_person_observer, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_first_person_observer")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrViewConfigurationType value \"XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_first_person_observer\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrEnvironmentBlendMode enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrEnvironmentBlendMode value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_ENVIRONMENT_BLEND_MODE_OPAQUE:
            return true;
        case XR_ENVIRONMENT_BLEND_MODE_ADDITIVE:
            return true;
        case XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND:
            return true;
    default:
        return false;
}
}

// Function to validate XrReferenceSpaceType enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrReferenceSpaceType value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_REFERENCE_SPACE_TYPE_VIEW:
            return true;
        case XR_REFERENCE_SPACE_TYPE_LOCAL:
            return true;
        case XR_REFERENCE_SPACE_TYPE_STAGE:
            return true;
        case XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR:
            return true;
        case XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT:
            // Enum value XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT requires extension XR_MSFT_unbounded_reference_space, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_unbounded_reference_space")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrReferenceSpaceType value \"XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_unbounded_reference_space\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO:
            // Enum value XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO requires extension XR_VARJO_foveated_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_foveated_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrReferenceSpaceType value \"XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_VARJO_foveated_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_REFERENCE_SPACE_TYPE_LOCALIZATION_MAP_ML:
            // Enum value XR_REFERENCE_SPACE_TYPE_LOCALIZATION_MAP_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrReferenceSpaceType value \"XR_REFERENCE_SPACE_TYPE_LOCALIZATION_MAP_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID:
            // Enum value XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID requires extension XR_ANDROID_unbounded_reference_space, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_unbounded_reference_space")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrReferenceSpaceType value \"XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_unbounded_reference_space\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_REFERENCE_SPACE_TYPE_STATIONARY_EXT:
            // Enum value XR_REFERENCE_SPACE_TYPE_STATIONARY_EXT requires extension XR_EXT_stationary_reference_space, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_stationary_reference_space")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrReferenceSpaceType value \"XR_REFERENCE_SPACE_TYPE_STATIONARY_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_stationary_reference_space\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrActionType enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrActionType value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_ACTION_TYPE_BOOLEAN_INPUT:
            return true;
        case XR_ACTION_TYPE_FLOAT_INPUT:
            return true;
        case XR_ACTION_TYPE_VECTOR2F_INPUT:
            return true;
        case XR_ACTION_TYPE_POSE_INPUT:
            return true;
        case XR_ACTION_TYPE_VIBRATION_OUTPUT:
            return true;
    default:
        return false;
}
}

// Function to validate XrEyeVisibility enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrEyeVisibility value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_EYE_VISIBILITY_BOTH:
            return true;
        case XR_EYE_VISIBILITY_LEFT:
            return true;
        case XR_EYE_VISIBILITY_RIGHT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSessionState enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSessionState value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_SESSION_STATE_UNKNOWN:
            return true;
        case XR_SESSION_STATE_IDLE:
            return true;
        case XR_SESSION_STATE_READY:
            return true;
        case XR_SESSION_STATE_SYNCHRONIZED:
            return true;
        case XR_SESSION_STATE_VISIBLE:
            return true;
        case XR_SESSION_STATE_FOCUSED:
            return true;
        case XR_SESSION_STATE_STOPPING:
            return true;
        case XR_SESSION_STATE_LOSS_PENDING:
            return true;
        case XR_SESSION_STATE_EXITING:
            return true;
    default:
        return false;
}
}

// Function to validate XrObjectType enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrObjectType value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    switch (value) {
        case XR_OBJECT_TYPE_UNKNOWN:
            return true;
        case XR_OBJECT_TYPE_INSTANCE:
            return true;
        case XR_OBJECT_TYPE_SESSION:
            return true;
        case XR_OBJECT_TYPE_SWAPCHAIN:
            return true;
        case XR_OBJECT_TYPE_SPACE:
            return true;
        case XR_OBJECT_TYPE_ACTION_SET:
            return true;
        case XR_OBJECT_TYPE_ACTION:
            return true;
        case XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT:
            // Enum value XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT requires extension XR_EXT_debug_utils, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_debug_utils")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_debug_utils\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT:
            // Enum value XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT requires extension XR_MSFT_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT:
            // Enum value XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT requires extension XR_MSFT_spatial_graph_bridge, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_graph_bridge")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_graph_bridge\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_HAND_TRACKER_EXT:
            // Enum value XR_OBJECT_TYPE_HAND_TRACKER_EXT requires extension XR_EXT_hand_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_HAND_TRACKER_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_hand_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_BODY_TRACKER_FB:
            // Enum value XR_OBJECT_TYPE_BODY_TRACKER_FB requires extension XR_FB_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_BODY_TRACKER_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT:
            // Enum value XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SCENE_MSFT:
            // Enum value XR_OBJECT_TYPE_SCENE_MSFT requires extension XR_MSFT_scene_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SCENE_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_FACIAL_TRACKER_HTC:
            // Enum value XR_OBJECT_TYPE_FACIAL_TRACKER_HTC requires extension XR_HTC_facial_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_facial_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_FACIAL_TRACKER_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_facial_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_FOVEATION_PROFILE_FB:
            // Enum value XR_OBJECT_TYPE_FOVEATION_PROFILE_FB requires extension XR_FB_foveation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_foveation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_FOVEATION_PROFILE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_foveation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_TRIANGLE_MESH_FB:
            // Enum value XR_OBJECT_TYPE_TRIANGLE_MESH_FB requires extension XR_FB_triangle_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_triangle_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_TRIANGLE_MESH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_triangle_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_PASSTHROUGH_FB:
            // Enum value XR_OBJECT_TYPE_PASSTHROUGH_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_PASSTHROUGH_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB:
            // Enum value XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB:
            // Enum value XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB requires extension XR_FB_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_MARKER_DETECTOR_ML:
            // Enum value XR_OBJECT_TYPE_MARKER_DETECTOR_ML requires extension XR_ML_marker_understanding, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_MARKER_DETECTOR_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_EXPORTED_LOCALIZATION_MAP_ML:
            // Enum value XR_OBJECT_TYPE_EXPORTED_LOCALIZATION_MAP_ML requires extension XR_ML_localization_map, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_EXPORTED_LOCALIZATION_MAP_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML:
            // Enum value XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML requires extension XR_ML_spatial_anchors_storage, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT:
            // Enum value XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT requires extension XR_MSFT_spatial_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_spatial_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_FACE_TRACKER_FB:
            // Enum value XR_OBJECT_TYPE_FACE_TRACKER_FB requires extension XR_FB_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_FACE_TRACKER_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_EYE_TRACKER_FB:
            // Enum value XR_OBJECT_TYPE_EYE_TRACKER_FB requires extension XR_FB_eye_tracking_social, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_eye_tracking_social")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_EYE_TRACKER_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_eye_tracking_social\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META:
            // Enum value XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META requires extension XR_META_virtual_keyboard, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPACE_USER_FB:
            // Enum value XR_OBJECT_TYPE_SPACE_USER_FB requires extension XR_FB_spatial_entity_user, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_user")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPACE_USER_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_spatial_entity_user\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_PASSTHROUGH_COLOR_LUT_META:
            // Enum value XR_OBJECT_TYPE_PASSTHROUGH_COLOR_LUT_META requires extension XR_META_passthrough_color_lut, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_color_lut")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_PASSTHROUGH_COLOR_LUT_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_passthrough_color_lut\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_FACE_TRACKER2_FB:
            // Enum value XR_OBJECT_TYPE_FACE_TRACKER2_FB requires extension XR_FB_face_tracking2, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking2")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_FACE_TRACKER2_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_face_tracking2\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META:
            // Enum value XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_META:
            // Enum value XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_META requires extension XR_META_environment_depth, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_depth")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_depth\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_RENDER_MODEL_EXT:
            // Enum value XR_OBJECT_TYPE_RENDER_MODEL_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_RENDER_MODEL_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_RENDER_MODEL_ASSET_EXT:
            // Enum value XR_OBJECT_TYPE_RENDER_MODEL_ASSET_EXT requires extension XR_EXT_render_model, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_render_model")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_RENDER_MODEL_ASSET_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_render_model\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_PASSTHROUGH_HTC:
            // Enum value XR_OBJECT_TYPE_PASSTHROUGH_HTC requires extension XR_HTC_passthrough, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_passthrough")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_PASSTHROUGH_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_passthrough\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_BODY_TRACKER_HTC:
            // Enum value XR_OBJECT_TYPE_BODY_TRACKER_HTC requires extension XR_HTC_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_BODY_TRACKER_HTC\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_HTC_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_BODY_TRACKER_BD:
            // Enum value XR_OBJECT_TYPE_BODY_TRACKER_BD requires extension XR_BD_body_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_body_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_BODY_TRACKER_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_body_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_FACE_TRACKER_BD:
            // Enum value XR_OBJECT_TYPE_FACE_TRACKER_BD requires extension XR_BD_facial_simulation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_facial_simulation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_FACE_TRACKER_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_facial_simulation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD:
            // Enum value XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD:
            // Enum value XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_ANCHOR_BD:
            // Enum value XR_OBJECT_TYPE_ANCHOR_BD requires extension XR_BD_spatial_sensing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_ANCHOR_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD:
            // Enum value XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SOUND_FIELD_BD:
            // Enum value XR_OBJECT_TYPE_SOUND_FIELD_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SOUND_FIELD_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SOUND_OBJECT_BD:
            // Enum value XR_OBJECT_TYPE_SOUND_OBJECT_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SOUND_OBJECT_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SOUND_OBSTACLE_BD:
            // Enum value XR_OBJECT_TYPE_SOUND_OBSTACLE_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SOUND_OBSTACLE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SOUND_OBSTACLE_MATERIAL_BD:
            // Enum value XR_OBJECT_TYPE_SOUND_OBSTACLE_MATERIAL_BD requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SOUND_OBSTACLE_MATERIAL_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_PLANE_DETECTOR_EXT:
            // Enum value XR_OBJECT_TYPE_PLANE_DETECTOR_EXT requires extension XR_EXT_plane_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_PLANE_DETECTOR_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID:
            // Enum value XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID requires extension XR_ANDROID_trackables, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_EYE_TRACKER_ANDROID:
            // Enum value XR_OBJECT_TYPE_EYE_TRACKER_ANDROID requires extension XR_ANDROID_eye_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_eye_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_EYE_TRACKER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_eye_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID:
            // Enum value XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_FACE_TRACKER_ANDROID:
            // Enum value XR_OBJECT_TYPE_FACE_TRACKER_ANDROID requires extension XR_ANDROID_face_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_face_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_FACE_TRACKER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_face_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_PASSTHROUGH_LAYER_ANDROID:
            // Enum value XR_OBJECT_TYPE_PASSTHROUGH_LAYER_ANDROID requires extension XR_ANDROID_composition_layer_passthrough_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_composition_layer_passthrough_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_PASSTHROUGH_LAYER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_composition_layer_passthrough_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML:
            // Enum value XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML requires extension XR_ML_world_mesh_detection, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_FACIAL_EXPRESSION_CLIENT_ML:
            // Enum value XR_OBJECT_TYPE_FACIAL_EXPRESSION_CLIENT_ML requires extension XR_ML_facial_expression, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_facial_expression")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_FACIAL_EXPRESSION_CLIENT_ML\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ML_facial_expression\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_ENVIRONMENT_RAYCASTER_META:
            // Enum value XR_OBJECT_TYPE_ENVIRONMENT_RAYCASTER_META requires extension XR_META_environment_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_ENVIRONMENT_RAYCASTER_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID:
            // Enum value XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID requires extension XR_ANDROID_light_estimation, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID:
            // Enum value XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID:
            // Enum value XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID requires extension XR_ANDROID_scene_meshing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID:
            // Enum value XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID requires extension XR_ANDROID_scene_meshing, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT:
            // Enum value XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT:
            // Enum value XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT:
            // Enum value XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT requires extension XR_EXT_spatial_entity, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT:
            // Enum value XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT requires extension XR_EXT_spatial_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrObjectType value \"XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

#if defined(XR_USE_PLATFORM_ANDROID)
// Function to validate XrAndroidThreadTypeKHR enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrAndroidThreadTypeKHR value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_KHR_android_thread_settings, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_android_thread_settings")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrAndroidThreadTypeKHR requires extension ";
        error_str += " \"XR_KHR_android_thread_settings\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_ANDROID_THREAD_TYPE_APPLICATION_MAIN_KHR:
            return true;
        case XR_ANDROID_THREAD_TYPE_APPLICATION_WORKER_KHR:
            return true;
        case XR_ANDROID_THREAD_TYPE_RENDERER_MAIN_KHR:
            return true;
        case XR_ANDROID_THREAD_TYPE_RENDERER_WORKER_KHR:
            return true;
    default:
        return false;
}
}

#endif // defined(XR_USE_PLATFORM_ANDROID)
// Function to validate XrVisibilityMaskTypeKHR enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrVisibilityMaskTypeKHR value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_KHR_visibility_mask, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_visibility_mask")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrVisibilityMaskTypeKHR requires extension ";
        error_str += " \"XR_KHR_visibility_mask\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH_KHR:
            return true;
        case XR_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH_KHR:
            return true;
        case XR_VISIBILITY_MASK_TYPE_LINE_LOOP_KHR:
            return true;
    default:
        return false;
}
}

// Function to validate XrPerfSettingsDomainEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPerfSettingsDomainEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_performance_settings, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_performance_settings")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPerfSettingsDomainEXT requires extension ";
        error_str += " \"XR_EXT_performance_settings\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PERF_SETTINGS_DOMAIN_CPU_EXT:
            return true;
        case XR_PERF_SETTINGS_DOMAIN_GPU_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrPerfSettingsSubDomainEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPerfSettingsSubDomainEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_performance_settings, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_performance_settings")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPerfSettingsSubDomainEXT requires extension ";
        error_str += " \"XR_EXT_performance_settings\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PERF_SETTINGS_SUB_DOMAIN_COMPOSITING_EXT:
            return true;
        case XR_PERF_SETTINGS_SUB_DOMAIN_RENDERING_EXT:
            return true;
        case XR_PERF_SETTINGS_SUB_DOMAIN_THERMAL_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrPerfSettingsLevelEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPerfSettingsLevelEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_performance_settings, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_performance_settings")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPerfSettingsLevelEXT requires extension ";
        error_str += " \"XR_EXT_performance_settings\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PERF_SETTINGS_LEVEL_POWER_SAVINGS_EXT:
            return true;
        case XR_PERF_SETTINGS_LEVEL_SUSTAINED_LOW_EXT:
            return true;
        case XR_PERF_SETTINGS_LEVEL_SUSTAINED_HIGH_EXT:
            return true;
        case XR_PERF_SETTINGS_LEVEL_BOOST_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrPerfSettingsNotificationLevelEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPerfSettingsNotificationLevelEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_performance_settings, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_performance_settings")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPerfSettingsNotificationLevelEXT requires extension ";
        error_str += " \"XR_EXT_performance_settings\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PERF_SETTINGS_NOTIF_LEVEL_NORMAL_EXT:
            return true;
        case XR_PERF_SETTINGS_NOTIF_LEVEL_WARNING_EXT:
            return true;
        case XR_PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrBlendFactorFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBlendFactorFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_composition_layer_alpha_blend, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_composition_layer_alpha_blend")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBlendFactorFB requires extension ";
        error_str += " \"XR_FB_composition_layer_alpha_blend\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BLEND_FACTOR_ZERO_FB:
            return true;
        case XR_BLEND_FACTOR_ONE_FB:
            return true;
        case XR_BLEND_FACTOR_SRC_ALPHA_FB:
            return true;
        case XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB:
            return true;
        case XR_BLEND_FACTOR_DST_ALPHA_FB:
            return true;
        case XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialGraphNodeTypeMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialGraphNodeTypeMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_spatial_graph_bridge, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_spatial_graph_bridge")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialGraphNodeTypeMSFT requires extension ";
        error_str += " \"XR_MSFT_spatial_graph_bridge\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT:
            return true;
        case XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrHandEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHandEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_hand_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHandEXT requires extension ";
        error_str += " \"XR_EXT_hand_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HAND_LEFT_EXT:
            return true;
        case XR_HAND_RIGHT_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrHandJointEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHandJointEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_hand_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHandJointEXT requires extension ";
        error_str += " \"XR_EXT_hand_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HAND_JOINT_PALM_EXT:
            return true;
        case XR_HAND_JOINT_WRIST_EXT:
            return true;
        case XR_HAND_JOINT_THUMB_METACARPAL_EXT:
            return true;
        case XR_HAND_JOINT_THUMB_PROXIMAL_EXT:
            return true;
        case XR_HAND_JOINT_THUMB_DISTAL_EXT:
            return true;
        case XR_HAND_JOINT_THUMB_TIP_EXT:
            return true;
        case XR_HAND_JOINT_INDEX_METACARPAL_EXT:
            return true;
        case XR_HAND_JOINT_INDEX_PROXIMAL_EXT:
            return true;
        case XR_HAND_JOINT_INDEX_INTERMEDIATE_EXT:
            return true;
        case XR_HAND_JOINT_INDEX_DISTAL_EXT:
            return true;
        case XR_HAND_JOINT_INDEX_TIP_EXT:
            return true;
        case XR_HAND_JOINT_MIDDLE_METACARPAL_EXT:
            return true;
        case XR_HAND_JOINT_MIDDLE_PROXIMAL_EXT:
            return true;
        case XR_HAND_JOINT_MIDDLE_INTERMEDIATE_EXT:
            return true;
        case XR_HAND_JOINT_MIDDLE_DISTAL_EXT:
            return true;
        case XR_HAND_JOINT_MIDDLE_TIP_EXT:
            return true;
        case XR_HAND_JOINT_RING_METACARPAL_EXT:
            return true;
        case XR_HAND_JOINT_RING_PROXIMAL_EXT:
            return true;
        case XR_HAND_JOINT_RING_INTERMEDIATE_EXT:
            return true;
        case XR_HAND_JOINT_RING_DISTAL_EXT:
            return true;
        case XR_HAND_JOINT_RING_TIP_EXT:
            return true;
        case XR_HAND_JOINT_LITTLE_METACARPAL_EXT:
            return true;
        case XR_HAND_JOINT_LITTLE_PROXIMAL_EXT:
            return true;
        case XR_HAND_JOINT_LITTLE_INTERMEDIATE_EXT:
            return true;
        case XR_HAND_JOINT_LITTLE_DISTAL_EXT:
            return true;
        case XR_HAND_JOINT_LITTLE_TIP_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrHandJointSetEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHandJointSetEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_hand_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHandJointSetEXT requires extension ";
        error_str += " \"XR_EXT_hand_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HAND_JOINT_SET_DEFAULT_EXT:
            return true;
        case XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP:
            // Enum value XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP requires extension XR_ULTRALEAP_hand_tracking_forearm, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ULTRALEAP_hand_tracking_forearm")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrHandJointSetEXT value \"XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ULTRALEAP_hand_tracking_forearm\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrHandPoseTypeMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHandPoseTypeMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_hand_tracking_mesh, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_hand_tracking_mesh")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHandPoseTypeMSFT requires extension ";
        error_str += " \"XR_MSFT_hand_tracking_mesh\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HAND_POSE_TYPE_TRACKED_MSFT:
            return true;
        case XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrReprojectionModeMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrReprojectionModeMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_composition_layer_reprojection, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_composition_layer_reprojection")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrReprojectionModeMSFT requires extension ";
        error_str += " \"XR_MSFT_composition_layer_reprojection\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_REPROJECTION_MODE_DEPTH_MSFT:
            return true;
        case XR_REPROJECTION_MODE_PLANAR_FROM_DEPTH_MSFT:
            return true;
        case XR_REPROJECTION_MODE_PLANAR_MANUAL_MSFT:
            return true;
        case XR_REPROJECTION_MODE_ORIENTATION_ONLY_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrBodyJointFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBodyJointFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_body_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_body_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBodyJointFB requires extension ";
        error_str += " \"XR_FB_body_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BODY_JOINT_ROOT_FB:
            return true;
        case XR_BODY_JOINT_HIPS_FB:
            return true;
        case XR_BODY_JOINT_SPINE_LOWER_FB:
            return true;
        case XR_BODY_JOINT_SPINE_MIDDLE_FB:
            return true;
        case XR_BODY_JOINT_SPINE_UPPER_FB:
            return true;
        case XR_BODY_JOINT_CHEST_FB:
            return true;
        case XR_BODY_JOINT_NECK_FB:
            return true;
        case XR_BODY_JOINT_HEAD_FB:
            return true;
        case XR_BODY_JOINT_LEFT_SHOULDER_FB:
            return true;
        case XR_BODY_JOINT_LEFT_SCAPULA_FB:
            return true;
        case XR_BODY_JOINT_LEFT_ARM_UPPER_FB:
            return true;
        case XR_BODY_JOINT_LEFT_ARM_LOWER_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_WRIST_TWIST_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_SHOULDER_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_SCAPULA_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_ARM_UPPER_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_ARM_LOWER_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_WRIST_TWIST_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_PALM_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_WRIST_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_THUMB_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_THUMB_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_THUMB_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_THUMB_TIP_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_INDEX_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_INDEX_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_INDEX_INTERMEDIATE_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_INDEX_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_INDEX_TIP_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_MIDDLE_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_MIDDLE_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_MIDDLE_INTERMEDIATE_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_MIDDLE_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_MIDDLE_TIP_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_RING_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_RING_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_RING_INTERMEDIATE_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_RING_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_RING_TIP_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_LITTLE_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_LITTLE_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_LITTLE_INTERMEDIATE_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_LITTLE_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_LITTLE_TIP_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_PALM_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_WRIST_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_THUMB_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_THUMB_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_THUMB_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_THUMB_TIP_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_INDEX_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_INDEX_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_INDEX_INTERMEDIATE_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_INDEX_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_INDEX_TIP_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_MIDDLE_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_MIDDLE_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_MIDDLE_INTERMEDIATE_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_MIDDLE_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_MIDDLE_TIP_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_RING_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_RING_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_RING_INTERMEDIATE_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_RING_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_RING_TIP_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_LITTLE_METACARPAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_LITTLE_PROXIMAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_LITTLE_INTERMEDIATE_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_LITTLE_DISTAL_FB:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_LITTLE_TIP_FB:
            return true;
        case XR_BODY_JOINT_COUNT_FB:
            return true;
        case XR_BODY_JOINT_NONE_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrBodyJointSetFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBodyJointSetFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_body_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_body_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBodyJointSetFB requires extension ";
        error_str += " \"XR_FB_body_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BODY_JOINT_SET_DEFAULT_FB:
            return true;
        case XR_BODY_JOINT_SET_FULL_BODY_META:
            // Enum value XR_BODY_JOINT_SET_FULL_BODY_META requires extension XR_META_body_tracking_full_body, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_full_body")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrBodyJointSetFB value \"XR_BODY_JOINT_SET_FULL_BODY_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_body_tracking_full_body\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrHandJointsMotionRangeEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHandJointsMotionRangeEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_hand_joints_motion_range, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_joints_motion_range")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHandJointsMotionRangeEXT requires extension ";
        error_str += " \"XR_EXT_hand_joints_motion_range\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT:
            return true;
        case XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneComputeFeatureMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneComputeFeatureMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_scene_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneComputeFeatureMSFT requires extension ";
        error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT:
            return true;
        case XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT:
            return true;
        case XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT:
            return true;
        case XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT:
            return true;
        case XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT:
            // Enum value XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT requires extension XR_MSFT_scene_understanding_serialization, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding_serialization")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSceneComputeFeatureMSFT value \"XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding_serialization\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SCENE_COMPUTE_FEATURE_MARKER_MSFT:
            // Enum value XR_SCENE_COMPUTE_FEATURE_MARKER_MSFT requires extension XR_MSFT_scene_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSceneComputeFeatureMSFT value \"XR_SCENE_COMPUTE_FEATURE_MARKER_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneComputeConsistencyMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneComputeConsistencyMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_scene_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneComputeConsistencyMSFT requires extension ";
        error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_COMPLETE_MSFT:
            return true;
        case XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_INCOMPLETE_FAST_MSFT:
            return true;
        case XR_SCENE_COMPUTE_CONSISTENCY_OCCLUSION_OPTIMIZED_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrMeshComputeLodMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMeshComputeLodMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_scene_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMeshComputeLodMSFT requires extension ";
        error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MESH_COMPUTE_LOD_COARSE_MSFT:
            return true;
        case XR_MESH_COMPUTE_LOD_MEDIUM_MSFT:
            return true;
        case XR_MESH_COMPUTE_LOD_FINE_MSFT:
            return true;
        case XR_MESH_COMPUTE_LOD_UNLIMITED_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneComponentTypeMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneComponentTypeMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_scene_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneComponentTypeMSFT requires extension ";
        error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_COMPONENT_TYPE_INVALID_MSFT:
            return true;
        case XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT:
            return true;
        case XR_SCENE_COMPONENT_TYPE_PLANE_MSFT:
            return true;
        case XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT:
            return true;
        case XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT:
            return true;
        case XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT:
            // Enum value XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT requires extension XR_MSFT_scene_understanding_serialization, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding_serialization")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSceneComponentTypeMSFT value \"XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_understanding_serialization\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SCENE_COMPONENT_TYPE_MARKER_MSFT:
            // Enum value XR_SCENE_COMPONENT_TYPE_MARKER_MSFT requires extension XR_MSFT_scene_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSceneComponentTypeMSFT value \"XR_SCENE_COMPONENT_TYPE_MARKER_MSFT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_MSFT_scene_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneObjectTypeMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneObjectTypeMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_scene_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneObjectTypeMSFT requires extension ";
        error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT:
            return true;
        case XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT:
            return true;
        case XR_SCENE_OBJECT_TYPE_WALL_MSFT:
            return true;
        case XR_SCENE_OBJECT_TYPE_FLOOR_MSFT:
            return true;
        case XR_SCENE_OBJECT_TYPE_CEILING_MSFT:
            return true;
        case XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT:
            return true;
        case XR_SCENE_OBJECT_TYPE_INFERRED_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrScenePlaneAlignmentTypeMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrScenePlaneAlignmentTypeMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_scene_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrScenePlaneAlignmentTypeMSFT requires extension ";
        error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT:
            return true;
        case XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT:
            return true;
        case XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneComputeStateMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneComputeStateMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_scene_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneComputeStateMSFT requires extension ";
        error_str += " \"XR_MSFT_scene_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_COMPUTE_STATE_NONE_MSFT:
            return true;
        case XR_SCENE_COMPUTE_STATE_UPDATING_MSFT:
            return true;
        case XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT:
            return true;
        case XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrEyeExpressionHTC enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrEyeExpressionHTC value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_HTC_facial_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_facial_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrEyeExpressionHTC requires extension ";
        error_str += " \"XR_HTC_facial_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_EYE_EXPRESSION_LEFT_BLINK_HTC:
            return true;
        case XR_EYE_EXPRESSION_LEFT_WIDE_HTC:
            return true;
        case XR_EYE_EXPRESSION_RIGHT_BLINK_HTC:
            return true;
        case XR_EYE_EXPRESSION_RIGHT_WIDE_HTC:
            return true;
        case XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC:
            return true;
        case XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC:
            return true;
        case XR_EYE_EXPRESSION_LEFT_DOWN_HTC:
            return true;
        case XR_EYE_EXPRESSION_RIGHT_DOWN_HTC:
            return true;
        case XR_EYE_EXPRESSION_LEFT_OUT_HTC:
            return true;
        case XR_EYE_EXPRESSION_RIGHT_IN_HTC:
            return true;
        case XR_EYE_EXPRESSION_LEFT_IN_HTC:
            return true;
        case XR_EYE_EXPRESSION_RIGHT_OUT_HTC:
            return true;
        case XR_EYE_EXPRESSION_LEFT_UP_HTC:
            return true;
        case XR_EYE_EXPRESSION_RIGHT_UP_HTC:
            return true;
    default:
        return false;
}
}

// Function to validate XrLipExpressionHTC enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrLipExpressionHTC value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_HTC_facial_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_facial_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrLipExpressionHTC requires extension ";
        error_str += " \"XR_HTC_facial_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_LIP_EXPRESSION_JAW_RIGHT_HTC:
            return true;
        case XR_LIP_EXPRESSION_JAW_LEFT_HTC:
            return true;
        case XR_LIP_EXPRESSION_JAW_FORWARD_HTC:
            return true;
        case XR_LIP_EXPRESSION_JAW_OPEN_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_POUT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_RAISER_RIGHT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_RAISER_LEFT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_STRETCHER_RIGHT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_STRETCHER_LEFT_HTC:
            return true;
        case XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC:
            return true;
        case XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC:
            return true;
        case XR_LIP_EXPRESSION_CHEEK_SUCK_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC:
            return true;
        case XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_LEFT_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_UP_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_DOWN_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_ROLL_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC:
            return true;
        case XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC:
            return true;
    default:
        return false;
}
}

// Function to validate XrFacialTrackingTypeHTC enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFacialTrackingTypeHTC value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_HTC_facial_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_facial_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFacialTrackingTypeHTC requires extension ";
        error_str += " \"XR_HTC_facial_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC:
            return true;
        case XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC:
            return true;
    default:
        return false;
}
}

// Function to validate XrColorSpaceFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrColorSpaceFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_color_space, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_color_space")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrColorSpaceFB requires extension ";
        error_str += " \"XR_FB_color_space\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_COLOR_SPACE_UNMANAGED_FB:
            return true;
        case XR_COLOR_SPACE_REC2020_FB:
            return true;
        case XR_COLOR_SPACE_REC709_FB:
            return true;
        case XR_COLOR_SPACE_RIFT_CV1_FB:
            return true;
        case XR_COLOR_SPACE_RIFT_S_FB:
            return true;
        case XR_COLOR_SPACE_QUEST_FB:
            return true;
        case XR_COLOR_SPACE_P3_FB:
            return true;
        case XR_COLOR_SPACE_ADOBE_RGB_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpaceComponentTypeFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpaceComponentTypeFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_spatial_entity, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpaceComponentTypeFB requires extension ";
        error_str += " \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPACE_COMPONENT_TYPE_LOCATABLE_FB:
            return true;
        case XR_SPACE_COMPONENT_TYPE_STORABLE_FB:
            return true;
        case XR_SPACE_COMPONENT_TYPE_SHARABLE_FB:
            return true;
        case XR_SPACE_COMPONENT_TYPE_BOUNDED_2D_FB:
            return true;
        case XR_SPACE_COMPONENT_TYPE_BOUNDED_3D_FB:
            return true;
        case XR_SPACE_COMPONENT_TYPE_SEMANTIC_LABELS_FB:
            return true;
        case XR_SPACE_COMPONENT_TYPE_ROOM_LAYOUT_FB:
            return true;
        case XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB:
            return true;
        case XR_SPACE_COMPONENT_TYPE_TRIANGLE_MESH_META:
            // Enum value XR_SPACE_COMPONENT_TYPE_TRIANGLE_MESH_META requires extension XR_META_spatial_entity_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpaceComponentTypeFB value \"XR_SPACE_COMPONENT_TYPE_TRIANGLE_MESH_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPACE_COMPONENT_TYPE_ROOM_MESH_META:
            // Enum value XR_SPACE_COMPONENT_TYPE_ROOM_MESH_META requires extension XR_META_spatial_entity_room_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_room_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpaceComponentTypeFB value \"XR_SPACE_COMPONENT_TYPE_ROOM_MESH_META\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_META_spatial_entity_room_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrFoveationLevelFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFoveationLevelFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_foveation_configuration, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_foveation_configuration")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFoveationLevelFB requires extension ";
        error_str += " \"XR_FB_foveation_configuration\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FOVEATION_LEVEL_NONE_FB:
            return true;
        case XR_FOVEATION_LEVEL_LOW_FB:
            return true;
        case XR_FOVEATION_LEVEL_MEDIUM_FB:
            return true;
        case XR_FOVEATION_LEVEL_HIGH_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrFoveationDynamicFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFoveationDynamicFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_foveation_configuration, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_foveation_configuration")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFoveationDynamicFB requires extension ";
        error_str += " \"XR_FB_foveation_configuration\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FOVEATION_DYNAMIC_DISABLED_FB:
            return true;
        case XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrWindingOrderFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrWindingOrderFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_triangle_mesh, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_triangle_mesh")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrWindingOrderFB requires extension ";
        error_str += " \"XR_FB_triangle_mesh\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_WINDING_ORDER_UNKNOWN_FB:
            return true;
        case XR_WINDING_ORDER_CW_FB:
            return true;
        case XR_WINDING_ORDER_CCW_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrPassthroughLayerPurposeFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPassthroughLayerPurposeFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_passthrough, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPassthroughLayerPurposeFB requires extension ";
        error_str += " \"XR_FB_passthrough\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB:
            return true;
        case XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB:
            return true;
        case XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB:
            // Enum value XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB requires extension XR_FB_passthrough_keyboard_hands, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough_keyboard_hands")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrPassthroughLayerPurposeFB value \"XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough_keyboard_hands\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB:
            // Enum value XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB requires extension XR_FB_passthrough_keyboard_hands, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough_keyboard_hands")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrPassthroughLayerPurposeFB value \"XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_FB_passthrough_keyboard_hands\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerDetectorProfileML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerDetectorProfileML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerDetectorProfileML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_DETECTOR_PROFILE_DEFAULT_ML:
            return true;
        case XR_MARKER_DETECTOR_PROFILE_SPEED_ML:
            return true;
        case XR_MARKER_DETECTOR_PROFILE_ACCURACY_ML:
            return true;
        case XR_MARKER_DETECTOR_PROFILE_SMALL_TARGETS_ML:
            return true;
        case XR_MARKER_DETECTOR_PROFILE_LARGE_FOV_ML:
            return true;
        case XR_MARKER_DETECTOR_PROFILE_CUSTOM_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerTypeML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerTypeML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerTypeML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_TYPE_ARUCO_ML:
            return true;
        case XR_MARKER_TYPE_APRIL_TAG_ML:
            return true;
        case XR_MARKER_TYPE_QR_ML:
            return true;
        case XR_MARKER_TYPE_EAN_13_ML:
            return true;
        case XR_MARKER_TYPE_UPC_A_ML:
            return true;
        case XR_MARKER_TYPE_CODE_128_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerArucoDictML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerArucoDictML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerArucoDictML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_ARUCO_DICT_4X4_50_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_4X4_100_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_4X4_250_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_4X4_1000_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_5X5_50_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_5X5_100_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_5X5_250_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_5X5_1000_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_6X6_50_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_6X6_100_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_6X6_250_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_6X6_1000_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_7X7_50_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_7X7_100_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_7X7_250_ML:
            return true;
        case XR_MARKER_ARUCO_DICT_7X7_1000_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerAprilTagDictML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerAprilTagDictML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerAprilTagDictML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_APRIL_TAG_DICT_16H5_ML:
            return true;
        case XR_MARKER_APRIL_TAG_DICT_25H9_ML:
            return true;
        case XR_MARKER_APRIL_TAG_DICT_36H10_ML:
            return true;
        case XR_MARKER_APRIL_TAG_DICT_36H11_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerDetectorFpsML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerDetectorFpsML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerDetectorFpsML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_DETECTOR_FPS_LOW_ML:
            return true;
        case XR_MARKER_DETECTOR_FPS_MEDIUM_ML:
            return true;
        case XR_MARKER_DETECTOR_FPS_HIGH_ML:
            return true;
        case XR_MARKER_DETECTOR_FPS_MAX_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerDetectorResolutionML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerDetectorResolutionML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerDetectorResolutionML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_DETECTOR_RESOLUTION_LOW_ML:
            return true;
        case XR_MARKER_DETECTOR_RESOLUTION_MEDIUM_ML:
            return true;
        case XR_MARKER_DETECTOR_RESOLUTION_HIGH_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerDetectorCameraML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerDetectorCameraML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerDetectorCameraML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_DETECTOR_CAMERA_RGB_CAMERA_ML:
            return true;
        case XR_MARKER_DETECTOR_CAMERA_WORLD_CAMERAS_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerDetectorCornerRefineMethodML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerDetectorCornerRefineMethodML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerDetectorCornerRefineMethodML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_DETECTOR_CORNER_REFINE_METHOD_NONE_ML:
            return true;
        case XR_MARKER_DETECTOR_CORNER_REFINE_METHOD_SUBPIX_ML:
            return true;
        case XR_MARKER_DETECTOR_CORNER_REFINE_METHOD_CONTOUR_ML:
            return true;
        case XR_MARKER_DETECTOR_CORNER_REFINE_METHOD_APRIL_TAG_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerDetectorFullAnalysisIntervalML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerDetectorFullAnalysisIntervalML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerDetectorFullAnalysisIntervalML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_DETECTOR_FULL_ANALYSIS_INTERVAL_MAX_ML:
            return true;
        case XR_MARKER_DETECTOR_FULL_ANALYSIS_INTERVAL_FAST_ML:
            return true;
        case XR_MARKER_DETECTOR_FULL_ANALYSIS_INTERVAL_MEDIUM_ML:
            return true;
        case XR_MARKER_DETECTOR_FULL_ANALYSIS_INTERVAL_SLOW_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrMarkerDetectorStatusML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrMarkerDetectorStatusML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_marker_understanding, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_marker_understanding")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrMarkerDetectorStatusML requires extension ";
        error_str += " \"XR_ML_marker_understanding\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_MARKER_DETECTOR_STATUS_PENDING_ML:
            return true;
        case XR_MARKER_DETECTOR_STATUS_READY_ML:
            return true;
        case XR_MARKER_DETECTOR_STATUS_ERROR_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrLocalizationMapStateML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrLocalizationMapStateML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_localization_map, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrLocalizationMapStateML requires extension ";
        error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_LOCALIZATION_MAP_STATE_NOT_LOCALIZED_ML:
            return true;
        case XR_LOCALIZATION_MAP_STATE_LOCALIZED_ML:
            return true;
        case XR_LOCALIZATION_MAP_STATE_LOCALIZATION_PENDING_ML:
            return true;
        case XR_LOCALIZATION_MAP_STATE_LOCALIZATION_SLEEPING_BEFORE_RETRY_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrLocalizationMapTypeML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrLocalizationMapTypeML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_localization_map, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrLocalizationMapTypeML requires extension ";
        error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_LOCALIZATION_MAP_TYPE_ON_DEVICE_ML:
            return true;
        case XR_LOCALIZATION_MAP_TYPE_CLOUD_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrLocalizationMapConfidenceML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrLocalizationMapConfidenceML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_localization_map, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrLocalizationMapConfidenceML requires extension ";
        error_str += " \"XR_ML_localization_map\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_LOCALIZATION_MAP_CONFIDENCE_POOR_ML:
            return true;
        case XR_LOCALIZATION_MAP_CONFIDENCE_FAIR_ML:
            return true;
        case XR_LOCALIZATION_MAP_CONFIDENCE_GOOD_ML:
            return true;
        case XR_LOCALIZATION_MAP_CONFIDENCE_EXCELLENT_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialAnchorConfidenceML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialAnchorConfidenceML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_spatial_anchors, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialAnchorConfidenceML requires extension ";
        error_str += " \"XR_ML_spatial_anchors\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_ANCHOR_CONFIDENCE_LOW_ML:
            return true;
        case XR_SPATIAL_ANCHOR_CONFIDENCE_MEDIUM_ML:
            return true;
        case XR_SPATIAL_ANCHOR_CONFIDENCE_HIGH_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneMarkerTypeMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneMarkerTypeMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_scene_marker, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_marker")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneMarkerTypeMSFT requires extension ";
        error_str += " \"XR_MSFT_scene_marker\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_MARKER_TYPE_QR_CODE_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneMarkerQRCodeSymbolTypeMSFT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneMarkerQRCodeSymbolTypeMSFT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MSFT_scene_marker, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MSFT_scene_marker")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneMarkerQRCodeSymbolTypeMSFT requires extension ";
        error_str += " \"XR_MSFT_scene_marker\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_MARKER_QR_CODE_SYMBOL_TYPE_QR_CODE_MSFT:
            return true;
        case XR_SCENE_MARKER_QR_CODE_SYMBOL_TYPE_MICRO_QR_CODE_MSFT:
            return true;
    default:
        return false;
}
}

// Function to validate XrHandForearmJointULTRALEAP enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHandForearmJointULTRALEAP value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ULTRALEAP_hand_tracking_forearm, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ULTRALEAP_hand_tracking_forearm")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHandForearmJointULTRALEAP requires extension ";
        error_str += " \"XR_ULTRALEAP_hand_tracking_forearm\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HAND_FOREARM_JOINT_PALM_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_WRIST_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_THUMB_METACARPAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_THUMB_PROXIMAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_THUMB_DISTAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_THUMB_TIP_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_INDEX_METACARPAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_INDEX_PROXIMAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_INDEX_INTERMEDIATE_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_INDEX_DISTAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_INDEX_TIP_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_MIDDLE_METACARPAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_MIDDLE_PROXIMAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_MIDDLE_INTERMEDIATE_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_MIDDLE_DISTAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_MIDDLE_TIP_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_RING_METACARPAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_RING_PROXIMAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_RING_INTERMEDIATE_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_RING_DISTAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_RING_TIP_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_LITTLE_METACARPAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_LITTLE_PROXIMAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_LITTLE_INTERMEDIATE_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_LITTLE_DISTAL_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_LITTLE_TIP_ULTRALEAP:
            return true;
        case XR_HAND_FOREARM_JOINT_ELBOW_ULTRALEAP:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpaceQueryActionFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpaceQueryActionFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_spatial_entity_query, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpaceQueryActionFB requires extension ";
        error_str += " \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPACE_QUERY_ACTION_LOAD_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpaceStorageLocationFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpaceStorageLocationFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_spatial_entity_query, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpaceStorageLocationFB requires extension ";
        error_str += " \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPACE_STORAGE_LOCATION_INVALID_FB:
            return true;
        case XR_SPACE_STORAGE_LOCATION_LOCAL_FB:
            return true;
        case XR_SPACE_STORAGE_LOCATION_CLOUD_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpacePersistenceModeFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpacePersistenceModeFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_spatial_entity_storage, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpacePersistenceModeFB requires extension ";
        error_str += " \"XR_FB_spatial_entity_storage\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPACE_PERSISTENCE_MODE_INVALID_FB:
            return true;
        case XR_SPACE_PERSISTENCE_MODE_INDEFINITE_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceExpressionFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceExpressionFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_face_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceExpressionFB requires extension ";
        error_str += " \"XR_FB_face_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_EXPRESSION_BROW_LOWERER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_BROW_LOWERER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_CHEEK_PUFF_L_FB:
            return true;
        case XR_FACE_EXPRESSION_CHEEK_PUFF_R_FB:
            return true;
        case XR_FACE_EXPRESSION_CHEEK_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_CHEEK_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_CHEEK_SUCK_L_FB:
            return true;
        case XR_FACE_EXPRESSION_CHEEK_SUCK_R_FB:
            return true;
        case XR_FACE_EXPRESSION_CHIN_RAISER_B_FB:
            return true;
        case XR_FACE_EXPRESSION_CHIN_RAISER_T_FB:
            return true;
        case XR_FACE_EXPRESSION_DIMPLER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_DIMPLER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_CLOSED_L_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_CLOSED_R_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_LOOK_DOWN_L_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_LOOK_DOWN_R_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_LOOK_LEFT_L_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_LOOK_LEFT_R_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_LOOK_RIGHT_L_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_LOOK_RIGHT_R_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_LOOK_UP_L_FB:
            return true;
        case XR_FACE_EXPRESSION_EYES_LOOK_UP_R_FB:
            return true;
        case XR_FACE_EXPRESSION_INNER_BROW_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_INNER_BROW_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_JAW_DROP_FB:
            return true;
        case XR_FACE_EXPRESSION_JAW_SIDEWAYS_LEFT_FB:
            return true;
        case XR_FACE_EXPRESSION_JAW_SIDEWAYS_RIGHT_FB:
            return true;
        case XR_FACE_EXPRESSION_JAW_THRUST_FB:
            return true;
        case XR_FACE_EXPRESSION_LID_TIGHTENER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_LID_TIGHTENER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_CORNER_DEPRESSOR_L_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_CORNER_DEPRESSOR_R_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_CORNER_PULLER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_CORNER_PULLER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_FUNNELER_LB_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_FUNNELER_LT_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_FUNNELER_RB_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_FUNNELER_RT_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_PRESSOR_L_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_PRESSOR_R_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_PUCKER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_PUCKER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_STRETCHER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_STRETCHER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_SUCK_LB_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_SUCK_LT_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_SUCK_RB_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_SUCK_RT_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_TIGHTENER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_LIP_TIGHTENER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_LIPS_TOWARD_FB:
            return true;
        case XR_FACE_EXPRESSION_LOWER_LIP_DEPRESSOR_L_FB:
            return true;
        case XR_FACE_EXPRESSION_LOWER_LIP_DEPRESSOR_R_FB:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_LEFT_FB:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_RIGHT_FB:
            return true;
        case XR_FACE_EXPRESSION_NOSE_WRINKLER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_NOSE_WRINKLER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_OUTER_BROW_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_OUTER_BROW_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_UPPER_LID_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_UPPER_LID_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_UPPER_LIP_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION_UPPER_LIP_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION_COUNT_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceExpressionSetFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceExpressionSetFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_face_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceExpressionSetFB requires extension ";
        error_str += " \"XR_FB_face_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_EXPRESSION_SET_DEFAULT_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceConfidenceFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceConfidenceFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_face_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceConfidenceFB requires extension ";
        error_str += " \"XR_FB_face_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_CONFIDENCE_LOWER_FACE_FB:
            return true;
        case XR_FACE_CONFIDENCE_UPPER_FACE_FB:
            return true;
        case XR_FACE_CONFIDENCE_COUNT_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrEyePositionFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrEyePositionFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_eye_tracking_social, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_eye_tracking_social")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrEyePositionFB requires extension ";
        error_str += " \"XR_FB_eye_tracking_social\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_EYE_POSITION_LEFT_FB:
            return true;
        case XR_EYE_POSITION_RIGHT_FB:
            return true;
        case XR_EYE_POSITION_COUNT_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrCompareOpFB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrCompareOpFB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_composition_layer_depth_test, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_composition_layer_depth_test")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrCompareOpFB requires extension ";
        error_str += " \"XR_FB_composition_layer_depth_test\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_COMPARE_OP_NEVER_FB:
            return true;
        case XR_COMPARE_OP_LESS_FB:
            return true;
        case XR_COMPARE_OP_EQUAL_FB:
            return true;
        case XR_COMPARE_OP_LESS_OR_EQUAL_FB:
            return true;
        case XR_COMPARE_OP_GREATER_FB:
            return true;
        case XR_COMPARE_OP_NOT_EQUAL_FB:
            return true;
        case XR_COMPARE_OP_GREATER_OR_EQUAL_FB:
            return true;
        case XR_COMPARE_OP_ALWAYS_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrLocalDimmingModeMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrLocalDimmingModeMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_local_dimming, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_local_dimming")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrLocalDimmingModeMETA requires extension ";
        error_str += " \"XR_META_local_dimming\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_LOCAL_DIMMING_MODE_OFF_META:
            return true;
        case XR_LOCAL_DIMMING_MODE_ON_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrVirtualKeyboardLocationTypeMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrVirtualKeyboardLocationTypeMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_virtual_keyboard, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrVirtualKeyboardLocationTypeMETA requires extension ";
        error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_VIRTUAL_KEYBOARD_LOCATION_TYPE_CUSTOM_META:
            return true;
        case XR_VIRTUAL_KEYBOARD_LOCATION_TYPE_FAR_META:
            return true;
        case XR_VIRTUAL_KEYBOARD_LOCATION_TYPE_DIRECT_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrVirtualKeyboardInputSourceMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrVirtualKeyboardInputSourceMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_virtual_keyboard, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrVirtualKeyboardInputSourceMETA requires extension ";
        error_str += " \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_VIRTUAL_KEYBOARD_INPUT_SOURCE_CONTROLLER_RAY_LEFT_META:
            return true;
        case XR_VIRTUAL_KEYBOARD_INPUT_SOURCE_CONTROLLER_RAY_RIGHT_META:
            return true;
        case XR_VIRTUAL_KEYBOARD_INPUT_SOURCE_HAND_RAY_LEFT_META:
            return true;
        case XR_VIRTUAL_KEYBOARD_INPUT_SOURCE_HAND_RAY_RIGHT_META:
            return true;
        case XR_VIRTUAL_KEYBOARD_INPUT_SOURCE_CONTROLLER_DIRECT_LEFT_META:
            return true;
        case XR_VIRTUAL_KEYBOARD_INPUT_SOURCE_CONTROLLER_DIRECT_RIGHT_META:
            return true;
        case XR_VIRTUAL_KEYBOARD_INPUT_SOURCE_HAND_DIRECT_INDEX_TIP_LEFT_META:
            return true;
        case XR_VIRTUAL_KEYBOARD_INPUT_SOURCE_HAND_DIRECT_INDEX_TIP_RIGHT_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrExternalCameraAttachedToDeviceOCULUS enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrExternalCameraAttachedToDeviceOCULUS value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_OCULUS_external_camera, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_OCULUS_external_camera")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrExternalCameraAttachedToDeviceOCULUS requires extension ";
        error_str += " \"XR_OCULUS_external_camera\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_NONE_OCULUS:
            return true;
        case XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_HMD_OCULUS:
            return true;
        case XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_LTOUCH_OCULUS:
            return true;
        case XR_EXTERNAL_CAMERA_ATTACHED_TO_DEVICE_RTOUCH_OCULUS:
            return true;
    default:
        return false;
}
}

// Function to validate XrPerformanceMetricsCounterUnitMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPerformanceMetricsCounterUnitMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_performance_metrics, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_performance_metrics")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPerformanceMetricsCounterUnitMETA requires extension ";
        error_str += " \"XR_META_performance_metrics\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META:
            return true;
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_META:
            return true;
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_META:
            return true;
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_META:
            return true;
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrPassthroughColorLutChannelsMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPassthroughColorLutChannelsMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_passthrough_color_lut, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_color_lut")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPassthroughColorLutChannelsMETA requires extension ";
        error_str += " \"XR_META_passthrough_color_lut\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PASSTHROUGH_COLOR_LUT_CHANNELS_RGB_META:
            return true;
        case XR_PASSTHROUGH_COLOR_LUT_CHANNELS_RGBA_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrFullBodyJointMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFullBodyJointMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_body_tracking_full_body, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_full_body")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFullBodyJointMETA requires extension ";
        error_str += " \"XR_META_body_tracking_full_body\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FULL_BODY_JOINT_ROOT_META:
            return true;
        case XR_FULL_BODY_JOINT_HIPS_META:
            return true;
        case XR_FULL_BODY_JOINT_SPINE_LOWER_META:
            return true;
        case XR_FULL_BODY_JOINT_SPINE_MIDDLE_META:
            return true;
        case XR_FULL_BODY_JOINT_SPINE_UPPER_META:
            return true;
        case XR_FULL_BODY_JOINT_CHEST_META:
            return true;
        case XR_FULL_BODY_JOINT_NECK_META:
            return true;
        case XR_FULL_BODY_JOINT_HEAD_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_SHOULDER_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_SCAPULA_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_ARM_UPPER_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_ARM_LOWER_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_WRIST_TWIST_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_SHOULDER_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_SCAPULA_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_ARM_UPPER_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_ARM_LOWER_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_WRIST_TWIST_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_PALM_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_WRIST_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_THUMB_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_THUMB_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_THUMB_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_THUMB_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_INDEX_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_INDEX_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_INDEX_INTERMEDIATE_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_INDEX_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_INDEX_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_INTERMEDIATE_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_MIDDLE_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_RING_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_RING_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_RING_INTERMEDIATE_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_RING_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_RING_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_LITTLE_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_LITTLE_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_LITTLE_INTERMEDIATE_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_LITTLE_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_HAND_LITTLE_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_PALM_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_WRIST_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_THUMB_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_THUMB_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_THUMB_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_THUMB_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_INDEX_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_INDEX_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_INDEX_INTERMEDIATE_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_INDEX_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_INDEX_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_INTERMEDIATE_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_MIDDLE_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_RING_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_RING_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_RING_INTERMEDIATE_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_RING_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_RING_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_METACARPAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_PROXIMAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_INTERMEDIATE_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_DISTAL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_HAND_LITTLE_TIP_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_UPPER_LEG_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_LOWER_LEG_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_FOOT_ANKLE_TWIST_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_FOOT_ANKLE_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_FOOT_SUBTALAR_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_FOOT_TRANSVERSE_META:
            return true;
        case XR_FULL_BODY_JOINT_LEFT_FOOT_BALL_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_UPPER_LEG_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_LOWER_LEG_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_FOOT_ANKLE_TWIST_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_FOOT_ANKLE_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_FOOT_SUBTALAR_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_FOOT_TRANSVERSE_META:
            return true;
        case XR_FULL_BODY_JOINT_RIGHT_FOOT_BALL_META:
            return true;
        case XR_FULL_BODY_JOINT_COUNT_META:
            return true;
        case XR_FULL_BODY_JOINT_NONE_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrBodyTrackingCalibrationStateMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBodyTrackingCalibrationStateMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_body_tracking_calibration, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_calibration")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBodyTrackingCalibrationStateMETA requires extension ";
        error_str += " \"XR_META_body_tracking_calibration\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BODY_TRACKING_CALIBRATION_STATE_VALID_META:
            return true;
        case XR_BODY_TRACKING_CALIBRATION_STATE_CALIBRATING_META:
            return true;
        case XR_BODY_TRACKING_CALIBRATION_STATE_INVALID_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrBodyTrackingFidelityMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBodyTrackingFidelityMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_body_tracking_fidelity, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_body_tracking_fidelity")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBodyTrackingFidelityMETA requires extension ";
        error_str += " \"XR_META_body_tracking_fidelity\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BODY_TRACKING_FIDELITY_LOW_META:
            return true;
        case XR_BODY_TRACKING_FIDELITY_HIGH_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceExpression2FB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceExpression2FB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_face_tracking2, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking2")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceExpression2FB requires extension ";
        error_str += " \"XR_FB_face_tracking2\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_EXPRESSION2_BROW_LOWERER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_BROW_LOWERER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_CHEEK_PUFF_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_CHEEK_PUFF_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_CHEEK_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_CHEEK_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_CHEEK_SUCK_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_CHEEK_SUCK_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_CHIN_RAISER_B_FB:
            return true;
        case XR_FACE_EXPRESSION2_CHIN_RAISER_T_FB:
            return true;
        case XR_FACE_EXPRESSION2_DIMPLER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_DIMPLER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_CLOSED_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_CLOSED_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_LOOK_DOWN_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_LOOK_DOWN_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_LOOK_LEFT_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_LOOK_LEFT_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_LOOK_RIGHT_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_LOOK_RIGHT_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_LOOK_UP_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_EYES_LOOK_UP_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_INNER_BROW_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_INNER_BROW_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_JAW_DROP_FB:
            return true;
        case XR_FACE_EXPRESSION2_JAW_SIDEWAYS_LEFT_FB:
            return true;
        case XR_FACE_EXPRESSION2_JAW_SIDEWAYS_RIGHT_FB:
            return true;
        case XR_FACE_EXPRESSION2_JAW_THRUST_FB:
            return true;
        case XR_FACE_EXPRESSION2_LID_TIGHTENER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_LID_TIGHTENER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_CORNER_DEPRESSOR_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_CORNER_DEPRESSOR_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_CORNER_PULLER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_CORNER_PULLER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_FUNNELER_LB_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_FUNNELER_LT_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_FUNNELER_RB_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_FUNNELER_RT_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_PRESSOR_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_PRESSOR_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_PUCKER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_PUCKER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_STRETCHER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_STRETCHER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_SUCK_LB_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_SUCK_LT_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_SUCK_RB_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_SUCK_RT_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_TIGHTENER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIP_TIGHTENER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_LIPS_TOWARD_FB:
            return true;
        case XR_FACE_EXPRESSION2_LOWER_LIP_DEPRESSOR_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_LOWER_LIP_DEPRESSOR_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_MOUTH_LEFT_FB:
            return true;
        case XR_FACE_EXPRESSION2_MOUTH_RIGHT_FB:
            return true;
        case XR_FACE_EXPRESSION2_NOSE_WRINKLER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_NOSE_WRINKLER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_OUTER_BROW_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_OUTER_BROW_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_UPPER_LID_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_UPPER_LID_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_UPPER_LIP_RAISER_L_FB:
            return true;
        case XR_FACE_EXPRESSION2_UPPER_LIP_RAISER_R_FB:
            return true;
        case XR_FACE_EXPRESSION2_TONGUE_TIP_INTERDENTAL_FB:
            return true;
        case XR_FACE_EXPRESSION2_TONGUE_TIP_ALVEOLAR_FB:
            return true;
        case XR_FACE_EXPRESSION2_TONGUE_FRONT_DORSAL_PALATE_FB:
            return true;
        case XR_FACE_EXPRESSION2_TONGUE_MID_DORSAL_PALATE_FB:
            return true;
        case XR_FACE_EXPRESSION2_TONGUE_BACK_DORSAL_VELAR_FB:
            return true;
        case XR_FACE_EXPRESSION2_TONGUE_OUT_FB:
            return true;
        case XR_FACE_EXPRESSION2_TONGUE_RETREAT_FB:
            return true;
        case XR_FACE_EXPRESSION2_COUNT_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceExpressionSet2FB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceExpressionSet2FB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_face_tracking2, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking2")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceExpressionSet2FB requires extension ";
        error_str += " \"XR_FB_face_tracking2\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_EXPRESSION_SET2_DEFAULT_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceTrackingDataSource2FB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceTrackingDataSource2FB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_face_tracking2, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking2")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceTrackingDataSource2FB requires extension ";
        error_str += " \"XR_FB_face_tracking2\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_TRACKING_DATA_SOURCE2_VISUAL_FB:
            return true;
        case XR_FACE_TRACKING_DATA_SOURCE2_AUDIO_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceConfidence2FB enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceConfidence2FB value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_FB_face_tracking2, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_face_tracking2")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceConfidence2FB requires extension ";
        error_str += " \"XR_FB_face_tracking2\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_CONFIDENCE2_LOWER_FACE_FB:
            return true;
        case XR_FACE_CONFIDENCE2_UPPER_FACE_FB:
            return true;
        case XR_FACE_CONFIDENCE2_COUNT_FB:
            return true;
    default:
        return false;
}
}

// Function to validate XrTrackingOptimizationSettingsDomainQCOM enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrTrackingOptimizationSettingsDomainQCOM value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_QCOM_tracking_optimization_settings, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_QCOM_tracking_optimization_settings")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrTrackingOptimizationSettingsDomainQCOM requires extension ";
        error_str += " \"XR_QCOM_tracking_optimization_settings\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_TRACKING_OPTIMIZATION_SETTINGS_DOMAIN_ALL_QCOM:
            return true;
    default:
        return false;
}
}

// Function to validate XrTrackingOptimizationSettingsHintQCOM enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrTrackingOptimizationSettingsHintQCOM value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_QCOM_tracking_optimization_settings, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_QCOM_tracking_optimization_settings")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrTrackingOptimizationSettingsHintQCOM requires extension ";
        error_str += " \"XR_QCOM_tracking_optimization_settings\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_NONE_QCOM:
            return true;
        case XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_LONG_RANGE_PRIORIZATION_QCOM:
            return true;
        case XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_CLOSE_RANGE_PRIORIZATION_QCOM:
            return true;
        case XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_LOW_POWER_PRIORIZATION_QCOM:
            return true;
        case XR_TRACKING_OPTIMIZATION_SETTINGS_HINT_HIGH_POWER_PRIORIZATION_QCOM:
            return true;
    default:
        return false;
}
}

// Function to validate XrHandGestureTypeQCOM enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHandGestureTypeQCOM value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_QCOM_hand_tracking_gesture, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_QCOM_hand_tracking_gesture")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHandGestureTypeQCOM requires extension ";
        error_str += " \"XR_QCOM_hand_tracking_gesture\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HAND_GESTURE_TYPE_UNKNOWN_QCOM:
            return true;
        case XR_HAND_GESTURE_TYPE_OPEN_HAND_QCOM:
            return true;
        case XR_HAND_GESTURE_TYPE_GRAB_QCOM:
            return true;
        case XR_HAND_GESTURE_TYPE_PINCH_QCOM:
            return true;
    default:
        return false;
}
}

// Function to validate XrPassthroughFormHTC enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPassthroughFormHTC value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_HTC_passthrough, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_passthrough")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPassthroughFormHTC requires extension ";
        error_str += " \"XR_HTC_passthrough\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PASSTHROUGH_FORM_PLANAR_HTC:
            return true;
        case XR_PASSTHROUGH_FORM_PROJECTED_HTC:
            return true;
    default:
        return false;
}
}

// Function to validate XrFoveationModeHTC enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFoveationModeHTC value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_HTC_foveation, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_foveation")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFoveationModeHTC requires extension ";
        error_str += " \"XR_HTC_foveation\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FOVEATION_MODE_DISABLE_HTC:
            return true;
        case XR_FOVEATION_MODE_FIXED_HTC:
            return true;
        case XR_FOVEATION_MODE_DYNAMIC_HTC:
            return true;
        case XR_FOVEATION_MODE_CUSTOM_HTC:
            return true;
    default:
        return false;
}
}

// Function to validate XrFoveationLevelHTC enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFoveationLevelHTC value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_HTC_foveation, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_foveation")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFoveationLevelHTC requires extension ";
        error_str += " \"XR_HTC_foveation\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FOVEATION_LEVEL_NONE_HTC:
            return true;
        case XR_FOVEATION_LEVEL_LOW_HTC:
            return true;
        case XR_FOVEATION_LEVEL_MEDIUM_HTC:
            return true;
        case XR_FOVEATION_LEVEL_HIGH_HTC:
            return true;
    default:
        return false;
}
}

// Function to validate XrBodyJointHTC enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBodyJointHTC value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_HTC_body_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_body_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBodyJointHTC requires extension ";
        error_str += " \"XR_HTC_body_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BODY_JOINT_PELVIS_HTC:
            return true;
        case XR_BODY_JOINT_LEFT_HIP_HTC:
            return true;
        case XR_BODY_JOINT_LEFT_KNEE_HTC:
            return true;
        case XR_BODY_JOINT_LEFT_ANKLE_HTC:
            return true;
        case XR_BODY_JOINT_LEFT_FEET_HTC:
            return true;
        case XR_BODY_JOINT_RIGHT_HIP_HTC:
            return true;
        case XR_BODY_JOINT_RIGHT_KNEE_HTC:
            return true;
        case XR_BODY_JOINT_RIGHT_ANKLE_HTC:
            return true;
        case XR_BODY_JOINT_RIGHT_FEET_HTC:
            return true;
        case XR_BODY_JOINT_WAIST_HTC:
            return true;
        case XR_BODY_JOINT_SPINE_LOWER_HTC:
            return true;
        case XR_BODY_JOINT_SPINE_MIDDLE_HTC:
            return true;
        case XR_BODY_JOINT_SPINE_HIGH_HTC:
            return true;
        case XR_BODY_JOINT_CHEST_HTC:
            return true;
        case XR_BODY_JOINT_NECK_HTC:
            return true;
        case XR_BODY_JOINT_HEAD_HTC:
            return true;
        case XR_BODY_JOINT_LEFT_CLAVICLE_HTC:
            return true;
        case XR_BODY_JOINT_LEFT_SCAPULA_HTC:
            return true;
        case XR_BODY_JOINT_LEFT_ARM_HTC:
            return true;
        case XR_BODY_JOINT_LEFT_ELBOW_HTC:
            return true;
        case XR_BODY_JOINT_LEFT_WRIST_HTC:
            return true;
        case XR_BODY_JOINT_RIGHT_CLAVICLE_HTC:
            return true;
        case XR_BODY_JOINT_RIGHT_SCAPULA_HTC:
            return true;
        case XR_BODY_JOINT_RIGHT_ARM_HTC:
            return true;
        case XR_BODY_JOINT_RIGHT_ELBOW_HTC:
            return true;
        case XR_BODY_JOINT_RIGHT_WRIST_HTC:
            return true;
    default:
        return false;
}
}

// Function to validate XrBodyJointSetHTC enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBodyJointSetHTC value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_HTC_body_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_body_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBodyJointSetHTC requires extension ";
        error_str += " \"XR_HTC_body_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BODY_JOINT_SET_FULL_HTC:
            return true;
    default:
        return false;
}
}

// Function to validate XrBodyJointConfidenceHTC enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBodyJointConfidenceHTC value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_HTC_body_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_body_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBodyJointConfidenceHTC requires extension ";
        error_str += " \"XR_HTC_body_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BODY_JOINT_CONFIDENCE_NONE_HTC:
            return true;
        case XR_BODY_JOINT_CONFIDENCE_LOW_HTC:
            return true;
        case XR_BODY_JOINT_CONFIDENCE_HIGH_HTC:
            return true;
    default:
        return false;
}
}

// Function to validate XrForceFeedbackCurlLocationMNDX enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrForceFeedbackCurlLocationMNDX value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_MNDX_force_feedback_curl, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_MNDX_force_feedback_curl")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrForceFeedbackCurlLocationMNDX requires extension ";
        error_str += " \"XR_MNDX_force_feedback_curl\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FORCE_FEEDBACK_CURL_LOCATION_THUMB_CURL_MNDX:
            return true;
        case XR_FORCE_FEEDBACK_CURL_LOCATION_INDEX_CURL_MNDX:
            return true;
        case XR_FORCE_FEEDBACK_CURL_LOCATION_MIDDLE_CURL_MNDX:
            return true;
        case XR_FORCE_FEEDBACK_CURL_LOCATION_RING_CURL_MNDX:
            return true;
        case XR_FORCE_FEEDBACK_CURL_LOCATION_LITTLE_CURL_MNDX:
            return true;
    default:
        return false;
}
}

// Function to validate XrBodyJointBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBodyJointBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_body_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_body_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBodyJointBD requires extension ";
        error_str += " \"XR_BD_body_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BODY_JOINT_PELVIS_BD:
            return true;
        case XR_BODY_JOINT_LEFT_HIP_BD:
            return true;
        case XR_BODY_JOINT_RIGHT_HIP_BD:
            return true;
        case XR_BODY_JOINT_SPINE1_BD:
            return true;
        case XR_BODY_JOINT_LEFT_KNEE_BD:
            return true;
        case XR_BODY_JOINT_RIGHT_KNEE_BD:
            return true;
        case XR_BODY_JOINT_SPINE2_BD:
            return true;
        case XR_BODY_JOINT_LEFT_ANKLE_BD:
            return true;
        case XR_BODY_JOINT_RIGHT_ANKLE_BD:
            return true;
        case XR_BODY_JOINT_SPINE3_BD:
            return true;
        case XR_BODY_JOINT_LEFT_FOOT_BD:
            return true;
        case XR_BODY_JOINT_RIGHT_FOOT_BD:
            return true;
        case XR_BODY_JOINT_NECK_BD:
            return true;
        case XR_BODY_JOINT_LEFT_COLLAR_BD:
            return true;
        case XR_BODY_JOINT_RIGHT_COLLAR_BD:
            return true;
        case XR_BODY_JOINT_HEAD_BD:
            return true;
        case XR_BODY_JOINT_LEFT_SHOULDER_BD:
            return true;
        case XR_BODY_JOINT_RIGHT_SHOULDER_BD:
            return true;
        case XR_BODY_JOINT_LEFT_ELBOW_BD:
            return true;
        case XR_BODY_JOINT_RIGHT_ELBOW_BD:
            return true;
        case XR_BODY_JOINT_LEFT_WRIST_BD:
            return true;
        case XR_BODY_JOINT_RIGHT_WRIST_BD:
            return true;
        case XR_BODY_JOINT_LEFT_HAND_BD:
            return true;
        case XR_BODY_JOINT_RIGHT_HAND_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrBodyJointSetBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBodyJointSetBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_body_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_body_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBodyJointSetBD requires extension ";
        error_str += " \"XR_BD_body_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BODY_JOINT_SET_BODY_WITHOUT_ARM_BD:
            return true;
        case XR_BODY_JOINT_SET_FULL_BODY_JOINTS_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrFacialSimulationModeBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFacialSimulationModeBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_facial_simulation, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_facial_simulation")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFacialSimulationModeBD requires extension ";
        error_str += " \"XR_BD_facial_simulation\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACIAL_SIMULATION_MODE_DEFAULT_BD:
            return true;
        case XR_FACIAL_SIMULATION_MODE_COMBINED_AUDIO_BD:
            return true;
        case XR_FACIAL_SIMULATION_MODE_COMBINED_AUDIO_WITH_LIP_BD:
            return true;
        case XR_FACIAL_SIMULATION_MODE_ONLY_AUDIO_WITH_LIP_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceExpressionBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceExpressionBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_facial_simulation, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_facial_simulation")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceExpressionBD requires extension ";
        error_str += " \"XR_BD_facial_simulation\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_EXPRESSION_BROW_DROP_L_BD:
            return true;
        case XR_FACE_EXPRESSION_BROW_DROP_R_BD:
            return true;
        case XR_FACE_EXPRESSION_BROW_INNER_UPWARDS_BD:
            return true;
        case XR_FACE_EXPRESSION_BROW_OUTER_UPWARDS_L_BD:
            return true;
        case XR_FACE_EXPRESSION_BROW_OUTER_UPWARDS_R_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_BLINK_L_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_DROP_L_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_IN_L_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_OUT_L_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_UPWARDS_L_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_SQUINT_L_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_WIDE_L_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_BLINK_R_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_DROP_R_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_IN_R_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_OUT_R_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_UPWARDS_R_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_SQUINT_R_BD:
            return true;
        case XR_FACE_EXPRESSION_EYE_LOOK_WIDE_R_BD:
            return true;
        case XR_FACE_EXPRESSION_NOSE_SNEER_L_BD:
            return true;
        case XR_FACE_EXPRESSION_NOSE_SNEER_R_BD:
            return true;
        case XR_FACE_EXPRESSION_CHEEK_PUFF_BD:
            return true;
        case XR_FACE_EXPRESSION_CHEEK_SQUINT_L_BD:
            return true;
        case XR_FACE_EXPRESSION_CHEEK_SQUINT_R_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_CLOSE_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_FUNNEL_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_PUCKER_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_L_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_R_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_SMILE_L_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_SMILE_R_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_FROWN_L_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_FROWN_R_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_DIMPLE_L_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_DIMPLE_R_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_STRETCH_L_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_STRETCH_R_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_ROLL_LOWER_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_ROLL_UPPER_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_SHRUG_LOWER_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_SHRUG_UPPER_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_PRESS_L_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_PRESS_R_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_LOWER_DROP_L_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_LOWER_DROP_R_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_UPPER_UPWARDS_L_BD:
            return true;
        case XR_FACE_EXPRESSION_MOUTH_UPPER_UPWARDS_R_BD:
            return true;
        case XR_FACE_EXPRESSION_JAW_FORWARD_BD:
            return true;
        case XR_FACE_EXPRESSION_JAW_L_BD:
            return true;
        case XR_FACE_EXPRESSION_JAW_R_BD:
            return true;
        case XR_FACE_EXPRESSION_JAW_OPEN_BD:
            return true;
        case XR_FACE_EXPRESSION_TONGUE_OUT_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrLipExpressionBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrLipExpressionBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_facial_simulation, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_facial_simulation")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrLipExpressionBD requires extension ";
        error_str += " \"XR_BD_facial_simulation\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_LIP_EXPRESSION_PP_BD:
            return true;
        case XR_LIP_EXPRESSION_CH_BD:
            return true;
        case XR_LIP_EXPRESSION_LO_BD:
            return true;
        case XR_LIP_EXPRESSION_O_BD:
            return true;
        case XR_LIP_EXPRESSION_I_BD:
            return true;
        case XR_LIP_EXPRESSION_LU_BD:
            return true;
        case XR_LIP_EXPRESSION_RR_BD:
            return true;
        case XR_LIP_EXPRESSION_XX_BD:
            return true;
        case XR_LIP_EXPRESSION_LAA_BD:
            return true;
        case XR_LIP_EXPRESSION_LI_BD:
            return true;
        case XR_LIP_EXPRESSION_FF_BD:
            return true;
        case XR_LIP_EXPRESSION_U_BD:
            return true;
        case XR_LIP_EXPRESSION_TH_BD:
            return true;
        case XR_LIP_EXPRESSION_LKK_BD:
            return true;
        case XR_LIP_EXPRESSION_SS_BD:
            return true;
        case XR_LIP_EXPRESSION_LE_BD:
            return true;
        case XR_LIP_EXPRESSION_DD_BD:
            return true;
        case XR_LIP_EXPRESSION_E_BD:
            return true;
        case XR_LIP_EXPRESSION_LNN_BD:
            return true;
        case XR_LIP_EXPRESSION_SIL_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialEntityComponentTypeBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialEntityComponentTypeBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_sensing, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialEntityComponentTypeBD requires extension ";
        error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_ENTITY_COMPONENT_TYPE_LOCATION_BD:
            return true;
        case XR_SPATIAL_ENTITY_COMPONENT_TYPE_SEMANTIC_BD:
            return true;
        case XR_SPATIAL_ENTITY_COMPONENT_TYPE_BOUNDING_BOX_2D_BD:
            return true;
        case XR_SPATIAL_ENTITY_COMPONENT_TYPE_POLYGON_BD:
            return true;
        case XR_SPATIAL_ENTITY_COMPONENT_TYPE_BOUNDING_BOX_3D_BD:
            return true;
        case XR_SPATIAL_ENTITY_COMPONENT_TYPE_TRIANGLE_MESH_BD:
            return true;
        case XR_SPATIAL_ENTITY_COMPONENT_TYPE_PLANE_ORIENTATION_BD:
            // Enum value XR_SPATIAL_ENTITY_COMPONENT_TYPE_PLANE_ORIENTATION_BD requires extension XR_BD_spatial_plane, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_plane")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialEntityComponentTypeBD value \"XR_SPATIAL_ENTITY_COMPONENT_TYPE_PLANE_ORIENTATION_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_plane\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrSemanticLabelBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSemanticLabelBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_sensing, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSemanticLabelBD requires extension ";
        error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SEMANTIC_LABEL_UNKNOWN_BD:
            return true;
        case XR_SEMANTIC_LABEL_FLOOR_BD:
            return true;
        case XR_SEMANTIC_LABEL_CEILING_BD:
            return true;
        case XR_SEMANTIC_LABEL_WALL_BD:
            return true;
        case XR_SEMANTIC_LABEL_DOOR_BD:
            return true;
        case XR_SEMANTIC_LABEL_WINDOW_BD:
            return true;
        case XR_SEMANTIC_LABEL_OPENING_BD:
            return true;
        case XR_SEMANTIC_LABEL_TABLE_BD:
            return true;
        case XR_SEMANTIC_LABEL_SOFA_BD:
            return true;
        case XR_SEMANTIC_LABEL_CHAIR_BD:
            return true;
        case XR_SEMANTIC_LABEL_HUMAN_BD:
            return true;
        case XR_SEMANTIC_LABEL_BEAM_BD:
            return true;
        case XR_SEMANTIC_LABEL_COLUMN_BD:
            return true;
        case XR_SEMANTIC_LABEL_CURTAIN_BD:
            return true;
        case XR_SEMANTIC_LABEL_CABINET_BD:
            return true;
        case XR_SEMANTIC_LABEL_BED_BD:
            return true;
        case XR_SEMANTIC_LABEL_PLANT_BD:
            return true;
        case XR_SEMANTIC_LABEL_SCREEN_BD:
            return true;
        case XR_SEMANTIC_LABEL_VIRTUAL_WALL_BD:
            return true;
        case XR_SEMANTIC_LABEL_REFRIGERATOR_BD:
            return true;
        case XR_SEMANTIC_LABEL_WASHING_MACHINE_BD:
            return true;
        case XR_SEMANTIC_LABEL_AIR_CONDITIONER_BD:
            return true;
        case XR_SEMANTIC_LABEL_LAMP_BD:
            return true;
        case XR_SEMANTIC_LABEL_WALL_ART_BD:
            return true;
        case XR_SEMANTIC_LABEL_STAIRWAY_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrSenseDataProviderTypeBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSenseDataProviderTypeBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_sensing, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSenseDataProviderTypeBD requires extension ";
        error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SENSE_DATA_PROVIDER_TYPE_ANCHOR_BD:
            // Enum value XR_SENSE_DATA_PROVIDER_TYPE_ANCHOR_BD requires extension XR_BD_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSenseDataProviderTypeBD value \"XR_SENSE_DATA_PROVIDER_TYPE_ANCHOR_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SENSE_DATA_PROVIDER_TYPE_SCENE_BD:
            // Enum value XR_SENSE_DATA_PROVIDER_TYPE_SCENE_BD requires extension XR_BD_spatial_scene, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_scene")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSenseDataProviderTypeBD value \"XR_SENSE_DATA_PROVIDER_TYPE_SCENE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_scene\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SENSE_DATA_PROVIDER_TYPE_MESH_BD:
            // Enum value XR_SENSE_DATA_PROVIDER_TYPE_MESH_BD requires extension XR_BD_spatial_mesh, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_mesh")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSenseDataProviderTypeBD value \"XR_SENSE_DATA_PROVIDER_TYPE_MESH_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_mesh\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SENSE_DATA_PROVIDER_TYPE_PLANE_BD:
            // Enum value XR_SENSE_DATA_PROVIDER_TYPE_PLANE_BD requires extension XR_BD_spatial_plane, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_plane")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSenseDataProviderTypeBD value \"XR_SENSE_DATA_PROVIDER_TYPE_PLANE_BD\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_BD_spatial_plane\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrSenseDataProviderStateBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSenseDataProviderStateBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_sensing, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSenseDataProviderStateBD requires extension ";
        error_str += " \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SENSE_DATA_PROVIDER_STATE_INITIALIZED_BD:
            return true;
        case XR_SENSE_DATA_PROVIDER_STATE_RUNNING_BD:
            return true;
        case XR_SENSE_DATA_PROVIDER_STATE_STOPPED_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrPersistenceLocationBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPersistenceLocationBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_anchor, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_anchor")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPersistenceLocationBD requires extension ";
        error_str += " \"XR_BD_spatial_anchor\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PERSISTENCE_LOCATION_LOCAL_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialMeshLodBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialMeshLodBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_mesh, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_mesh")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialMeshLodBD requires extension ";
        error_str += " \"XR_BD_spatial_mesh\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_MESH_LOD_COARSE_BD:
            return true;
        case XR_SPATIAL_MESH_LOD_MEDIUM_BD:
            return true;
        case XR_SPATIAL_MESH_LOD_FINE_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrPlaneOrientationBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPlaneOrientationBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_plane, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_plane")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPlaneOrientationBD requires extension ";
        error_str += " \"XR_BD_spatial_plane\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PLANE_ORIENTATION_HORIZONTAL_UPWARD_BD:
            return true;
        case XR_PLANE_ORIENTATION_HORIZONTAL_DOWNWARD_BD:
            return true;
        case XR_PLANE_ORIENTATION_VERTICAL_BD:
            return true;
        case XR_PLANE_ORIENTATION_ARBITRARY_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrAudioSampleRateBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrAudioSampleRateBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrAudioSampleRateBD requires extension ";
        error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_AUDIO_SAMPLE_RATE_192000_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_96000_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_48000_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_44100_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_32000_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_24000_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_22050_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_16000_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_12000_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_11025_HZ_BD:
            return true;
        case XR_AUDIO_SAMPLE_RATE_8000_HZ_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrAudioBufferChannelLayoutBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrAudioBufferChannelLayoutBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrAudioBufferChannelLayoutBD requires extension ";
        error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_AUDIO_BUFFER_CHANNEL_LAYOUT_INTERLEAVED_BD:
            return true;
        case XR_AUDIO_BUFFER_CHANNEL_LAYOUT_PLANAR_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrSoundObjectDistanceAttenuationTypeBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSoundObjectDistanceAttenuationTypeBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSoundObjectDistanceAttenuationTypeBD requires extension ";
        error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SOUND_OBJECT_DISTANCE_ATTENUATION_TYPE_NONE_BD:
            return true;
        case XR_SOUND_OBJECT_DISTANCE_ATTENUATION_TYPE_INVERSE_SQUARE_BD:
            return true;
        case XR_SOUND_OBJECT_DISTANCE_ATTENUATION_TYPE_ROLLOFF_BD:
            return true;
        case XR_SOUND_OBJECT_DISTANCE_ATTENUATION_TYPE_CUSTOMIZED_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrSoundFieldChannelMaskSurroundBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSoundFieldChannelMaskSurroundBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSoundFieldChannelMaskSurroundBD requires extension ";
        error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_FRONT_LEFT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_FRONT_RIGHT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_FRONT_CENTER_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_LOW_FREQUENCY_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_BACK_LEFT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_BACK_RIGHT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SIDE_LEFT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SIDE_RIGHT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_TOP_FRONT_LEFT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_TOP_FRONT_RIGHT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_TOP_BACK_LEFT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_TOP_BACK_RIGHT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_BACK_CENTER_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_TOP_SIDE_LEFT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_TOP_SIDE_RIGHT_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_STEREO_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_2_1_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_3_0_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_4_0_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_BACK_SURROUND_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_QUAD_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_3_1_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_5_0_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_SIDE_SURROUND_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_5_0_SIDE_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_5_1_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_5_1_SIDE_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_7_0_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_7_1_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_5_1_2_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_5_1_4_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_7_1_2_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_SURROUND_SETUP_7_1_4_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrSoundFieldChannelMaskAmbixBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSoundFieldChannelMaskAmbixBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSoundFieldChannelMaskAmbixBD requires extension ";
        error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SOUND_FIELD_CHANNEL_MASK_AMBIX_1ST_ORDER_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_AMBIX_2ND_ORDER_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_AMBIX_3RD_ORDER_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_AMBIX_4TH_ORDER_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_AMBIX_5TH_ORDER_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_AMBIX_6TH_ORDER_BD:
            return true;
        case XR_SOUND_FIELD_CHANNEL_MASK_AMBIX_7TH_ORDER_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrSoundFieldChannelMaskFumaBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSoundFieldChannelMaskFumaBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSoundFieldChannelMaskFumaBD requires extension ";
        error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SOUND_FIELD_CHANNEL_MASK_FUMA_1ST_ORDER_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrSoundObstacleMaterialTypeBD enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSoundObstacleMaterialTypeBD value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_BD_spatial_audio_rendering, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_audio_rendering")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSoundObstacleMaterialTypeBD requires extension ";
        error_str += " \"XR_BD_spatial_audio_rendering\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_ACOUSTIC_TILE_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_BRICK_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_BRICK_PAINTED_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CARPET_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CARPET_HEAVY_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CARPET_HEAVY_PADDED_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CERAMIC_TILE_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CONCRETE_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CONCRETE_ROUGH_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CONCRETE_BLOCK_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CONCRETE_BLOCK_PAINTED_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CURTAIN_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_FOLIAGE_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_GLASS_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_GLASS_HEAVY_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_GRASS_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_GRAVEL_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_GYPSUM_BOARD_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_PLASTER_ON_BRICK_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_PLASTER_ON_CONCRETE_BLOCK_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_SOIL_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_SOUND_PROOF_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_SNOW_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_STEEL_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_WATER_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_WOOD_THIN_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_WOOD_THICK_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_WOOD_FLOOR_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_WOOD_ON_CONCRETE_BD:
            return true;
        case XR_SOUND_OBSTACLE_MATERIAL_TYPE_CUSTOM_BD:
            return true;
    default:
        return false;
}
}

// Function to validate XrHandTrackingDataSourceEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHandTrackingDataSourceEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_hand_tracking_data_source, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_hand_tracking_data_source")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHandTrackingDataSourceEXT requires extension ";
        error_str += " \"XR_EXT_hand_tracking_data_source\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HAND_TRACKING_DATA_SOURCE_UNOBSTRUCTED_EXT:
            return true;
        case XR_HAND_TRACKING_DATA_SOURCE_CONTROLLER_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrPlaneDetectorOrientationEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPlaneDetectorOrientationEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_plane_detection, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPlaneDetectorOrientationEXT requires extension ";
        error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PLANE_DETECTOR_ORIENTATION_HORIZONTAL_UPWARD_EXT:
            return true;
        case XR_PLANE_DETECTOR_ORIENTATION_HORIZONTAL_DOWNWARD_EXT:
            return true;
        case XR_PLANE_DETECTOR_ORIENTATION_VERTICAL_EXT:
            return true;
        case XR_PLANE_DETECTOR_ORIENTATION_ARBITRARY_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrPlaneDetectorSemanticTypeEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPlaneDetectorSemanticTypeEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_plane_detection, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPlaneDetectorSemanticTypeEXT requires extension ";
        error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PLANE_DETECTOR_SEMANTIC_TYPE_UNDEFINED_EXT:
            return true;
        case XR_PLANE_DETECTOR_SEMANTIC_TYPE_CEILING_EXT:
            return true;
        case XR_PLANE_DETECTOR_SEMANTIC_TYPE_FLOOR_EXT:
            return true;
        case XR_PLANE_DETECTOR_SEMANTIC_TYPE_WALL_EXT:
            return true;
        case XR_PLANE_DETECTOR_SEMANTIC_TYPE_PLATFORM_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrPlaneDetectionStateEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPlaneDetectionStateEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_plane_detection, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_plane_detection")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPlaneDetectionStateEXT requires extension ";
        error_str += " \"XR_EXT_plane_detection\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PLANE_DETECTION_STATE_NONE_EXT:
            return true;
        case XR_PLANE_DETECTION_STATE_PENDING_EXT:
            return true;
        case XR_PLANE_DETECTION_STATE_DONE_EXT:
            return true;
        case XR_PLANE_DETECTION_STATE_ERROR_EXT:
            return true;
        case XR_PLANE_DETECTION_STATE_FATAL_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrTrackingStateANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrTrackingStateANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrTrackingStateANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_TRACKING_STATE_PAUSED_ANDROID:
            return true;
        case XR_TRACKING_STATE_STOPPED_ANDROID:
            return true;
        case XR_TRACKING_STATE_TRACKING_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrTrackableTypeANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrTrackableTypeANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrTrackableTypeANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_TRACKABLE_TYPE_NOT_VALID_ANDROID:
            return true;
        case XR_TRACKABLE_TYPE_PLANE_ANDROID:
            return true;
        case XR_TRACKABLE_TYPE_DEPTH_ANDROID:
            // Enum value XR_TRACKABLE_TYPE_DEPTH_ANDROID requires extension XR_ANDROID_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrTrackableTypeANDROID value \"XR_TRACKABLE_TYPE_DEPTH_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TRACKABLE_TYPE_OBJECT_ANDROID:
            // Enum value XR_TRACKABLE_TYPE_OBJECT_ANDROID requires extension XR_ANDROID_trackables_object, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_object")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrTrackableTypeANDROID value \"XR_TRACKABLE_TYPE_OBJECT_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_object\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TRACKABLE_TYPE_MARKER_ANDROID:
            // Enum value XR_TRACKABLE_TYPE_MARKER_ANDROID requires extension XR_ANDROID_trackables_marker, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_marker")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrTrackableTypeANDROID value \"XR_TRACKABLE_TYPE_MARKER_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_marker\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TRACKABLE_TYPE_QR_CODE_ANDROID:
            // Enum value XR_TRACKABLE_TYPE_QR_CODE_ANDROID requires extension XR_ANDROID_trackables_qr_code, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_qr_code")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrTrackableTypeANDROID value \"XR_TRACKABLE_TYPE_QR_CODE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_qr_code\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_TRACKABLE_TYPE_IMAGE_ANDROID:
            // Enum value XR_TRACKABLE_TYPE_IMAGE_ANDROID requires extension XR_ANDROID_trackables_image, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrTrackableTypeANDROID value \"XR_TRACKABLE_TYPE_IMAGE_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrPlaneTypeANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPlaneTypeANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPlaneTypeANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PLANE_TYPE_HORIZONTAL_DOWNWARD_FACING_ANDROID:
            return true;
        case XR_PLANE_TYPE_HORIZONTAL_UPWARD_FACING_ANDROID:
            return true;
        case XR_PLANE_TYPE_VERTICAL_ANDROID:
            return true;
        case XR_PLANE_TYPE_ARBITRARY_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrPlaneLabelANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPlaneLabelANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPlaneLabelANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PLANE_LABEL_UNKNOWN_ANDROID:
            return true;
        case XR_PLANE_LABEL_WALL_ANDROID:
            return true;
        case XR_PLANE_LABEL_FLOOR_ANDROID:
            return true;
        case XR_PLANE_LABEL_CEILING_ANDROID:
            return true;
        case XR_PLANE_LABEL_TABLE_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrEyeIndexANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrEyeIndexANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_eye_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_eye_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrEyeIndexANDROID requires extension ";
        error_str += " \"XR_ANDROID_eye_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_EYE_INDEX_LEFT_ANDROID:
            return true;
        case XR_EYE_INDEX_RIGHT_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrEyeStateANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrEyeStateANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_eye_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_eye_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrEyeStateANDROID requires extension ";
        error_str += " \"XR_ANDROID_eye_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_EYE_STATE_INVALID_ANDROID:
            return true;
        case XR_EYE_STATE_GAZING_ANDROID:
            return true;
        case XR_EYE_STATE_SHUT_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrEyeTrackingModeANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrEyeTrackingModeANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_eye_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_eye_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrEyeTrackingModeANDROID requires extension ";
        error_str += " \"XR_ANDROID_eye_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_EYE_TRACKING_MODE_NOT_TRACKING_ANDROID:
            return true;
        case XR_EYE_TRACKING_MODE_RIGHT_ANDROID:
            return true;
        case XR_EYE_TRACKING_MODE_LEFT_ANDROID:
            return true;
        case XR_EYE_TRACKING_MODE_BOTH_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrAnchorPersistStateANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrAnchorPersistStateANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_device_anchor_persistence, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_device_anchor_persistence")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrAnchorPersistStateANDROID requires extension ";
        error_str += " \"XR_ANDROID_device_anchor_persistence\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_ANCHOR_PERSIST_STATE_PERSIST_NOT_REQUESTED_ANDROID:
            return true;
        case XR_ANCHOR_PERSIST_STATE_PERSIST_PENDING_ANDROID:
            return true;
        case XR_ANCHOR_PERSIST_STATE_PERSISTED_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceParameterIndicesANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceParameterIndicesANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_face_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_face_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceParameterIndicesANDROID requires extension ";
        error_str += " \"XR_ANDROID_face_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID:
            return true;
        case XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceTrackingStateANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceTrackingStateANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_face_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_face_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceTrackingStateANDROID requires extension ";
        error_str += " \"XR_ANDROID_face_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_TRACKING_STATE_PAUSED_ANDROID:
            return true;
        case XR_FACE_TRACKING_STATE_STOPPED_ANDROID:
            return true;
        case XR_FACE_TRACKING_STATE_TRACKING_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceConfidenceRegionsANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceConfidenceRegionsANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_face_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_face_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceConfidenceRegionsANDROID requires extension ";
        error_str += " \"XR_ANDROID_face_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_CONFIDENCE_REGIONS_LOWER_ANDROID:
            return true;
        case XR_FACE_CONFIDENCE_REGIONS_LEFT_UPPER_ANDROID:
            return true;
        case XR_FACE_CONFIDENCE_REGIONS_RIGHT_UPPER_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrPassthroughCameraStateANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPassthroughCameraStateANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_passthrough_camera_state, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_passthrough_camera_state")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPassthroughCameraStateANDROID requires extension ";
        error_str += " \"XR_ANDROID_passthrough_camera_state\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PASSTHROUGH_CAMERA_STATE_DISABLED_ANDROID:
            return true;
        case XR_PASSTHROUGH_CAMERA_STATE_INITIALIZING_ANDROID:
            return true;
        case XR_PASSTHROUGH_CAMERA_STATE_READY_ANDROID:
            return true;
        case XR_PASSTHROUGH_CAMERA_STATE_ERROR_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrWindingOrderANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrWindingOrderANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_composition_layer_passthrough_mesh, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_composition_layer_passthrough_mesh")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrWindingOrderANDROID requires extension ";
        error_str += " \"XR_ANDROID_composition_layer_passthrough_mesh\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_WINDING_ORDER_UNKNOWN_ANDROID:
            return true;
        case XR_WINDING_ORDER_CW_ANDROID:
            return true;
        case XR_WINDING_ORDER_CCW_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrPerformanceMetricsCounterUnitANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrPerformanceMetricsCounterUnitANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_performance_metrics, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_performance_metrics")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrPerformanceMetricsCounterUnitANDROID requires extension ";
        error_str += " \"XR_ANDROID_performance_metrics\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_ANDROID:
            return true;
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_ANDROID:
            return true;
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_ANDROID:
            return true;
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_ANDROID:
            return true;
        case XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrObjectLabelANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrObjectLabelANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables_object, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_object")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrObjectLabelANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables_object\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_OBJECT_LABEL_UNKNOWN_ANDROID:
            return true;
        case XR_OBJECT_LABEL_KEYBOARD_ANDROID:
            return true;
        case XR_OBJECT_LABEL_MOUSE_ANDROID:
            return true;
        case XR_OBJECT_LABEL_LAPTOP_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrFutureStateEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFutureStateEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_future, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_future")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFutureStateEXT requires extension ";
        error_str += " \"XR_EXT_future\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FUTURE_STATE_PENDING_EXT:
            return true;
        case XR_FUTURE_STATE_READY_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrHeadsetFitStatusML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHeadsetFitStatusML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_user_calibration, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_user_calibration")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHeadsetFitStatusML requires extension ";
        error_str += " \"XR_ML_user_calibration\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HEADSET_FIT_STATUS_UNKNOWN_ML:
            return true;
        case XR_HEADSET_FIT_STATUS_NOT_WORN_ML:
            return true;
        case XR_HEADSET_FIT_STATUS_GOOD_FIT_ML:
            return true;
        case XR_HEADSET_FIT_STATUS_BAD_FIT_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrEyeCalibrationStatusML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrEyeCalibrationStatusML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_user_calibration, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_user_calibration")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrEyeCalibrationStatusML requires extension ";
        error_str += " \"XR_ML_user_calibration\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_EYE_CALIBRATION_STATUS_UNKNOWN_ML:
            return true;
        case XR_EYE_CALIBRATION_STATUS_NONE_ML:
            return true;
        case XR_EYE_CALIBRATION_STATUS_COARSE_ML:
            return true;
        case XR_EYE_CALIBRATION_STATUS_FINE_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrWorldMeshDetectorLodML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrWorldMeshDetectorLodML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_world_mesh_detection, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrWorldMeshDetectorLodML requires extension ";
        error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_WORLD_MESH_DETECTOR_LOD_MINIMUM_ML:
            return true;
        case XR_WORLD_MESH_DETECTOR_LOD_MEDIUM_ML:
            return true;
        case XR_WORLD_MESH_DETECTOR_LOD_MAXIMUM_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrWorldMeshBlockStatusML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrWorldMeshBlockStatusML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_world_mesh_detection, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrWorldMeshBlockStatusML requires extension ";
        error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_WORLD_MESH_BLOCK_STATUS_NEW_ML:
            return true;
        case XR_WORLD_MESH_BLOCK_STATUS_UPDATED_ML:
            return true;
        case XR_WORLD_MESH_BLOCK_STATUS_DELETED_ML:
            return true;
        case XR_WORLD_MESH_BLOCK_STATUS_UNCHANGED_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrWorldMeshBlockResultML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrWorldMeshBlockResultML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_world_mesh_detection, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrWorldMeshBlockResultML requires extension ";
        error_str += " \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_WORLD_MESH_BLOCK_RESULT_SUCCESS_ML:
            return true;
        case XR_WORLD_MESH_BLOCK_RESULT_FAILED_ML:
            return true;
        case XR_WORLD_MESH_BLOCK_RESULT_PENDING_ML:
            return true;
        case XR_WORLD_MESH_BLOCK_RESULT_PARTIAL_UPDATE_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrFacialBlendShapeML enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFacialBlendShapeML value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ML_facial_expression, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_facial_expression")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFacialBlendShapeML requires extension ";
        error_str += " \"XR_ML_facial_expression\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACIAL_BLEND_SHAPE_BROW_LOWERER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_BROW_LOWERER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_CHEEK_RAISER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_CHEEK_RAISER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_CHIN_RAISER_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_DIMPLER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_DIMPLER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_EYES_CLOSED_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_EYES_CLOSED_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_INNER_BROW_RAISER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_INNER_BROW_RAISER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_JAW_DROP_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LID_TIGHTENER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LID_TIGHTENER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_CORNER_DEPRESSOR_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_CORNER_DEPRESSOR_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_CORNER_PULLER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_CORNER_PULLER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_FUNNELER_LB_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_FUNNELER_LT_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_FUNNELER_RB_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_FUNNELER_RT_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_PRESSOR_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_PRESSOR_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_PUCKER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_PUCKER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_STRETCHER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_STRETCHER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_SUCK_LB_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_SUCK_LT_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_SUCK_RB_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_SUCK_RT_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_TIGHTENER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIP_TIGHTENER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LIPS_TOWARD_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LOWER_LIP_DEPRESSOR_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_LOWER_LIP_DEPRESSOR_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_NOSE_WRINKLER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_NOSE_WRINKLER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_OUTER_BROW_RAISER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_OUTER_BROW_RAISER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_UPPER_LID_RAISER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_UPPER_LID_RAISER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_UPPER_LIP_RAISER_L_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_UPPER_LIP_RAISER_R_ML:
            return true;
        case XR_FACIAL_BLEND_SHAPE_TONGUE_OUT_ML:
            return true;
    default:
        return false;
}
}

// Function to validate XrBoundaryVisibilityMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrBoundaryVisibilityMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_boundary_visibility, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_boundary_visibility")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrBoundaryVisibilityMETA requires extension ";
        error_str += " \"XR_META_boundary_visibility\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_BOUNDARY_VISIBILITY_NOT_SUPPRESSED_META:
            return true;
        case XR_BOUNDARY_VISIBILITY_SUPPRESSED_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrFaceTrackingVisemeMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrFaceTrackingVisemeMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_face_tracking_visemes, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_face_tracking_visemes")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrFaceTrackingVisemeMETA requires extension ";
        error_str += " \"XR_META_face_tracking_visemes\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_FACE_TRACKING_VISEME_SIL_META:
            return true;
        case XR_FACE_TRACKING_VISEME_PP_META:
            return true;
        case XR_FACE_TRACKING_VISEME_FF_META:
            return true;
        case XR_FACE_TRACKING_VISEME_TH_META:
            return true;
        case XR_FACE_TRACKING_VISEME_DD_META:
            return true;
        case XR_FACE_TRACKING_VISEME_KK_META:
            return true;
        case XR_FACE_TRACKING_VISEME_CH_META:
            return true;
        case XR_FACE_TRACKING_VISEME_SS_META:
            return true;
        case XR_FACE_TRACKING_VISEME_NN_META:
            return true;
        case XR_FACE_TRACKING_VISEME_RR_META:
            return true;
        case XR_FACE_TRACKING_VISEME_AA_META:
            return true;
        case XR_FACE_TRACKING_VISEME_E_META:
            return true;
        case XR_FACE_TRACKING_VISEME_IH_META:
            return true;
        case XR_FACE_TRACKING_VISEME_OH_META:
            return true;
        case XR_FACE_TRACKING_VISEME_OU_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrSemanticLabelMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSemanticLabelMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_spatial_entity_semantic_label, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_semantic_label")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSemanticLabelMETA requires extension ";
        error_str += " \"XR_META_spatial_entity_semantic_label\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SEMANTIC_LABEL_UNKNOWN_META:
            return true;
        case XR_SEMANTIC_LABEL_FLOOR_META:
            return true;
        case XR_SEMANTIC_LABEL_CEILING_META:
            return true;
        case XR_SEMANTIC_LABEL_WALL_FACE_META:
            return true;
        case XR_SEMANTIC_LABEL_INNER_WALL_FACE_META:
            return true;
        case XR_SEMANTIC_LABEL_INVISIBLE_WALL_FACE_META:
            return true;
        case XR_SEMANTIC_LABEL_DOOR_FRAME_META:
            return true;
        case XR_SEMANTIC_LABEL_WINDOW_FRAME_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrEnvironmentRaycastHitStatusMETA enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrEnvironmentRaycastHitStatusMETA value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_META_environment_raycast, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrEnvironmentRaycastHitStatusMETA requires extension ";
        error_str += " \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_ENVIRONMENT_RAYCAST_HIT_STATUS_HIT_META:
            return true;
        case XR_ENVIRONMENT_RAYCAST_HIT_STATUS_NO_HIT_META:
            return true;
        case XR_ENVIRONMENT_RAYCAST_HIT_STATUS_HIT_POINT_OCCLUDED_META:
            return true;
        case XR_ENVIRONMENT_RAYCAST_HIT_STATUS_HIT_POINT_OUTSIDE_OF_FOV_META:
            return true;
        case XR_ENVIRONMENT_RAYCAST_HIT_STATUS_RAY_OCCLUDED_META:
            return true;
        case XR_ENVIRONMENT_RAYCAST_HIT_STATUS_HIT_INVALID_ORIENTATION_META:
            return true;
    default:
        return false;
}
}

// Function to validate XrLightEstimateStateANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrLightEstimateStateANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_light_estimation, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrLightEstimateStateANDROID requires extension ";
        error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID:
            return true;
        case XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrSphericalHarmonicsKindANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSphericalHarmonicsKindANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_light_estimation, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_light_estimation")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSphericalHarmonicsKindANDROID requires extension ";
        error_str += " \"XR_ANDROID_light_estimation\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID:
            return true;
        case XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrTrackableMarkerTrackingModeANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrTrackableMarkerTrackingModeANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables_marker, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_marker")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrTrackableMarkerTrackingModeANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables_marker\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_TRACKABLE_MARKER_TRACKING_MODE_DYNAMIC_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_TRACKING_MODE_STATIC_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrTrackableMarkerDictionaryANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrTrackableMarkerDictionaryANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables_marker, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_marker")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrTrackableMarkerDictionaryANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables_marker\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_4X4_50_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_4X4_100_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_4X4_250_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_4X4_1000_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_5X5_50_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_5X5_100_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_5X5_250_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_5X5_1000_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_6X6_50_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_6X6_100_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_6X6_250_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_6X6_1000_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_7X7_50_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_7X7_100_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_7X7_250_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_7X7_1000_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_APRILTAG_16H5_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_APRILTAG_25H9_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_APRILTAG_36H10_ANDROID:
            return true;
        case XR_TRACKABLE_MARKER_DICTIONARY_APRILTAG_36H11_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrQrCodeTrackingModeANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrQrCodeTrackingModeANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables_qr_code, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_qr_code")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrQrCodeTrackingModeANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables_qr_code\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID:
            return true;
        case XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrTrackableImageTrackingModeANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrTrackableImageTrackingModeANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables_image, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrTrackableImageTrackingModeANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_TRACKABLE_IMAGE_TRACKING_MODE_DYNAMIC_ANDROID:
            return true;
        case XR_TRACKABLE_IMAGE_TRACKING_MODE_STATIC_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrTrackableImageFormatANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrTrackableImageFormatANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_trackables_image, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrTrackableImageFormatANDROID requires extension ";
        error_str += " \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_TRACKABLE_IMAGE_FORMAT_R8G8B8A8_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneMeshSemanticLabelSetANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneMeshSemanticLabelSetANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_scene_meshing, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneMeshSemanticLabelSetANDROID requires extension ";
        error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID:
            return true;
        case XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneMeshTrackingStateANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneMeshTrackingStateANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_scene_meshing, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneMeshTrackingStateANDROID requires extension ";
        error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID:
            return true;
        case XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID:
            return true;
        case XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID:
            return true;
        case XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrSceneMeshSemanticLabelANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSceneMeshSemanticLabelANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_scene_meshing, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_scene_meshing")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSceneMeshSemanticLabelANDROID requires extension ";
        error_str += " \"XR_ANDROID_scene_meshing\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID:
            return true;
        case XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID:
            return true;
        case XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID:
            return true;
        case XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID:
            return true;
        case XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialCapabilityEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialCapabilityEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_entity, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialCapabilityEXT requires extension ";
        error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT:
            // Enum value XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityEXT value \"XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT:
            // Enum value XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityEXT value \"XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT:
            // Enum value XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityEXT value \"XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT:
            // Enum value XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityEXT value \"XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT:
            // Enum value XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityEXT value \"XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_CAPABILITY_ANCHOR_EXT:
            // Enum value XR_SPATIAL_CAPABILITY_ANCHOR_EXT requires extension XR_EXT_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityEXT value \"XR_SPATIAL_CAPABILITY_ANCHOR_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID:
            // Enum value XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID requires extension XR_ANDROID_spatial_object_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_object_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityEXT value \"XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_object_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID:
            // Enum value XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID requires extension XR_ANDROID_spatial_discovery_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_discovery_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityEXT value \"XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_discovery_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialCapabilityFeatureEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialCapabilityFeatureEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_entity, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialCapabilityFeatureEXT requires extension ";
        error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT:
            // Enum value XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityFeatureEXT value \"XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT:
            // Enum value XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialCapabilityFeatureEXT value \"XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialComponentTypeEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialComponentTypeEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_entity, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialComponentTypeEXT requires extension ";
        error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT:
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT:
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT:
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT:
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT requires extension XR_EXT_spatial_anchor, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_anchor")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_anchor\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT requires extension XR_EXT_spatial_persistence, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID requires extension XR_ANDROID_spatial_object_tracking, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_object_tracking")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_object_tracking\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID requires extension XR_ANDROID_spatial_discovery_raycast, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_discovery_raycast")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_discovery_raycast\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID:
            // Enum value XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID requires extension XR_ANDROID_spatial_component_subsumed_by, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_component_subsumed_by")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialComponentTypeEXT value \"XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_ANDROID_spatial_component_subsumed_by\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialEntityTrackingStateEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialEntityTrackingStateEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_entity, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialEntityTrackingStateEXT requires extension ";
        error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT:
            return true;
        case XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT:
            return true;
        case XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialBufferTypeEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialBufferTypeEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_entity, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialBufferTypeEXT requires extension ";
        error_str += " \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_BUFFER_TYPE_UNKNOWN_EXT:
            return true;
        case XR_SPATIAL_BUFFER_TYPE_STRING_EXT:
            return true;
        case XR_SPATIAL_BUFFER_TYPE_UINT8_EXT:
            return true;
        case XR_SPATIAL_BUFFER_TYPE_UINT16_EXT:
            return true;
        case XR_SPATIAL_BUFFER_TYPE_UINT32_EXT:
            return true;
        case XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT:
            return true;
        case XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT:
            return true;
        case XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialPlaneAlignmentEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialPlaneAlignmentEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialPlaneAlignmentEXT requires extension ";
        error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_PLANE_ALIGNMENT_HORIZONTAL_UPWARD_EXT:
            return true;
        case XR_SPATIAL_PLANE_ALIGNMENT_HORIZONTAL_DOWNWARD_EXT:
            return true;
        case XR_SPATIAL_PLANE_ALIGNMENT_VERTICAL_EXT:
            return true;
        case XR_SPATIAL_PLANE_ALIGNMENT_ARBITRARY_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialPlaneSemanticLabelEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialPlaneSemanticLabelEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_plane_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialPlaneSemanticLabelEXT requires extension ";
        error_str += " \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT:
            return true;
        case XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT:
            return true;
        case XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT:
            return true;
        case XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT:
            return true;
        case XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialMarkerArucoDictEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialMarkerArucoDictEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialMarkerArucoDictEXT requires extension ";
        error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_MARKER_ARUCO_DICT_4X4_50_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_4X4_100_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_4X4_250_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_4X4_1000_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_5X5_50_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_5X5_100_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_5X5_250_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_5X5_1000_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_6X6_50_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_6X6_100_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_6X6_250_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_6X6_1000_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_7X7_50_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_7X7_100_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_7X7_250_EXT:
            return true;
        case XR_SPATIAL_MARKER_ARUCO_DICT_7X7_1000_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialMarkerAprilTagDictEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialMarkerAprilTagDictEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_marker_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialMarkerAprilTagDictEXT requires extension ";
        error_str += " \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_MARKER_APRIL_TAG_DICT_16H5_EXT:
            return true;
        case XR_SPATIAL_MARKER_APRIL_TAG_DICT_25H9_EXT:
            return true;
        case XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H10_EXT:
            return true;
        case XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H11_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialPersistenceScopeEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialPersistenceScopeEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_persistence, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialPersistenceScopeEXT requires extension ";
        error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_PERSISTENCE_SCOPE_SYSTEM_MANAGED_EXT:
            return true;
        case XR_SPATIAL_PERSISTENCE_SCOPE_LOCAL_ANCHORS_EXT:
            // Enum value XR_SPATIAL_PERSISTENCE_SCOPE_LOCAL_ANCHORS_EXT requires extension XR_EXT_spatial_persistence_operations, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialPersistenceScopeEXT value \"XR_SPATIAL_PERSISTENCE_SCOPE_LOCAL_ANCHORS_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialPersistenceContextResultEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialPersistenceContextResultEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_persistence, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialPersistenceContextResultEXT requires extension ";
        error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_SUCCESS_EXT:
            return true;
        case XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_ENTITY_NOT_TRACKING_EXT:
            // Enum value XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_ENTITY_NOT_TRACKING_EXT requires extension XR_EXT_spatial_persistence_operations, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialPersistenceContextResultEXT value \"XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_ENTITY_NOT_TRACKING_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
        case XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_PERSIST_UUID_NOT_FOUND_EXT:
            // Enum value XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_PERSIST_UUID_NOT_FOUND_EXT requires extension XR_EXT_spatial_persistence_operations, so check that it is enabled
            if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
                std::string vuid = "VUID-";
                vuid += validation_name;
                vuid += "-";
                vuid += item_name;
                vuid += "-parameter";
                std::string error_str = "XrSpatialPersistenceContextResultEXT value \"XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_PERSIST_UUID_NOT_FOUND_EXT\"";
                error_str += " being used, which requires extension ";
                error_str += " \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
                CoreValidLogMessage(instance_info, vuid,
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info, error_str);
                return false;
            }
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialPersistenceStateEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialPersistenceStateEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_spatial_persistence, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialPersistenceStateEXT requires extension ";
        error_str += " \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_PERSISTENCE_STATE_LOADED_EXT:
            return true;
        case XR_SPATIAL_PERSISTENCE_STATE_NOT_FOUND_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrHapticParametricStreamFrameTypeEXT enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrHapticParametricStreamFrameTypeEXT value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_EXT_haptic_parametric, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_haptic_parametric")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrHapticParametricStreamFrameTypeEXT requires extension ";
        error_str += " \"XR_EXT_haptic_parametric\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_HAPTIC_PARAMETRIC_STREAM_FRAME_TYPE_NONE_EXT:
            return true;
        case XR_HAPTIC_PARAMETRIC_STREAM_FRAME_TYPE_FIRST_FRAME_EXT:
            return true;
        case XR_HAPTIC_PARAMETRIC_STREAM_FRAME_TYPE_INTERMEDIATE_FRAME_EXT:
            return true;
        case XR_HAPTIC_PARAMETRIC_STREAM_FRAME_TYPE_LAST_FRAME_EXT:
            return true;
    default:
        return false;
}
}

// Function to validate XrSpatialObjectSemanticLabelANDROID enum
bool ValidateXrEnum(GenValidUsageXrInstanceInfo *instance_info,
                    const std::string &command_name,
                    const std::string &validation_name,
                    const std::string &item_name,
                    std::vector<GenValidUsageXrObjectInfo>& objects_info,
                    const XrSpatialObjectSemanticLabelANDROID value) {
    (void)instance_info;  // quiet warnings
    (void)command_name;  // quiet warnings
    (void)validation_name;  // quiet warnings
    (void)item_name;  // quiet warnings
    (void)objects_info;  // quiet warnings
    // Enum requires extension XR_ANDROID_spatial_object_tracking, so check that it is enabled
    if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_object_tracking")) {
        std::string vuid = "VUID-";
        vuid += validation_name;
        vuid += "-";
        vuid += item_name;
        vuid += "-parameter";
        std::string error_str = "XrSpatialObjectSemanticLabelANDROID requires extension ";
        error_str += " \"XR_ANDROID_spatial_object_tracking\" to be enabled, but it is not enabled";
        CoreValidLogMessage(instance_info, vuid,
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, error_str);
        return false;
    }
    switch (value) {
        case XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_ANDROID:
            return true;
        case XR_SPATIAL_OBJECT_SEMANTIC_LABEL_KEYBOARD_ANDROID:
            return true;
        case XR_SPATIAL_OBJECT_SEMANTIC_LABEL_MOUSE_ANDROID:
            return true;
        case XR_SPATIAL_OBJECT_SEMANTIC_LABEL_LAPTOP_BASE_ANDROID:
            return true;
    default:
        return false;
}
}

bool ExtensionEnabled(const std::vector<std::string> &extensions, const char* const check_extension_name) {
    for (const auto& enabled_extension: extensions) {
        if (enabled_extension == check_extension_name) {
            return true;
        }
    }
    return false;
}

bool ValidateInstanceExtensionDependencies(GenValidUsageXrInstanceInfo *gen_instance_info,
                                           const std::string &command,
                                           const std::string &struct_name,
                                           std::vector<GenValidUsageXrObjectInfo>& objects_info,
                                           std::vector<std::string> &extensions) {
    for (uint32_t cur_index = 0; cur_index < extensions.size(); ++cur_index) {
    }
    return true;
}

bool ValidateSystemExtensionDependencies(GenValidUsageXrInstanceInfo *gen_instance_info,
                                         const std::string &command,
                                         const std::string &struct_name,
                                         std::vector<GenValidUsageXrObjectInfo>& objects_info,
                                         std::vector<std::string> &extensions) {
    // No system extensions to check dependencies for
    (void)gen_instance_info;
    (void)command;
    (void)struct_name;
    (void)objects_info;
    (void)extensions;
    return true;
}

ValidateXrHandleResult VerifyXrInstanceHandle(const XrInstance* handle_to_check) {
    return g_instance_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSessionHandle(const XrSession* handle_to_check) {
    return g_session_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpaceHandle(const XrSpace* handle_to_check) {
    return g_space_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrActionHandle(const XrAction* handle_to_check) {
    return g_action_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSwapchainHandle(const XrSwapchain* handle_to_check) {
    return g_swapchain_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrActionSetHandle(const XrActionSet* handle_to_check) {
    return g_actionset_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrDebugUtilsMessengerEXTHandle(const XrDebugUtilsMessengerEXT* handle_to_check) {
    return g_debugutilsmessengerext_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpatialAnchorMSFTHandle(const XrSpatialAnchorMSFT* handle_to_check) {
    return g_spatialanchormsft_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpatialGraphNodeBindingMSFTHandle(const XrSpatialGraphNodeBindingMSFT* handle_to_check) {
    return g_spatialgraphnodebindingmsft_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrHandTrackerEXTHandle(const XrHandTrackerEXT* handle_to_check) {
    return g_handtrackerext_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrBodyTrackerFBHandle(const XrBodyTrackerFB* handle_to_check) {
    return g_bodytrackerfb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSceneObserverMSFTHandle(const XrSceneObserverMSFT* handle_to_check) {
    return g_sceneobservermsft_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSceneMSFTHandle(const XrSceneMSFT* handle_to_check) {
    return g_scenemsft_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrFacialTrackerHTCHandle(const XrFacialTrackerHTC* handle_to_check) {
    return g_facialtrackerhtc_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrFoveationProfileFBHandle(const XrFoveationProfileFB* handle_to_check) {
    return g_foveationprofilefb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrTriangleMeshFBHandle(const XrTriangleMeshFB* handle_to_check) {
    return g_trianglemeshfb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrPassthroughFBHandle(const XrPassthroughFB* handle_to_check) {
    return g_passthroughfb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrPassthroughLayerFBHandle(const XrPassthroughLayerFB* handle_to_check) {
    return g_passthroughlayerfb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrGeometryInstanceFBHandle(const XrGeometryInstanceFB* handle_to_check) {
    return g_geometryinstancefb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrMarkerDetectorMLHandle(const XrMarkerDetectorML* handle_to_check) {
    return g_markerdetectorml_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrExportedLocalizationMapMLHandle(const XrExportedLocalizationMapML* handle_to_check) {
    return g_exportedlocalizationmapml_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpatialAnchorsStorageMLHandle(const XrSpatialAnchorsStorageML* handle_to_check) {
    return g_spatialanchorsstorageml_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpatialAnchorStoreConnectionMSFTHandle(const XrSpatialAnchorStoreConnectionMSFT* handle_to_check) {
    return g_spatialanchorstoreconnectionmsft_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpaceUserFBHandle(const XrSpaceUserFB* handle_to_check) {
    return g_spaceuserfb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrFaceTrackerFBHandle(const XrFaceTrackerFB* handle_to_check) {
    return g_facetrackerfb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrEyeTrackerFBHandle(const XrEyeTrackerFB* handle_to_check) {
    return g_eyetrackerfb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrVirtualKeyboardMETAHandle(const XrVirtualKeyboardMETA* handle_to_check) {
    return g_virtualkeyboardmeta_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrPassthroughColorLutMETAHandle(const XrPassthroughColorLutMETA* handle_to_check) {
    return g_passthroughcolorlutmeta_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrFaceTracker2FBHandle(const XrFaceTracker2FB* handle_to_check) {
    return g_facetracker2fb_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrEnvironmentDepthProviderMETAHandle(const XrEnvironmentDepthProviderMETA* handle_to_check) {
    return g_environmentdepthprovidermeta_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrEnvironmentDepthSwapchainMETAHandle(const XrEnvironmentDepthSwapchainMETA* handle_to_check) {
    return g_environmentdepthswapchainmeta_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrRenderModelEXTHandle(const XrRenderModelEXT* handle_to_check) {
    return g_rendermodelext_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrRenderModelAssetEXTHandle(const XrRenderModelAssetEXT* handle_to_check) {
    return g_rendermodelassetext_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrPassthroughHTCHandle(const XrPassthroughHTC* handle_to_check) {
    return g_passthroughhtc_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrBodyTrackerHTCHandle(const XrBodyTrackerHTC* handle_to_check) {
    return g_bodytrackerhtc_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrBodyTrackerBDHandle(const XrBodyTrackerBD* handle_to_check) {
    return g_bodytrackerbd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrFaceTrackerBDHandle(const XrFaceTrackerBD* handle_to_check) {
    return g_facetrackerbd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSenseDataProviderBDHandle(const XrSenseDataProviderBD* handle_to_check) {
    return g_sensedataproviderbd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSenseDataSnapshotBDHandle(const XrSenseDataSnapshotBD* handle_to_check) {
    return g_sensedatasnapshotbd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrAnchorBDHandle(const XrAnchorBD* handle_to_check) {
    return g_anchorbd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpatialAudioRendererBDHandle(const XrSpatialAudioRendererBD* handle_to_check) {
    return g_spatialaudiorendererbd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSoundFieldBDHandle(const XrSoundFieldBD* handle_to_check) {
    return g_soundfieldbd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSoundObjectBDHandle(const XrSoundObjectBD* handle_to_check) {
    return g_soundobjectbd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSoundObstacleBDHandle(const XrSoundObstacleBD* handle_to_check) {
    return g_soundobstaclebd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSoundObstacleMaterialBDHandle(const XrSoundObstacleMaterialBD* handle_to_check) {
    return g_soundobstaclematerialbd_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrPlaneDetectorEXTHandle(const XrPlaneDetectorEXT* handle_to_check) {
    return g_planedetectorext_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrTrackableTrackerANDROIDHandle(const XrTrackableTrackerANDROID* handle_to_check) {
    return g_trackabletrackerandroid_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrEyeTrackerANDROIDHandle(const XrEyeTrackerANDROID* handle_to_check) {
    return g_eyetrackerandroid_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrDeviceAnchorPersistenceANDROIDHandle(const XrDeviceAnchorPersistenceANDROID* handle_to_check) {
    return g_deviceanchorpersistenceandroid_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrFaceTrackerANDROIDHandle(const XrFaceTrackerANDROID* handle_to_check) {
    return g_facetrackerandroid_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrPassthroughLayerANDROIDHandle(const XrPassthroughLayerANDROID* handle_to_check) {
    return g_passthroughlayerandroid_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrWorldMeshDetectorMLHandle(const XrWorldMeshDetectorML* handle_to_check) {
    return g_worldmeshdetectorml_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrFacialExpressionClientMLHandle(const XrFacialExpressionClientML* handle_to_check) {
    return g_facialexpressionclientml_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrEnvironmentRaycasterMETAHandle(const XrEnvironmentRaycasterMETA* handle_to_check) {
    return g_environmentraycastermeta_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrLightEstimatorANDROIDHandle(const XrLightEstimatorANDROID* handle_to_check) {
    return g_lightestimatorandroid_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrTrackableImageDatabaseANDROIDHandle(const XrTrackableImageDatabaseANDROID* handle_to_check) {
    return g_trackableimagedatabaseandroid_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSceneMeshingTrackerANDROIDHandle(const XrSceneMeshingTrackerANDROID* handle_to_check) {
    return g_scenemeshingtrackerandroid_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSceneMeshSnapshotANDROIDHandle(const XrSceneMeshSnapshotANDROID* handle_to_check) {
    return g_scenemeshsnapshotandroid_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpatialEntityEXTHandle(const XrSpatialEntityEXT* handle_to_check) {
    return g_spatialentityext_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpatialContextEXTHandle(const XrSpatialContextEXT* handle_to_check) {
    return g_spatialcontextext_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpatialSnapshotEXTHandle(const XrSpatialSnapshotEXT* handle_to_check) {
    return g_spatialsnapshotext_info.verifyHandle(handle_to_check);
}

ValidateXrHandleResult VerifyXrSpatialPersistenceContextEXTHandle(const XrSpatialPersistenceContextEXT* handle_to_check) {
    return g_spatialpersistencecontextext_info.verifyHandle(handle_to_check);
}

// Implementation function to get parent handle information
bool GetXrParent(const XrObjectType inhandle_type, const uint64_t inhandle,
                 XrObjectType& outhandle_type, uint64_t& outhandle) {
    if (inhandle_type == XR_OBJECT_TYPE_INSTANCE) {
        return false;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SESSION) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_session_info.get(TreatIntegerAsHandle<XrSession>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPACE) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_space_info.get(TreatIntegerAsHandle<XrSpace>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_ACTION) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_action_info.get(TreatIntegerAsHandle<XrAction>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SWAPCHAIN) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_swapchain_info.get(TreatIntegerAsHandle<XrSwapchain>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_ACTION_SET) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_actionset_info.get(TreatIntegerAsHandle<XrActionSet>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_debugutilsmessengerext_info.get(TreatIntegerAsHandle<XrDebugUtilsMessengerEXT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spatialanchormsft_info.get(TreatIntegerAsHandle<XrSpatialAnchorMSFT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spatialgraphnodebindingmsft_info.get(TreatIntegerAsHandle<XrSpatialGraphNodeBindingMSFT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_HAND_TRACKER_EXT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_handtrackerext_info.get(TreatIntegerAsHandle<XrHandTrackerEXT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_BODY_TRACKER_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_bodytrackerfb_info.get(TreatIntegerAsHandle<XrBodyTrackerFB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_sceneobservermsft_info.get(TreatIntegerAsHandle<XrSceneObserverMSFT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SCENE_MSFT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_scenemsft_info.get(TreatIntegerAsHandle<XrSceneMSFT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_FACIAL_TRACKER_HTC) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_facialtrackerhtc_info.get(TreatIntegerAsHandle<XrFacialTrackerHTC>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_FOVEATION_PROFILE_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_foveationprofilefb_info.get(TreatIntegerAsHandle<XrFoveationProfileFB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_TRIANGLE_MESH_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_trianglemeshfb_info.get(TreatIntegerAsHandle<XrTriangleMeshFB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_PASSTHROUGH_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_passthroughfb_info.get(TreatIntegerAsHandle<XrPassthroughFB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_passthroughlayerfb_info.get(TreatIntegerAsHandle<XrPassthroughLayerFB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_geometryinstancefb_info.get(TreatIntegerAsHandle<XrGeometryInstanceFB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_MARKER_DETECTOR_ML) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_markerdetectorml_info.get(TreatIntegerAsHandle<XrMarkerDetectorML>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_EXPORTED_LOCALIZATION_MAP_ML) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_exportedlocalizationmapml_info.get(TreatIntegerAsHandle<XrExportedLocalizationMapML>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spatialanchorsstorageml_info.get(TreatIntegerAsHandle<XrSpatialAnchorsStorageML>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spatialanchorstoreconnectionmsft_info.get(TreatIntegerAsHandle<XrSpatialAnchorStoreConnectionMSFT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPACE_USER_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spaceuserfb_info.get(TreatIntegerAsHandle<XrSpaceUserFB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_FACE_TRACKER_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_facetrackerfb_info.get(TreatIntegerAsHandle<XrFaceTrackerFB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_EYE_TRACKER_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_eyetrackerfb_info.get(TreatIntegerAsHandle<XrEyeTrackerFB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_virtualkeyboardmeta_info.get(TreatIntegerAsHandle<XrVirtualKeyboardMETA>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_PASSTHROUGH_COLOR_LUT_META) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_passthroughcolorlutmeta_info.get(TreatIntegerAsHandle<XrPassthroughColorLutMETA>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_FACE_TRACKER2_FB) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_facetracker2fb_info.get(TreatIntegerAsHandle<XrFaceTracker2FB>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_environmentdepthprovidermeta_info.get(TreatIntegerAsHandle<XrEnvironmentDepthProviderMETA>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_META) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_environmentdepthswapchainmeta_info.get(TreatIntegerAsHandle<XrEnvironmentDepthSwapchainMETA>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_RENDER_MODEL_EXT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_rendermodelext_info.get(TreatIntegerAsHandle<XrRenderModelEXT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_RENDER_MODEL_ASSET_EXT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_rendermodelassetext_info.get(TreatIntegerAsHandle<XrRenderModelAssetEXT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_PASSTHROUGH_HTC) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_passthroughhtc_info.get(TreatIntegerAsHandle<XrPassthroughHTC>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_BODY_TRACKER_HTC) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_bodytrackerhtc_info.get(TreatIntegerAsHandle<XrBodyTrackerHTC>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_BODY_TRACKER_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_bodytrackerbd_info.get(TreatIntegerAsHandle<XrBodyTrackerBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_FACE_TRACKER_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_facetrackerbd_info.get(TreatIntegerAsHandle<XrFaceTrackerBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_sensedataproviderbd_info.get(TreatIntegerAsHandle<XrSenseDataProviderBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_sensedatasnapshotbd_info.get(TreatIntegerAsHandle<XrSenseDataSnapshotBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_ANCHOR_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_anchorbd_info.get(TreatIntegerAsHandle<XrAnchorBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spatialaudiorendererbd_info.get(TreatIntegerAsHandle<XrSpatialAudioRendererBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SOUND_FIELD_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_soundfieldbd_info.get(TreatIntegerAsHandle<XrSoundFieldBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SOUND_OBJECT_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_soundobjectbd_info.get(TreatIntegerAsHandle<XrSoundObjectBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SOUND_OBSTACLE_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_soundobstaclebd_info.get(TreatIntegerAsHandle<XrSoundObstacleBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SOUND_OBSTACLE_MATERIAL_BD) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_soundobstaclematerialbd_info.get(TreatIntegerAsHandle<XrSoundObstacleMaterialBD>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_PLANE_DETECTOR_EXT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_planedetectorext_info.get(TreatIntegerAsHandle<XrPlaneDetectorEXT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_trackabletrackerandroid_info.get(TreatIntegerAsHandle<XrTrackableTrackerANDROID>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_EYE_TRACKER_ANDROID) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_eyetrackerandroid_info.get(TreatIntegerAsHandle<XrEyeTrackerANDROID>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_deviceanchorpersistenceandroid_info.get(TreatIntegerAsHandle<XrDeviceAnchorPersistenceANDROID>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_FACE_TRACKER_ANDROID) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_facetrackerandroid_info.get(TreatIntegerAsHandle<XrFaceTrackerANDROID>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_PASSTHROUGH_LAYER_ANDROID) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_passthroughlayerandroid_info.get(TreatIntegerAsHandle<XrPassthroughLayerANDROID>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_worldmeshdetectorml_info.get(TreatIntegerAsHandle<XrWorldMeshDetectorML>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_FACIAL_EXPRESSION_CLIENT_ML) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_facialexpressionclientml_info.get(TreatIntegerAsHandle<XrFacialExpressionClientML>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_ENVIRONMENT_RAYCASTER_META) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_environmentraycastermeta_info.get(TreatIntegerAsHandle<XrEnvironmentRaycasterMETA>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_lightestimatorandroid_info.get(TreatIntegerAsHandle<XrLightEstimatorANDROID>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_trackableimagedatabaseandroid_info.get(TreatIntegerAsHandle<XrTrackableImageDatabaseANDROID>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_scenemeshingtrackerandroid_info.get(TreatIntegerAsHandle<XrSceneMeshingTrackerANDROID>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_scenemeshsnapshotandroid_info.get(TreatIntegerAsHandle<XrSceneMeshSnapshotANDROID>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spatialentityext_info.get(TreatIntegerAsHandle<XrSpatialEntityEXT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spatialcontextext_info.get(TreatIntegerAsHandle<XrSpatialContextEXT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spatialsnapshotext_info.get(TreatIntegerAsHandle<XrSpatialSnapshotEXT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    if (inhandle_type == XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT) {
        // Get the object and parent of the handle
        GenValidUsageXrHandleInfo *handle_info = g_spatialpersistencecontextext_info.get(TreatIntegerAsHandle<XrSpatialPersistenceContextEXT>(inhandle));
        outhandle_type = handle_info->direct_parent_type;
        outhandle = handle_info->direct_parent_handle;
        return true;
    }
    return false;
}

// Implementation of VerifyXrParent function
bool VerifyXrParent(XrObjectType handle1_type, const uint64_t handle1,
                    XrObjectType handle2_type, const uint64_t handle2,
                    bool check_this) {
    if (IsIntegerNullHandle(handle1) || IsIntegerNullHandle(handle2)) {
        return false;
    } else if (check_this && handle1_type == handle2_type) {
        return (handle1 == handle2);
    }
    if (handle1_type == XR_OBJECT_TYPE_INSTANCE && handle2_type != XR_OBJECT_TYPE_INSTANCE) {
        XrObjectType parent_type;
        uint64_t parent_handle;
        if (!GetXrParent(handle2_type, handle2, parent_type, parent_handle)) {
            return false;
        }
        return VerifyXrParent(handle1_type, handle1, parent_type, parent_handle, true);
    } else if (handle2_type == XR_OBJECT_TYPE_INSTANCE && handle1_type != XR_OBJECT_TYPE_INSTANCE) {
        XrObjectType parent_type;
        uint64_t parent_handle;
        if (!GetXrParent(handle1_type, handle1, parent_type, parent_handle)) {
            return false;
        }
        return VerifyXrParent(parent_type, parent_handle, handle2_type, handle2, true);
    } else {
        XrObjectType parent1_type;
        uint64_t parent1_handle;
                XrObjectType parent2_type;
        uint64_t parent2_handle;
        if (!GetXrParent(handle1_type, handle1, parent1_type, parent1_handle)) {
            return false;
        }
        if (!GetXrParent(handle2_type, handle2, parent2_type, parent2_handle)) {
            return false;
        }
        if (parent1_type == handle2_type) {
            return (parent1_handle == handle2);
        } else if (handle1_type == parent2_type) {
            return (handle1 == parent2_handle);
        } else {
            return VerifyXrParent(parent1_type, parent1_handle, parent2_type, parent2_handle, true);
        }
    }
    return false;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrApiLayerProperties* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_API_LAYER_PROPERTIES) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrApiLayerProperties",
                             value->type, "VUID-XrApiLayerProperties-type-type", XR_TYPE_API_LAYER_PROPERTIES, "XR_TYPE_API_LAYER_PROPERTIES");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrApiLayerProperties-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrApiLayerProperties struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrApiLayerProperties : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrApiLayerProperties-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrApiLayerProperties : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrApiLayerProperties-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "layerName" because this struct is returned only.
    // Skip checking member "specVersion" because this struct is returned only.
    // Skip checking member "layerVersion" because this struct is returned only.
    // Skip checking member "description" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtensionProperties* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EXTENSION_PROPERTIES) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrExtensionProperties",
                             value->type, "VUID-XrExtensionProperties-type-type", XR_TYPE_EXTENSION_PROPERTIES, "XR_TYPE_EXTENSION_PROPERTIES");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrExtensionProperties-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrExtensionProperties struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrExtensionProperties : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrExtensionProperties-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrExtensionProperties : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrExtensionProperties-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "extensionName" because this struct is returned only.
    // Skip checking member "extensionVersion" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrApplicationInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInstanceCreateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INSTANCE_CREATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInstanceCreateInfo",
                             value->type, "VUID-XrInstanceCreateInfo-type-type", XR_TYPE_INSTANCE_CREATE_INFO, "XR_TYPE_INSTANCE_CREATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT);
        valid_ext_structs.insert(XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInstanceCreateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInstanceCreateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInstanceCreateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult instance_create_flags_result = ValidateXrInstanceCreateFlags(value->createFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == instance_create_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrInstanceCreateInfo invalid member XrInstanceCreateFlags \"createFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfo-createFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Validate that the structure XrApplicationInfo is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->applicationInfo);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfo-applicationInfo-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrInstanceCreateInfo member applicationInfo is invalid");
        return xr_result;
    }
    // Optional array must be non-NULL when value->enabledApiLayerCount is non-zero
    if (0 != value->enabledApiLayerCount && nullptr == value->enabledApiLayerNames) {
        CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfo-enabledApiLayerNames-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrInstanceCreateInfo member enabledApiLayerCount is NULL, but value->enabledApiLayerCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledApiLayerNames && 0 != value->enabledApiLayerCount) {
        CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfo-enabledApiLayerNames-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrInstanceCreateInfo contains invalid NULL for char \"enabledApiLayerNames\" is which not "
                            "optional since \"enabledApiLayerCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrInstanceCreateInfo-enabledApiLayerNames-parameter" null-termination
    // Optional array must be non-NULL when value->enabledExtensionCount is non-zero
    if (0 != value->enabledExtensionCount && nullptr == value->enabledExtensionNames) {
        CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfo-enabledExtensionNames-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrInstanceCreateInfo member enabledExtensionCount is NULL, but value->enabledExtensionCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledExtensionNames && 0 != value->enabledExtensionCount) {
        CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfo-enabledExtensionNames-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrInstanceCreateInfo contains invalid NULL for char \"enabledExtensionNames\" is which not "
                            "optional since \"enabledExtensionCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrInstanceCreateInfo-enabledExtensionNames-parameter" null-termination
    std::vector<std::string> enabled_extension_vec;
    for (uint32_t extension = 0; extension < value->enabledExtensionCount; ++extension) {
        enabled_extension_vec.push_back(value->enabledExtensionNames[extension]);
    }
    if (!ValidateInstanceExtensionDependencies(nullptr, command_name, "XrInstanceCreateInfo",
                                               objects_info, enabled_extension_vec)) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInstanceProperties* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INSTANCE_PROPERTIES) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInstanceProperties",
                             value->type, "VUID-XrInstanceProperties-type-type", XR_TYPE_INSTANCE_PROPERTIES, "XR_TYPE_INSTANCE_PROPERTIES");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInstanceProperties-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInstanceProperties struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInstanceProperties : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInstanceProperties-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInstanceProperties : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInstanceProperties-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "runtimeVersion" because this struct is returned only.
    // Skip checking member "runtimeName" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataBuffer* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_BUFFER) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataBuffer",
                             value->type, "VUID-XrEventDataBuffer-type-type", XR_TYPE_EVENT_DATA_BUFFER, "XR_TYPE_EVENT_DATA_BUFFER");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBuffer-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataBuffer struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataBuffer : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBuffer-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataBuffer : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBuffer-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemGetInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_GET_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemGetInfo",
                             value->type, "VUID-XrSystemGetInfo-type-type", XR_TYPE_SYSTEM_GET_INFO, "XR_TYPE_SYSTEM_GET_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemGetInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemGetInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemGetInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemGetInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemGetInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemGetInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrFormFactor value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSystemGetInfo", "formFactor", objects_info, value->formFactor)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSystemGetInfo contains invalid XrFormFactor \"formFactor\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->formFactor));
        CoreValidLogMessage(instance_info, "VUID-XrSystemGetInfo-formFactor-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemGraphicsProperties* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemTrackingProperties* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemProperties* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PROPERTIES) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemProperties",
                             value->type, "VUID-XrSystemProperties-type-type", XR_TYPE_SYSTEM_PROPERTIES, "XR_TYPE_SYSTEM_PROPERTIES");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_ANCHOR_SHARING_EXPORT_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_BD);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_HTC);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_BOUNDARY_VISIBILITY_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_COLOCATION_DISCOVERY_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_ENVIRONMENT_DEPTH_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_ENVIRONMENT_RAYCAST_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES2_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FACE_TRACKING_VISEMES_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FACIAL_EXPRESSION_PROPERTIES_ML);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FACIAL_SIMULATION_PROPERTIES_BD);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_HAPTIC_PARAMETRIC_PROPERTIES_EXT);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_MARKER_UNDERSTANDING_PROPERTIES_ML);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_PASSTHROUGH_CAMERA_STATE_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_CALIBRATION_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FIDELITY_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FULL_BODY_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SIMULTANEOUS_HANDS_AND_CONTROLLERS_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPACE_DISCOVERY_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPACE_PERSISTENCE_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPATIAL_ANCHOR_PROPERTIES_BD);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPATIAL_ANCHOR_SHARING_PROPERTIES_BD);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPATIAL_ENTITY_GROUP_SHARING_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPATIAL_ENTITY_SHARING_PROPERTIES_META);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPATIAL_MESH_PROPERTIES_BD);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPATIAL_PLANE_PROPERTIES_BD);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPATIAL_SCENE_PROPERTIES_BD);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_SPATIAL_SENSING_PROPERTIES_BD);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_TRACKABLES_PROPERTIES_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_USER_PRESENCE_PROPERTIES_EXT);
        valid_ext_structs.insert(XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemProperties-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemProperties struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemProperties : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemProperties-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemProperties : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemProperties-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "systemId" because this struct is returned only.
    // Skip checking member "vendorId" because this struct is returned only.
    // Skip checking member "systemName" because this struct is returned only.
    // Skip checking member "graphicsProperties" because this struct is returned only.
    // Skip checking member "trackingProperties" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSessionCreateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SESSION_CREATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSessionCreateInfo",
                             value->type, "VUID-XrSessionCreateInfo-type-type", XR_TYPE_SESSION_CREATE_INFO, "XR_TYPE_SESSION_CREATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_D3D11_KHR);
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_D3D12_KHR);
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_EGL_MNDX);
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_METAL_KHR);
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR);
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR);
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR);
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR);
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR);
        valid_ext_structs.insert(XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR);
        valid_ext_structs.insert(XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT);
        valid_ext_structs.insert(XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSessionCreateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSessionCreateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSessionCreateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSessionCreateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSessionCreateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSessionCreateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult session_create_flags_result = ValidateXrSessionCreateFlags(value->createFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == session_create_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSessionCreateInfo invalid member XrSessionCreateFlags \"createFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSessionCreateInfo-createFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVector3f* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceVelocity* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_VELOCITY) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceVelocity",
                             value->type, "VUID-XrSpaceVelocity-type-type", XR_TYPE_SPACE_VELOCITY, "XR_TYPE_SPACE_VELOCITY");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocity-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceVelocity struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceVelocity : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocity-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceVelocity : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocity-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult space_velocity_flags_result = ValidateXrSpaceVelocityFlags(value->velocityFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == space_velocity_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceVelocity invalid member XrSpaceVelocityFlags \"velocityFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->velocityFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocity-velocityFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrQuaternionf* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPosef* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrReferenceSpaceCreateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_REFERENCE_SPACE_CREATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrReferenceSpaceCreateInfo",
                             value->type, "VUID-XrReferenceSpaceCreateInfo-type-type", XR_TYPE_REFERENCE_SPACE_CREATE_INFO, "XR_TYPE_REFERENCE_SPACE_CREATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrReferenceSpaceCreateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrReferenceSpaceCreateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrReferenceSpaceCreateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrReferenceSpaceCreateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrReferenceSpaceCreateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrReferenceSpaceCreateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrReferenceSpaceType value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrReferenceSpaceCreateInfo", "referenceSpaceType", objects_info, value->referenceSpaceType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrReferenceSpaceCreateInfo contains invalid XrReferenceSpaceType \"referenceSpaceType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->referenceSpaceType));
        CoreValidLogMessage(instance_info, "VUID-XrReferenceSpaceCreateInfo-referenceSpaceType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtent2Df* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionSpaceCreateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTION_SPACE_CREATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActionSpaceCreateInfo",
                             value->type, "VUID-XrActionSpaceCreateInfo-type-type", XR_TYPE_ACTION_SPACE_CREATE_INFO, "XR_TYPE_ACTION_SPACE_CREATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActionSpaceCreateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActionSpaceCreateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActionSpaceCreateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionSpaceCreateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActionSpaceCreateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionSpaceCreateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrActionHandle(&value->action);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAction handle \"action\" ";
            oss << HandleToHexString(value->action);
            CoreValidLogMessage(instance_info, "VUID-XrActionSpaceCreateInfo-action-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceLocation* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_LOCATION) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceLocation",
                             value->type, "VUID-XrSpaceLocation-type-type", XR_TYPE_SPACE_LOCATION, "XR_TYPE_SPACE_LOCATION");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT);
        valid_ext_structs.insert(XR_TYPE_SPACE_VELOCITY);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceLocation-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceLocation struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceLocation : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceLocation-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceLocation : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceLocation-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult space_location_flags_result = ValidateXrSpaceLocationFlags(value->locationFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == space_location_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceLocation invalid member XrSpaceLocationFlags \"locationFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->locationFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSpaceLocation-locationFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewConfigurationProperties* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIEW_CONFIGURATION_PROPERTIES) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrViewConfigurationProperties",
                             value->type, "VUID-XrViewConfigurationProperties-type-type", XR_TYPE_VIEW_CONFIGURATION_PROPERTIES, "XR_TYPE_VIEW_CONFIGURATION_PROPERTIES");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationProperties-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrViewConfigurationProperties struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrViewConfigurationProperties : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationProperties-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrViewConfigurationProperties : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationProperties-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrViewConfigurationType value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrViewConfigurationProperties", "viewConfigurationType", objects_info, value->viewConfigurationType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrViewConfigurationProperties contains invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->viewConfigurationType));
        CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationProperties-viewConfigurationType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewConfigurationView* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIEW_CONFIGURATION_VIEW) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrViewConfigurationView",
                             value->type, "VUID-XrViewConfigurationView-type-type", XR_TYPE_VIEW_CONFIGURATION_VIEW, "XR_TYPE_VIEW_CONFIGURATION_VIEW");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO);
        valid_ext_structs.insert(XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT);
        valid_ext_structs.insert(XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT);
        valid_ext_structs.insert(XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationView-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrViewConfigurationView struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrViewConfigurationView : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationView-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrViewConfigurationView : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationView-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainCreateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_CREATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainCreateInfo",
                             value->type, "VUID-XrSwapchainCreateInfo-type-type", XR_TYPE_SWAPCHAIN_CREATE_INFO, "XR_TYPE_SWAPCHAIN_CREATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB);
        valid_ext_structs.insert(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT);
        valid_ext_structs.insert(XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB);
        valid_ext_structs.insert(XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META);
        valid_ext_structs.insert(XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainCreateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainCreateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainCreateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainCreateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainCreateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainCreateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult swapchain_create_flags_result = ValidateXrSwapchainCreateFlags(value->createFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == swapchain_create_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSwapchainCreateInfo invalid member XrSwapchainCreateFlags \"createFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSwapchainCreateInfo-createFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    ValidateXrFlagsResult swapchain_usage_flags_result = ValidateXrSwapchainUsageFlags(value->usageFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == swapchain_usage_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSwapchainCreateInfo invalid member XrSwapchainUsageFlags \"usageFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->usageFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSwapchainCreateInfo-usageFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageBaseHeader* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrSwapchainImageBaseHeader-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSwapchainImageBaseHeader-next-next" because it is a base structure
#if defined(XR_USE_GRAPHICS_API_OPENGL)
    if (value->type == XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) {
        const XrSwapchainImageOpenGLKHR* new_value = reinterpret_cast<const XrSwapchainImageOpenGLKHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_enable")) {
            std::string error_str = "XrSwapchainImageBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR\"";
            error_str += " which requires extension \"XR_KHR_opengl_enable\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
    if (value->type == XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) {
        const XrSwapchainImageOpenGLESKHR* new_value = reinterpret_cast<const XrSwapchainImageOpenGLESKHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_opengl_es_enable")) {
            std::string error_str = "XrSwapchainImageBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR\"";
            error_str += " which requires extension \"XR_KHR_opengl_es_enable\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
    if (value->type == XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) {
        const XrSwapchainImageVulkanKHR* new_value = reinterpret_cast<const XrSwapchainImageVulkanKHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_vulkan_enable")) {
            std::string error_str = "XrSwapchainImageBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR\"";
            error_str += " which requires extension \"XR_KHR_vulkan_enable\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_D3D11)
    if (value->type == XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) {
        const XrSwapchainImageD3D11KHR* new_value = reinterpret_cast<const XrSwapchainImageD3D11KHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_D3D11_enable")) {
            std::string error_str = "XrSwapchainImageBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR\"";
            error_str += " which requires extension \"XR_KHR_D3D11_enable\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D12)
    if (value->type == XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) {
        const XrSwapchainImageD3D12KHR* new_value = reinterpret_cast<const XrSwapchainImageD3D12KHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_D3D12_enable")) {
            std::string error_str = "XrSwapchainImageBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR\"";
            error_str += " which requires extension \"XR_KHR_D3D12_enable\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_METAL)
    if (value->type == XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR) {
        const XrSwapchainImageMetalKHR* new_value = reinterpret_cast<const XrSwapchainImageMetalKHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_metal_enable")) {
            std::string error_str = "XrSwapchainImageBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR\"";
            error_str += " which requires extension \"XR_KHR_metal_enable\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_GRAPHICS_API_METAL)
    InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageBaseHeader",
                         value->type, "VUID-XrSwapchainImageBaseHeader-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageAcquireInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageAcquireInfo",
                             value->type, "VUID-XrSwapchainImageAcquireInfo-type-type", XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO, "XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageAcquireInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageAcquireInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageAcquireInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageAcquireInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageAcquireInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageAcquireInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageWaitInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageWaitInfo",
                             value->type, "VUID-XrSwapchainImageWaitInfo-type-type", XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO, "XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageWaitInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageWaitInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageWaitInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageWaitInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageWaitInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageWaitInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageReleaseInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageReleaseInfo",
                             value->type, "VUID-XrSwapchainImageReleaseInfo-type-type", XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO, "XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageReleaseInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageReleaseInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageReleaseInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageReleaseInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageReleaseInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageReleaseInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSessionBeginInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SESSION_BEGIN_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSessionBeginInfo",
                             value->type, "VUID-XrSessionBeginInfo-type-type", XR_TYPE_SESSION_BEGIN_INFO, "XR_TYPE_SESSION_BEGIN_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSessionBeginInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSessionBeginInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSessionBeginInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSessionBeginInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSessionBeginInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSessionBeginInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrViewConfigurationType value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSessionBeginInfo", "primaryViewConfigurationType", objects_info, value->primaryViewConfigurationType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSessionBeginInfo contains invalid XrViewConfigurationType \"primaryViewConfigurationType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->primaryViewConfigurationType));
        CoreValidLogMessage(instance_info, "VUID-XrSessionBeginInfo-primaryViewConfigurationType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameWaitInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FRAME_WAIT_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFrameWaitInfo",
                             value->type, "VUID-XrFrameWaitInfo-type-type", XR_TYPE_FRAME_WAIT_INFO, "XR_TYPE_FRAME_WAIT_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFrameWaitInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFrameWaitInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFrameWaitInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameWaitInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFrameWaitInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameWaitInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameState* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FRAME_STATE) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFrameState",
                             value->type, "VUID-XrFrameState-type-type", XR_TYPE_FRAME_STATE, "XR_TYPE_FRAME_STATE");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFrameState-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFrameState struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFrameState : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameState-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFrameState : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameState-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameBeginInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FRAME_BEGIN_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFrameBeginInfo",
                             value->type, "VUID-XrFrameBeginInfo-type-type", XR_TYPE_FRAME_BEGIN_INFO, "XR_TYPE_FRAME_BEGIN_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFrameBeginInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFrameBeginInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFrameBeginInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameBeginInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFrameBeginInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameBeginInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerBaseHeader* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrCompositionLayerBaseHeader-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrCompositionLayerBaseHeader-next-next" because it is a base structure
    // NOTE: Can't validate "VUID-XrCompositionLayerBaseHeader-layerFlags-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrCompositionLayerBaseHeader-space-parameter" because it is a base structure
    if (value->type == XR_TYPE_COMPOSITION_LAYER_PROJECTION) {
        const XrCompositionLayerProjection* new_value = reinterpret_cast<const XrCompositionLayerProjection*>(value);
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_COMPOSITION_LAYER_QUAD) {
        const XrCompositionLayerQuad* new_value = reinterpret_cast<const XrCompositionLayerQuad*>(value);
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) {
        const XrCompositionLayerCubeKHR* new_value = reinterpret_cast<const XrCompositionLayerCubeKHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_cube")) {
            std::string error_str = "XrCompositionLayerBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_COMPOSITION_LAYER_CUBE_KHR\"";
            error_str += " which requires extension \"XR_KHR_composition_layer_cube\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) {
        const XrCompositionLayerCylinderKHR* new_value = reinterpret_cast<const XrCompositionLayerCylinderKHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_cylinder")) {
            std::string error_str = "XrCompositionLayerBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR\"";
            error_str += " which requires extension \"XR_KHR_composition_layer_cylinder\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) {
        const XrCompositionLayerEquirectKHR* new_value = reinterpret_cast<const XrCompositionLayerEquirectKHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_equirect")) {
            std::string error_str = "XrCompositionLayerBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR\"";
            error_str += " which requires extension \"XR_KHR_composition_layer_equirect\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) {
        const XrCompositionLayerEquirect2KHR* new_value = reinterpret_cast<const XrCompositionLayerEquirect2KHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_composition_layer_equirect2")) {
            std::string error_str = "XrCompositionLayerBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR\"";
            error_str += " which requires extension \"XR_KHR_composition_layer_equirect2\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) {
        const XrCompositionLayerPassthroughFB* new_value = reinterpret_cast<const XrCompositionLayerPassthroughFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
            std::string error_str = "XrCompositionLayerBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB\"";
            error_str += " which requires extension \"XR_FB_passthrough\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC) {
        const XrCompositionLayerPassthroughHTC* new_value = reinterpret_cast<const XrCompositionLayerPassthroughHTC*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTC_passthrough")) {
            std::string error_str = "XrCompositionLayerBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC\"";
            error_str += " which requires extension \"XR_HTC_passthrough\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID) {
        const XrCompositionLayerPassthroughANDROID* new_value = reinterpret_cast<const XrCompositionLayerPassthroughANDROID*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_composition_layer_passthrough_mesh")) {
            std::string error_str = "XrCompositionLayerBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID\"";
            error_str += " which requires extension \"XR_ANDROID_composition_layer_passthrough_mesh\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerBaseHeader",
                         value->type, "VUID-XrCompositionLayerBaseHeader-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameEndInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FRAME_END_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFrameEndInfo",
                             value->type, "VUID-XrFrameEndInfo-type-type", XR_TYPE_FRAME_END_INFO, "XR_TYPE_FRAME_END_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_FRAME_END_INFO_ML);
        valid_ext_structs.insert(XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML);
        valid_ext_structs.insert(XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META);
        valid_ext_structs.insert(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFrameEndInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFrameEndInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFrameEndInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrEnvironmentBlendMode value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFrameEndInfo", "environmentBlendMode", objects_info, value->environmentBlendMode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFrameEndInfo contains invalid XrEnvironmentBlendMode \"environmentBlendMode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->environmentBlendMode));
        CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-environmentBlendMode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->layerCount is non-zero
    if (0 != value->layerCount && nullptr == value->layers) {
        CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFrameEndInfo member layerCount is NULL, but value->layerCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->layers) {
        for (uint32_t value_layers_inc = 0; value_layers_inc < value->layerCount; ++value_layers_inc) {
            if (value->layers[value_layers_inc] == nullptr) {
                std::string error_message = "Structure XrFrameEndInfo member layers";
                error_message += "[";
                error_message += std::to_string(value_layers_inc);
                error_message += "]";
                error_message += " is null";
                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerProjection and it is valid
            {
                if (value->layers != nullptr) {
                    const XrCompositionLayerProjection* const* new_compositionlayerprojection_value = reinterpret_cast<const XrCompositionLayerProjection* const*>(value->layers);
                    if (new_compositionlayerprojection_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_PROJECTION) {
                        if (nullptr != new_compositionlayerprojection_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_compositionlayerprojection_value[value_layers_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrFrameEndInfo member layers";
                                error_message += "[";
                                error_message += std::to_string(value_layers_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerQuad and it is valid
            {
                if (value->layers != nullptr) {
                    const XrCompositionLayerQuad* const* new_compositionlayerquad_value = reinterpret_cast<const XrCompositionLayerQuad* const*>(value->layers);
                    if (new_compositionlayerquad_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_QUAD) {
                        if (nullptr != new_compositionlayerquad_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_compositionlayerquad_value[value_layers_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrFrameEndInfo member layers";
                                error_message += "[";
                                error_message += std::to_string(value_layers_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerCubeKHR and it is valid
            {
                if (value->layers != nullptr) {
                    const XrCompositionLayerCubeKHR* const* new_compositionlayercubekhr_value = reinterpret_cast<const XrCompositionLayerCubeKHR* const*>(value->layers);
                    if (new_compositionlayercubekhr_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) {
                        if (nullptr != new_compositionlayercubekhr_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_compositionlayercubekhr_value[value_layers_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrFrameEndInfo member layers";
                                error_message += "[";
                                error_message += std::to_string(value_layers_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerCylinderKHR and it is valid
            {
                if (value->layers != nullptr) {
                    const XrCompositionLayerCylinderKHR* const* new_compositionlayercylinderkhr_value = reinterpret_cast<const XrCompositionLayerCylinderKHR* const*>(value->layers);
                    if (new_compositionlayercylinderkhr_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) {
                        if (nullptr != new_compositionlayercylinderkhr_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_compositionlayercylinderkhr_value[value_layers_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrFrameEndInfo member layers";
                                error_message += "[";
                                error_message += std::to_string(value_layers_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerEquirectKHR and it is valid
            {
                if (value->layers != nullptr) {
                    const XrCompositionLayerEquirectKHR* const* new_compositionlayerequirectkhr_value = reinterpret_cast<const XrCompositionLayerEquirectKHR* const*>(value->layers);
                    if (new_compositionlayerequirectkhr_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) {
                        if (nullptr != new_compositionlayerequirectkhr_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_compositionlayerequirectkhr_value[value_layers_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrFrameEndInfo member layers";
                                error_message += "[";
                                error_message += std::to_string(value_layers_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerEquirect2KHR and it is valid
            {
                if (value->layers != nullptr) {
                    const XrCompositionLayerEquirect2KHR* const* new_compositionlayerequirect2khr_value = reinterpret_cast<const XrCompositionLayerEquirect2KHR* const*>(value->layers);
                    if (new_compositionlayerequirect2khr_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) {
                        if (nullptr != new_compositionlayerequirect2khr_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_compositionlayerequirect2khr_value[value_layers_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrFrameEndInfo member layers";
                                error_message += "[";
                                error_message += std::to_string(value_layers_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerPassthroughFB and it is valid
            {
                if (value->layers != nullptr) {
                    const XrCompositionLayerPassthroughFB* const* new_compositionlayerpassthroughfb_value = reinterpret_cast<const XrCompositionLayerPassthroughFB* const*>(value->layers);
                    if (new_compositionlayerpassthroughfb_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) {
                        if (nullptr != new_compositionlayerpassthroughfb_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_compositionlayerpassthroughfb_value[value_layers_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrFrameEndInfo member layers";
                                error_message += "[";
                                error_message += std::to_string(value_layers_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerPassthroughHTC and it is valid
            {
                if (value->layers != nullptr) {
                    const XrCompositionLayerPassthroughHTC* const* new_compositionlayerpassthroughhtc_value = reinterpret_cast<const XrCompositionLayerPassthroughHTC* const*>(value->layers);
                    if (new_compositionlayerpassthroughhtc_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC) {
                        if (nullptr != new_compositionlayerpassthroughhtc_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_compositionlayerpassthroughhtc_value[value_layers_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrFrameEndInfo member layers";
                                error_message += "[";
                                error_message += std::to_string(value_layers_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerPassthroughANDROID and it is valid
            {
                if (value->layers != nullptr) {
                    const XrCompositionLayerPassthroughANDROID* const* new_compositionlayerpassthroughandroid_value = reinterpret_cast<const XrCompositionLayerPassthroughANDROID* const*>(value->layers);
                    if (new_compositionlayerpassthroughandroid_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID) {
                        if (nullptr != new_compositionlayerpassthroughandroid_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_compositionlayerpassthroughandroid_value[value_layers_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrFrameEndInfo member layers";
                                error_message += "[";
                                error_message += std::to_string(value_layers_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate that the base-structure XrCompositionLayerBaseHeader is valid
            if (nullptr != value->layers[value_layers_inc]) {
                xr_result = ValidateXrStruct(instance_info, command_name,
                                                                objects_info, check_members, true, value->layers[value_layers_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfo-layers-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info,
                                        "Structure XrFrameEndInfo member layers is invalid");
                    return xr_result;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewLocateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIEW_LOCATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrViewLocateInfo",
                             value->type, "VUID-XrViewLocateInfo-type-type", XR_TYPE_VIEW_LOCATE_INFO, "XR_TYPE_VIEW_LOCATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrViewLocateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrViewLocateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrViewLocateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewLocateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrViewLocateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewLocateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrViewConfigurationType value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrViewLocateInfo", "viewConfigurationType", objects_info, value->viewConfigurationType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrViewLocateInfo contains invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->viewConfigurationType));
        CoreValidLogMessage(instance_info, "VUID-XrViewLocateInfo-viewConfigurationType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrViewLocateInfo-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewState* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIEW_STATE) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrViewState",
                             value->type, "VUID-XrViewState-type-type", XR_TYPE_VIEW_STATE, "XR_TYPE_VIEW_STATE");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrViewState-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrViewState struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrViewState : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewState-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrViewState : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewState-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult view_state_flags_result = ValidateXrViewStateFlags(value->viewStateFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == view_state_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrViewState invalid member XrViewStateFlags \"viewStateFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->viewStateFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrViewState-viewStateFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFovf* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrView* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIEW) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrView",
                             value->type, "VUID-XrView-type-type", XR_TYPE_VIEW, "XR_TYPE_VIEW");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrView-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrView struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrView : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrView-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrView : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrView-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionSetCreateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTION_SET_CREATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActionSetCreateInfo",
                             value->type, "VUID-XrActionSetCreateInfo-type-type", XR_TYPE_ACTION_SET_CREATE_INFO, "XR_TYPE_ACTION_SET_CREATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActionSetCreateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActionSetCreateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActionSetCreateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionSetCreateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActionSetCreateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionSetCreateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionCreateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTION_CREATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActionCreateInfo",
                             value->type, "VUID-XrActionCreateInfo-type-type", XR_TYPE_ACTION_CREATE_INFO, "XR_TYPE_ACTION_CREATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActionCreateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActionCreateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActionCreateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionCreateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActionCreateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionCreateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrActionType value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrActionCreateInfo", "actionType", objects_info, value->actionType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrActionCreateInfo contains invalid XrActionType \"actionType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->actionType));
        CoreValidLogMessage(instance_info, "VUID-XrActionCreateInfo-actionType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->countSubactionPaths is non-zero
    if (0 != value->countSubactionPaths && nullptr == value->subactionPaths) {
        CoreValidLogMessage(instance_info, "VUID-XrActionCreateInfo-subactionPaths-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrActionCreateInfo member countSubactionPaths is NULL, but value->countSubactionPaths is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrActionCreateInfo-subactionPaths-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionSuggestedBinding* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrActionHandle(&value->action);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAction handle \"action\" ";
            oss << HandleToHexString(value->action);
            CoreValidLogMessage(instance_info, "VUID-XrActionSuggestedBinding-action-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionProfileSuggestedBinding* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInteractionProfileSuggestedBinding",
                             value->type, "VUID-XrInteractionProfileSuggestedBinding-type-type", XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING, "XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_BINDING_MODIFICATIONS_KHR);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileSuggestedBinding-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInteractionProfileSuggestedBinding struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInteractionProfileSuggestedBinding : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileSuggestedBinding-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInteractionProfileSuggestedBinding : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileSuggestedBinding-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->countSuggestedBindings && nullptr != value->suggestedBindings) {
        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileSuggestedBinding-countSuggestedBindings-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrInteractionProfileSuggestedBinding member countSuggestedBindings is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->suggestedBindings && 0 != value->countSuggestedBindings) {
        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileSuggestedBinding-suggestedBindings-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrInteractionProfileSuggestedBinding contains invalid NULL for XrActionSuggestedBinding \"suggestedBindings\" is which not "
                            "optional since \"countSuggestedBindings\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->suggestedBindings) {
        for (uint32_t value_suggestedbindings_inc = 0; value_suggestedbindings_inc < value->countSuggestedBindings; ++value_suggestedbindings_inc) {
            // Validate that the structure XrActionSuggestedBinding is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->suggestedBindings[value_suggestedbindings_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileSuggestedBinding-suggestedBindings-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrInteractionProfileSuggestedBinding member suggestedBindings is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSessionActionSetsAttachInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSessionActionSetsAttachInfo",
                             value->type, "VUID-XrSessionActionSetsAttachInfo-type-type", XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO, "XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSessionActionSetsAttachInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSessionActionSetsAttachInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSessionActionSetsAttachInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSessionActionSetsAttachInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSessionActionSetsAttachInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSessionActionSetsAttachInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->countActionSets && nullptr != value->actionSets) {
        CoreValidLogMessage(instance_info, "VUID-XrSessionActionSetsAttachInfo-countActionSets-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSessionActionSetsAttachInfo member countActionSets is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->actionSets && 0 != value->countActionSets) {
        CoreValidLogMessage(instance_info, "VUID-XrSessionActionSetsAttachInfo-actionSets-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSessionActionSetsAttachInfo contains invalid NULL for XrActionSet \"actionSets\" is which not "
                            "optional since \"countActionSets\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->actionSets) {
        for (uint32_t value_actionsets_inc = 0; value_actionsets_inc < value->countActionSets; ++value_actionsets_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrActionSetHandle(&value->actionSets[value_actionsets_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrActionSet handle \"actionSets\" ";
                    oss << HandleToHexString(value->actionSets[value_actionsets_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSessionActionSetsAttachInfo-actionSets-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionProfileState* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INTERACTION_PROFILE_STATE) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInteractionProfileState",
                             value->type, "VUID-XrInteractionProfileState-type-type", XR_TYPE_INTERACTION_PROFILE_STATE, "XR_TYPE_INTERACTION_PROFILE_STATE");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_BATTERY_STATE_DISPLAY_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileState-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInteractionProfileState struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInteractionProfileState : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileState-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInteractionProfileState : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileState-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStateGetInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTION_STATE_GET_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActionStateGetInfo",
                             value->type, "VUID-XrActionStateGetInfo-type-type", XR_TYPE_ACTION_STATE_GET_INFO, "XR_TYPE_ACTION_STATE_GET_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActionStateGetInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActionStateGetInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActionStateGetInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStateGetInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActionStateGetInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStateGetInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrActionHandle(&value->action);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAction handle \"action\" ";
            oss << HandleToHexString(value->action);
            CoreValidLogMessage(instance_info, "VUID-XrActionStateGetInfo-action-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStateBoolean* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTION_STATE_BOOLEAN) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActionStateBoolean",
                             value->type, "VUID-XrActionStateBoolean-type-type", XR_TYPE_ACTION_STATE_BOOLEAN, "XR_TYPE_ACTION_STATE_BOOLEAN");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActionStateBoolean-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActionStateBoolean struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActionStateBoolean : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStateBoolean-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActionStateBoolean : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStateBoolean-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStateFloat* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTION_STATE_FLOAT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActionStateFloat",
                             value->type, "VUID-XrActionStateFloat-type-type", XR_TYPE_ACTION_STATE_FLOAT, "XR_TYPE_ACTION_STATE_FLOAT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActionStateFloat-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActionStateFloat struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActionStateFloat : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStateFloat-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActionStateFloat : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStateFloat-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVector2f* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStateVector2f* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTION_STATE_VECTOR2F) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActionStateVector2f",
                             value->type, "VUID-XrActionStateVector2f-type-type", XR_TYPE_ACTION_STATE_VECTOR2F, "XR_TYPE_ACTION_STATE_VECTOR2F");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActionStateVector2f-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActionStateVector2f struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActionStateVector2f : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStateVector2f-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActionStateVector2f : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStateVector2f-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionStatePose* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTION_STATE_POSE) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActionStatePose",
                             value->type, "VUID-XrActionStatePose-type-type", XR_TYPE_ACTION_STATE_POSE, "XR_TYPE_ACTION_STATE_POSE");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActionStatePose-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActionStatePose struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActionStatePose : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStatePose-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActionStatePose : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionStatePose-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActiveActionSet* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrActionSetHandle(&value->actionSet);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrActionSet handle \"actionSet\" ";
            oss << HandleToHexString(value->actionSet);
            CoreValidLogMessage(instance_info, "VUID-XrActiveActionSet-actionSet-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActionsSyncInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTIONS_SYNC_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActionsSyncInfo",
                             value->type, "VUID-XrActionsSyncInfo-type-type", XR_TYPE_ACTIONS_SYNC_INFO, "XR_TYPE_ACTIONS_SYNC_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActionsSyncInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActionsSyncInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActionsSyncInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionsSyncInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActionsSyncInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActionsSyncInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->countActiveActionSets is non-zero
    if (0 != value->countActiveActionSets && nullptr == value->activeActionSets) {
        CoreValidLogMessage(instance_info, "VUID-XrActionsSyncInfo-activeActionSets-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrActionsSyncInfo member countActiveActionSets is NULL, but value->countActiveActionSets is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->activeActionSets) {
        for (uint32_t value_activeactionsets_inc = 0; value_activeactionsets_inc < value->countActiveActionSets; ++value_activeactionsets_inc) {
            // Validate that the structure XrActiveActionSet is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->activeActionSets[value_activeactionsets_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrActionsSyncInfo-activeActionSets-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrActionsSyncInfo member activeActionSets is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBoundSourcesForActionEnumerateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBoundSourcesForActionEnumerateInfo",
                             value->type, "VUID-XrBoundSourcesForActionEnumerateInfo-type-type", XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO, "XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBoundSourcesForActionEnumerateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBoundSourcesForActionEnumerateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBoundSourcesForActionEnumerateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBoundSourcesForActionEnumerateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBoundSourcesForActionEnumerateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBoundSourcesForActionEnumerateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrActionHandle(&value->action);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAction handle \"action\" ";
            oss << HandleToHexString(value->action);
            CoreValidLogMessage(instance_info, "VUID-XrBoundSourcesForActionEnumerateInfo-action-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInputSourceLocalizedNameGetInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInputSourceLocalizedNameGetInfo",
                             value->type, "VUID-XrInputSourceLocalizedNameGetInfo-type-type", XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO, "XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInputSourceLocalizedNameGetInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInputSourceLocalizedNameGetInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInputSourceLocalizedNameGetInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInputSourceLocalizedNameGetInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInputSourceLocalizedNameGetInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInputSourceLocalizedNameGetInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult input_source_localized_name_flags_result = ValidateXrInputSourceLocalizedNameFlags(value->whichComponents);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == input_source_localized_name_flags_result) {
        CoreValidLogMessage(instance_info, "VUID-XrInputSourceLocalizedNameGetInfo-whichComponents-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrInputSourceLocalizedNameFlags \"whichComponents\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != input_source_localized_name_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrInputSourceLocalizedNameGetInfo invalid member XrInputSourceLocalizedNameFlags \"whichComponents\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->whichComponents));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrInputSourceLocalizedNameGetInfo-whichComponents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticActionInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAPTIC_ACTION_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHapticActionInfo",
                             value->type, "VUID-XrHapticActionInfo-type-type", XR_TYPE_HAPTIC_ACTION_INFO, "XR_TYPE_HAPTIC_ACTION_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHapticActionInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHapticActionInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHapticActionInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticActionInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHapticActionInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticActionInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrActionHandle(&value->action);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAction handle \"action\" ";
            oss << HandleToHexString(value->action);
            CoreValidLogMessage(instance_info, "VUID-XrHapticActionInfo-action-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticBaseHeader* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrHapticBaseHeader-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrHapticBaseHeader-next-next" because it is a base structure
    if (value->type == XR_TYPE_HAPTIC_VIBRATION) {
        const XrHapticVibration* new_value = reinterpret_cast<const XrHapticVibration*>(value);
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) {
        const XrHapticAmplitudeEnvelopeVibrationFB* new_value = reinterpret_cast<const XrHapticAmplitudeEnvelopeVibrationFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_haptic_amplitude_envelope")) {
            std::string error_str = "XrHapticBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB\"";
            error_str += " which requires extension \"XR_FB_haptic_amplitude_envelope\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrHapticBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_HAPTIC_PCM_VIBRATION_FB) {
        const XrHapticPcmVibrationFB* new_value = reinterpret_cast<const XrHapticPcmVibrationFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_haptic_pcm")) {
            std::string error_str = "XrHapticBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_HAPTIC_PCM_VIBRATION_FB\"";
            error_str += " which requires extension \"XR_FB_haptic_pcm\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrHapticBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT) {
        const XrHapticParametricVibrationEXT* new_value = reinterpret_cast<const XrHapticParametricVibrationEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_haptic_parametric")) {
            std::string error_str = "XrHapticBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT\"";
            error_str += " which requires extension \"XR_EXT_haptic_parametric\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrHapticBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrHapticBaseHeader",
                         value->type, "VUID-XrHapticBaseHeader-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrOffset2Di* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtent2Di* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRect2Di* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainSubImage* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSwapchainHandle(&value->swapchain);
        // Exception for xrGetRecommendedLayerResolutionMETA, the swapchain image handle can be NULL.
        if (command_name == "xrGetRecommendedLayerResolutionMETA" && handle_result == VALIDATE_XR_HANDLE_NULL)
            return xr_result;
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSwapchain handle \"swapchain\" ";
            oss << HandleToHexString(value->swapchain);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainSubImage-swapchain-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerProjectionView* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerProjectionView",
                             value->type, "VUID-XrCompositionLayerProjectionView-type-type", XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW, "XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB);
        valid_ext_structs.insert(XR_TYPE_FRAME_SYNTHESIS_INFO_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjectionView-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerProjectionView struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerProjectionView : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjectionView-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerProjectionView : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjectionView-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->subImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjectionView-subImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerProjectionView member subImage is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerProjection* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_PROJECTION) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerProjection",
                             value->type, "VUID-XrCompositionLayerProjection-type-type", XR_TYPE_COMPOSITION_LAYER_PROJECTION, "XR_TYPE_COMPOSITION_LAYER_PROJECTION");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjection-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerProjection struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerProjection : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjection-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerProjection : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjection-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_flags_result = ValidateXrCompositionLayerFlags(value->layerFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == composition_layer_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerProjection invalid member XrCompositionLayerFlags \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjection-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjection-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Non-optional array length must be non-zero
    if (0 >= value->viewCount && nullptr != value->views) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjection-viewCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerProjection member viewCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->views && 0 != value->viewCount) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjection-views-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrCompositionLayerProjection contains invalid NULL for XrCompositionLayerProjectionView \"views\" is which not "
                            "optional since \"viewCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->views) {
        for (uint32_t value_views_inc = 0; value_views_inc < value->viewCount; ++value_views_inc) {
            // Validate that the structure XrCompositionLayerProjectionView is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->views[value_views_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerProjection-views-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrCompositionLayerProjection member views is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerQuad* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_QUAD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerQuad",
                             value->type, "VUID-XrCompositionLayerQuad-type-type", XR_TYPE_COMPOSITION_LAYER_QUAD, "XR_TYPE_COMPOSITION_LAYER_QUAD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerQuad-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerQuad struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerQuad : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerQuad-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerQuad : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerQuad-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_flags_result = ValidateXrCompositionLayerFlags(value->layerFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == composition_layer_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerQuad invalid member XrCompositionLayerFlags \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerQuad-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerQuad-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Make sure the enum type XrEyeVisibility value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerQuad", "eyeVisibility", objects_info, value->eyeVisibility)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerQuad contains invalid XrEyeVisibility \"eyeVisibility\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->eyeVisibility));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerQuad-eyeVisibility-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->subImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerQuad-subImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerQuad member subImage is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataBaseHeader* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrEventDataBaseHeader-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrEventDataBaseHeader-next-next" because it is a base structure
    if (value->type == XR_TYPE_EVENT_DATA_EVENTS_LOST) {
        const XrEventDataEventsLost* new_value = reinterpret_cast<const XrEventDataEventsLost*>(value);
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING) {
        const XrEventDataInstanceLossPending* new_value = reinterpret_cast<const XrEventDataInstanceLossPending*>(value);
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED) {
        const XrEventDataSessionStateChanged* new_value = reinterpret_cast<const XrEventDataSessionStateChanged*>(value);
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING) {
        const XrEventDataReferenceSpaceChangePending* new_value = reinterpret_cast<const XrEventDataReferenceSpaceChangePending*>(value);
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED) {
        const XrEventDataInteractionProfileChanged* new_value = reinterpret_cast<const XrEventDataInteractionProfileChanged*>(value);
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR) {
        const XrEventDataVisibilityMaskChangedKHR* new_value = reinterpret_cast<const XrEventDataVisibilityMaskChangedKHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_visibility_mask")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR\"";
            error_str += " which requires extension \"XR_KHR_visibility_mask\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT) {
        const XrEventDataPerfSettingsEXT* new_value = reinterpret_cast<const XrEventDataPerfSettingsEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_performance_settings")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT\"";
            error_str += " which requires extension \"XR_EXT_performance_settings\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX) {
        const XrEventDataMainSessionVisibilityChangedEXTX* new_value = reinterpret_cast<const XrEventDataMainSessionVisibilityChangedEXTX*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXTX_overlay")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX\"";
            error_str += " which requires extension \"XR_EXTX_overlay\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB) {
        const XrEventDataDisplayRefreshRateChangedFB* new_value = reinterpret_cast<const XrEventDataDisplayRefreshRateChangedFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_display_refresh_rate")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB\"";
            error_str += " which requires extension \"XR_FB_display_refresh_rate\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX) {
        const XrEventDataViveTrackerConnectedHTCX* new_value = reinterpret_cast<const XrEventDataViveTrackerConnectedHTCX*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_HTCX_vive_tracker_interaction")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX\"";
            error_str += " which requires extension \"XR_HTCX_vive_tracker_interaction\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB) {
        const XrEventDataSpatialAnchorCreateCompleteFB* new_value = reinterpret_cast<const XrEventDataSpatialAnchorCreateCompleteFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB) {
        const XrEventDataSpaceSetStatusCompleteFB* new_value = reinterpret_cast<const XrEventDataSpaceSetStatusCompleteFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB) {
        const XrEventDataPassthroughStateChangedFB* new_value = reinterpret_cast<const XrEventDataPassthroughStateChangedFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_passthrough")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB\"";
            error_str += " which requires extension \"XR_FB_passthrough\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO) {
        const XrEventDataMarkerTrackingUpdateVARJO* new_value = reinterpret_cast<const XrEventDataMarkerTrackingUpdateVARJO*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VARJO_marker_tracking")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO\"";
            error_str += " which requires extension \"XR_VARJO_marker_tracking\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML) {
        const XrEventDataLocalizationChangedML* new_value = reinterpret_cast<const XrEventDataLocalizationChangedML*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_localization_map")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML\"";
            error_str += " which requires extension \"XR_ML_localization_map\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB) {
        const XrEventDataSpaceQueryResultsAvailableFB* new_value = reinterpret_cast<const XrEventDataSpaceQueryResultsAvailableFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB) {
        const XrEventDataSpaceQueryCompleteFB* new_value = reinterpret_cast<const XrEventDataSpaceQueryCompleteFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) {
        const XrEventDataSpaceSaveCompleteFB* new_value = reinterpret_cast<const XrEventDataSpaceSaveCompleteFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity_storage\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) {
        const XrEventDataSpaceEraseCompleteFB* new_value = reinterpret_cast<const XrEventDataSpaceEraseCompleteFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity_storage\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB) {
        const XrEventDataSpaceShareCompleteFB* new_value = reinterpret_cast<const XrEventDataSpaceShareCompleteFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_sharing")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity_sharing\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB) {
        const XrEventDataSceneCaptureCompleteFB* new_value = reinterpret_cast<const XrEventDataSceneCaptureCompleteFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_scene_capture")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB\"";
            error_str += " which requires extension \"XR_FB_scene_capture\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META) {
        const XrEventDataVirtualKeyboardCommitTextMETA* new_value = reinterpret_cast<const XrEventDataVirtualKeyboardCommitTextMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META\"";
            error_str += " which requires extension \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META) {
        const XrEventDataVirtualKeyboardBackspaceMETA* new_value = reinterpret_cast<const XrEventDataVirtualKeyboardBackspaceMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META\"";
            error_str += " which requires extension \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META) {
        const XrEventDataVirtualKeyboardEnterMETA* new_value = reinterpret_cast<const XrEventDataVirtualKeyboardEnterMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META\"";
            error_str += " which requires extension \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META) {
        const XrEventDataVirtualKeyboardShownMETA* new_value = reinterpret_cast<const XrEventDataVirtualKeyboardShownMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META\"";
            error_str += " which requires extension \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META) {
        const XrEventDataVirtualKeyboardHiddenMETA* new_value = reinterpret_cast<const XrEventDataVirtualKeyboardHiddenMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_virtual_keyboard")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META\"";
            error_str += " which requires extension \"XR_META_virtual_keyboard\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB) {
        const XrEventDataSpaceListSaveCompleteFB* new_value = reinterpret_cast<const XrEventDataSpaceListSaveCompleteFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_storage_batch")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity_storage_batch\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_RESULTS_AVAILABLE_META) {
        const XrEventDataSpaceDiscoveryResultsAvailableMETA* new_value = reinterpret_cast<const XrEventDataSpaceDiscoveryResultsAvailableMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_RESULTS_AVAILABLE_META\"";
            error_str += " which requires extension \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_COMPLETE_META) {
        const XrEventDataSpaceDiscoveryCompleteMETA* new_value = reinterpret_cast<const XrEventDataSpaceDiscoveryCompleteMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_COMPLETE_META\"";
            error_str += " which requires extension \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACES_SAVE_RESULT_META) {
        const XrEventDataSpacesSaveResultMETA* new_value = reinterpret_cast<const XrEventDataSpacesSaveResultMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACES_SAVE_RESULT_META\"";
            error_str += " which requires extension \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPACES_ERASE_RESULT_META) {
        const XrEventDataSpacesEraseResultMETA* new_value = reinterpret_cast<const XrEventDataSpacesEraseResultMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_persistence")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPACES_ERASE_RESULT_META\"";
            error_str += " which requires extension \"XR_META_spatial_entity_persistence\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_PASSTHROUGH_LAYER_RESUMED_META) {
        const XrEventDataPassthroughLayerResumedMETA* new_value = reinterpret_cast<const XrEventDataPassthroughLayerResumedMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_passthrough_layer_resumed_event")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_PASSTHROUGH_LAYER_RESUMED_META\"";
            error_str += " which requires extension \"XR_META_passthrough_layer_resumed_event\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SHARE_SPACES_COMPLETE_META) {
        const XrEventDataShareSpacesCompleteMETA* new_value = reinterpret_cast<const XrEventDataShareSpacesCompleteMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_sharing")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SHARE_SPACES_COMPLETE_META\"";
            error_str += " which requires extension \"XR_META_spatial_entity_sharing\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_INTERACTION_RENDER_MODELS_CHANGED_EXT) {
        const XrEventDataInteractionRenderModelsChangedEXT* new_value = reinterpret_cast<const XrEventDataInteractionRenderModelsChangedEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_interaction_render_model")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_INTERACTION_RENDER_MODELS_CHANGED_EXT\"";
            error_str += " which requires extension \"XR_EXT_interaction_render_model\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SENSE_DATA_PROVIDER_STATE_CHANGED_BD) {
        const XrEventDataSenseDataProviderStateChangedBD* new_value = reinterpret_cast<const XrEventDataSenseDataProviderStateChangedBD*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SENSE_DATA_PROVIDER_STATE_CHANGED_BD\"";
            error_str += " which requires extension \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SENSE_DATA_UPDATED_BD) {
        const XrEventDataSenseDataUpdatedBD* new_value = reinterpret_cast<const XrEventDataSenseDataUpdatedBD*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_BD_spatial_sensing")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SENSE_DATA_UPDATED_BD\"";
            error_str += " which requires extension \"XR_BD_spatial_sensing\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_RECOMMENDED_RESOLUTION_CHANGED_ANDROID) {
        const XrEventDataRecommendedResolutionChangedANDROID* new_value = reinterpret_cast<const XrEventDataRecommendedResolutionChangedANDROID*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_recommended_resolution")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_RECOMMENDED_RESOLUTION_CHANGED_ANDROID\"";
            error_str += " which requires extension \"XR_ANDROID_recommended_resolution\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT) {
        const XrEventDataUserPresenceChangedEXT* new_value = reinterpret_cast<const XrEventDataUserPresenceChangedEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_user_presence")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT\"";
            error_str += " which requires extension \"XR_EXT_user_presence\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML) {
        const XrEventDataHeadsetFitChangedML* new_value = reinterpret_cast<const XrEventDataHeadsetFitChangedML*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_user_calibration")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML\"";
            error_str += " which requires extension \"XR_ML_user_calibration\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML) {
        const XrEventDataEyeCalibrationChangedML* new_value = reinterpret_cast<const XrEventDataEyeCalibrationChangedML*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_user_calibration")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML\"";
            error_str += " which requires extension \"XR_ML_user_calibration\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_BOUNDARY_VISIBILITY_CHANGED_META) {
        const XrEventDataBoundaryVisibilityChangedMETA* new_value = reinterpret_cast<const XrEventDataBoundaryVisibilityChangedMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_boundary_visibility")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_BOUNDARY_VISIBILITY_CHANGED_META\"";
            error_str += " which requires extension \"XR_META_boundary_visibility\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_START_COLOCATION_ADVERTISEMENT_COMPLETE_META) {
        const XrEventDataStartColocationAdvertisementCompleteMETA* new_value = reinterpret_cast<const XrEventDataStartColocationAdvertisementCompleteMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_START_COLOCATION_ADVERTISEMENT_COMPLETE_META\"";
            error_str += " which requires extension \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_STOP_COLOCATION_ADVERTISEMENT_COMPLETE_META) {
        const XrEventDataStopColocationAdvertisementCompleteMETA* new_value = reinterpret_cast<const XrEventDataStopColocationAdvertisementCompleteMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_STOP_COLOCATION_ADVERTISEMENT_COMPLETE_META\"";
            error_str += " which requires extension \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_COLOCATION_ADVERTISEMENT_COMPLETE_META) {
        const XrEventDataColocationAdvertisementCompleteMETA* new_value = reinterpret_cast<const XrEventDataColocationAdvertisementCompleteMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_COLOCATION_ADVERTISEMENT_COMPLETE_META\"";
            error_str += " which requires extension \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_START_COLOCATION_DISCOVERY_COMPLETE_META) {
        const XrEventDataStartColocationDiscoveryCompleteMETA* new_value = reinterpret_cast<const XrEventDataStartColocationDiscoveryCompleteMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_START_COLOCATION_DISCOVERY_COMPLETE_META\"";
            error_str += " which requires extension \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_RESULT_META) {
        const XrEventDataColocationDiscoveryResultMETA* new_value = reinterpret_cast<const XrEventDataColocationDiscoveryResultMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_RESULT_META\"";
            error_str += " which requires extension \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_COMPLETE_META) {
        const XrEventDataColocationDiscoveryCompleteMETA* new_value = reinterpret_cast<const XrEventDataColocationDiscoveryCompleteMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_COMPLETE_META\"";
            error_str += " which requires extension \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_STOP_COLOCATION_DISCOVERY_COMPLETE_META) {
        const XrEventDataStopColocationDiscoveryCompleteMETA* new_value = reinterpret_cast<const XrEventDataStopColocationDiscoveryCompleteMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_colocation_discovery")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_STOP_COLOCATION_DISCOVERY_COMPLETE_META\"";
            error_str += " which requires extension \"XR_META_colocation_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID) {
        const XrEventDataImageTrackingLostANDROID* new_value = reinterpret_cast<const XrEventDataImageTrackingLostANDROID*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID\"";
            error_str += " which requires extension \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT) {
        const XrEventDataSpatialDiscoveryRecommendedEXT* new_value = reinterpret_cast<const XrEventDataSpatialDiscoveryRecommendedEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_EVENT_DATA_VIEW_CONFIGURATION_VIEWS_CHANGED_EXT) {
        const XrEventDataViewConfigurationViewsChangedEXT* new_value = reinterpret_cast<const XrEventDataViewConfigurationViewsChangedEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_view_configuration_views_change")) {
            std::string error_str = "XrEventDataBaseHeader being used with child struct type ";
            error_str += "\"XR_TYPE_EVENT_DATA_VIEW_CONFIGURATION_VIEWS_CHANGED_EXT\"";
            error_str += " which requires extension \"XR_EXT_view_configuration_views_change\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBaseHeader-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataBaseHeader",
                         value->type, "VUID-XrEventDataBaseHeader-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataEventsLost* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_EVENTS_LOST) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataEventsLost",
                             value->type, "VUID-XrEventDataEventsLost-type-type", XR_TYPE_EVENT_DATA_EVENTS_LOST, "XR_TYPE_EVENT_DATA_EVENTS_LOST");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataEventsLost-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataEventsLost struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataEventsLost : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataEventsLost-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataEventsLost : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataEventsLost-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "lostEventCount" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataInstanceLossPending* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataInstanceLossPending",
                             value->type, "VUID-XrEventDataInstanceLossPending-type-type", XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING, "XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataInstanceLossPending-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataInstanceLossPending struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataInstanceLossPending : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataInstanceLossPending-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataInstanceLossPending : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataInstanceLossPending-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "lossTime" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSessionStateChanged* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSessionStateChanged",
                             value->type, "VUID-XrEventDataSessionStateChanged-type-type", XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED, "XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSessionStateChanged-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSessionStateChanged struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSessionStateChanged : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSessionStateChanged-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSessionStateChanged : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSessionStateChanged-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "session" because this struct is returned only.
    // Skip checking member "state" because this struct is returned only.
    // Skip checking member "time" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataReferenceSpaceChangePending* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataReferenceSpaceChangePending",
                             value->type, "VUID-XrEventDataReferenceSpaceChangePending-type-type", XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING, "XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataReferenceSpaceChangePending-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataReferenceSpaceChangePending struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataReferenceSpaceChangePending : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataReferenceSpaceChangePending-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataReferenceSpaceChangePending : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataReferenceSpaceChangePending-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "session" because this struct is returned only.
    // Skip checking member "referenceSpaceType" because this struct is returned only.
    // Skip checking member "changeTime" because this struct is returned only.
    // Skip checking member "poseValid" because this struct is returned only.
    // Skip checking member "poseInPreviousSpace" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataInteractionProfileChanged* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataInteractionProfileChanged",
                             value->type, "VUID-XrEventDataInteractionProfileChanged-type-type", XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED, "XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataInteractionProfileChanged-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataInteractionProfileChanged struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataInteractionProfileChanged : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataInteractionProfileChanged-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataInteractionProfileChanged : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataInteractionProfileChanged-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "session" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticVibration* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAPTIC_VIBRATION) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHapticVibration",
                             value->type, "VUID-XrHapticVibration-type-type", XR_TYPE_HAPTIC_VIBRATION, "XR_TYPE_HAPTIC_VIBRATION");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHapticVibration-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHapticVibration struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHapticVibration : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticVibration-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHapticVibration : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticVibration-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrOffset2Df* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRect2Df* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVector4f* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColor4f* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColor3f* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtent3Df* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpheref* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBoxf* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrustumf* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrUuid* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpacesLocateInfo* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACES_LOCATE_INFO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpacesLocateInfo",
                             value->type, "VUID-XrSpacesLocateInfo-type-type", XR_TYPE_SPACES_LOCATE_INFO, "XR_TYPE_SPACES_LOCATE_INFO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpacesLocateInfo-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpacesLocateInfo struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpacesLocateInfo : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpacesLocateInfo-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpacesLocateInfo : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpacesLocateInfo-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSpacesLocateInfo-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Non-optional array length must be non-zero
    if (0 >= value->spaceCount && nullptr != value->spaces) {
        CoreValidLogMessage(instance_info, "VUID-XrSpacesLocateInfo-spaceCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpacesLocateInfo member spaceCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->spaces && 0 != value->spaceCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpacesLocateInfo-spaces-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpacesLocateInfo contains invalid NULL for XrSpace \"spaces\" is which not "
                            "optional since \"spaceCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->spaces) {
        for (uint32_t value_spaces_inc = 0; value_spaces_inc < value->spaceCount; ++value_spaces_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->spaces[value_spaces_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSpace handle \"spaces\" ";
                    oss << HandleToHexString(value->spaces[value_spaces_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSpacesLocateInfo-spaces-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceLocationData* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "locationFlags" because this struct is returned only.
    // Skip checking member "pose" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceLocations* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_LOCATIONS) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceLocations",
                             value->type, "VUID-XrSpaceLocations-type-type", XR_TYPE_SPACE_LOCATIONS, "XR_TYPE_SPACE_LOCATIONS");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPACE_VELOCITIES);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceLocations-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceLocations struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceLocations : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceLocations-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceLocations : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceLocations-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->locationCount && nullptr != value->locations) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceLocations-locationCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceLocations member locationCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->locations && 0 != value->locationCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceLocations-locations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpaceLocations contains invalid NULL for XrSpaceLocationData \"locations\" is which not "
                            "optional since \"locationCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->locations) {
        for (uint32_t value_locations_inc = 0; value_locations_inc < value->locationCount; ++value_locations_inc) {
            // Validate that the structure XrSpaceLocationData is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->locations[value_locations_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpaceLocations-locations-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpaceLocations member locations is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceVelocityData* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "velocityFlags" because this struct is returned only.
    // Skip checking member "linearVelocity" because this struct is returned only.
    // Skip checking member "angularVelocity" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceVelocities* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_VELOCITIES) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceVelocities",
                             value->type, "VUID-XrSpaceVelocities-type-type", XR_TYPE_SPACE_VELOCITIES, "XR_TYPE_SPACE_VELOCITIES");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocities-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceVelocities struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceVelocities : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocities-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceVelocities : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocities-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->velocityCount && nullptr != value->velocities) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocities-velocityCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceVelocities member velocityCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->velocities && 0 != value->velocityCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocities-velocities-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpaceVelocities contains invalid NULL for XrSpaceVelocityData \"velocities\" is which not "
                            "optional since \"velocityCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->velocities) {
        for (uint32_t value_velocities_inc = 0; value_velocities_inc < value->velocityCount; ++value_velocities_inc) {
            // Validate that the structure XrSpaceVelocityData is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->velocities[value_velocities_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpaceVelocities-velocities-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpaceVelocities member velocities is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerCubeKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerCubeKHR",
                             value->type, "VUID-XrCompositionLayerCubeKHR-type-type", XR_TYPE_COMPOSITION_LAYER_CUBE_KHR, "XR_TYPE_COMPOSITION_LAYER_CUBE_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCubeKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerCubeKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerCubeKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCubeKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerCubeKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCubeKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_flags_result = ValidateXrCompositionLayerFlags(value->layerFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == composition_layer_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerCubeKHR invalid member XrCompositionLayerFlags \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCubeKHR-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCubeKHR-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Make sure the enum type XrEyeVisibility value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerCubeKHR", "eyeVisibility", objects_info, value->eyeVisibility)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerCubeKHR contains invalid XrEyeVisibility \"eyeVisibility\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->eyeVisibility));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCubeKHR-eyeVisibility-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSwapchainHandle(&value->swapchain);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSwapchain handle \"swapchain\" ";
            oss << HandleToHexString(value->swapchain);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCubeKHR-swapchain-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInstanceCreateInfoAndroidKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInstanceCreateInfoAndroidKHR",
                             value->type, "VUID-XrInstanceCreateInfoAndroidKHR-type-type", XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR, "XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfoAndroidKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInstanceCreateInfoAndroidKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInstanceCreateInfoAndroidKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfoAndroidKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInstanceCreateInfoAndroidKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfoAndroidKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->applicationVM) {
        CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfoAndroidKHR-applicationVM-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrInstanceCreateInfoAndroidKHR contains invalid NULL for void \"applicationVM\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->applicationActivity) {
        CoreValidLogMessage(instance_info, "VUID-XrInstanceCreateInfoAndroidKHR-applicationActivity-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrInstanceCreateInfoAndroidKHR contains invalid NULL for void \"applicationActivity\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerDepthInfoKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerDepthInfoKHR",
                             value->type, "VUID-XrCompositionLayerDepthInfoKHR-type-type", XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR, "XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthInfoKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerDepthInfoKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerDepthInfoKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthInfoKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerDepthInfoKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthInfoKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->subImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthInfoKHR-subImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerDepthInfoKHR member subImage is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanSwapchainFormatListCreateInfoKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVulkanSwapchainFormatListCreateInfoKHR",
                             value->type, "VUID-XrVulkanSwapchainFormatListCreateInfoKHR-type-type", XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR, "XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVulkanSwapchainFormatListCreateInfoKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVulkanSwapchainFormatListCreateInfoKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVulkanSwapchainFormatListCreateInfoKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanSwapchainFormatListCreateInfoKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVulkanSwapchainFormatListCreateInfoKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanSwapchainFormatListCreateInfoKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->viewFormatCount is non-zero
    if (0 != value->viewFormatCount && nullptr == value->viewFormats) {
        CoreValidLogMessage(instance_info, "VUID-XrVulkanSwapchainFormatListCreateInfoKHR-viewFormats-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrVulkanSwapchainFormatListCreateInfoKHR member viewFormatCount is NULL, but value->viewFormatCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->viewFormats && 0 != value->viewFormatCount) {
        CoreValidLogMessage(instance_info, "VUID-XrVulkanSwapchainFormatListCreateInfoKHR-viewFormats-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrVulkanSwapchainFormatListCreateInfoKHR contains invalid NULL for VkFormat \"viewFormats\" is which not "
                            "optional since \"viewFormatCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrVulkanSwapchainFormatListCreateInfoKHR-viewFormats-parameter" type
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerCylinderKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerCylinderKHR",
                             value->type, "VUID-XrCompositionLayerCylinderKHR-type-type", XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR, "XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCylinderKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerCylinderKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerCylinderKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCylinderKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerCylinderKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCylinderKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_flags_result = ValidateXrCompositionLayerFlags(value->layerFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == composition_layer_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerCylinderKHR invalid member XrCompositionLayerFlags \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCylinderKHR-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCylinderKHR-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Make sure the enum type XrEyeVisibility value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerCylinderKHR", "eyeVisibility", objects_info, value->eyeVisibility)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerCylinderKHR contains invalid XrEyeVisibility \"eyeVisibility\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->eyeVisibility));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCylinderKHR-eyeVisibility-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->subImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerCylinderKHR-subImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerCylinderKHR member subImage is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerEquirectKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerEquirectKHR",
                             value->type, "VUID-XrCompositionLayerEquirectKHR-type-type", XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR, "XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirectKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerEquirectKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerEquirectKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirectKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerEquirectKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirectKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_flags_result = ValidateXrCompositionLayerFlags(value->layerFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == composition_layer_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerEquirectKHR invalid member XrCompositionLayerFlags \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirectKHR-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirectKHR-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Make sure the enum type XrEyeVisibility value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerEquirectKHR", "eyeVisibility", objects_info, value->eyeVisibility)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerEquirectKHR contains invalid XrEyeVisibility \"eyeVisibility\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->eyeVisibility));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirectKHR-eyeVisibility-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->subImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirectKHR-subImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerEquirectKHR member subImage is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLWin32KHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingOpenGLWin32KHR",
                             value->type, "VUID-XrGraphicsBindingOpenGLWin32KHR-type-type", XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR, "XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLWin32KHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingOpenGLWin32KHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLWin32KHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLWin32KHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLWin32KHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLWin32KHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32)
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLXlibKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingOpenGLXlibKHR",
                             value->type, "VUID-XrGraphicsBindingOpenGLXlibKHR-type-type", XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR, "XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLXlibKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingOpenGLXlibKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLXlibKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLXlibKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLXlibKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLXlibKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->xDisplay) {
        CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLXlibKHR-xDisplay-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrGraphicsBindingOpenGLXlibKHR contains invalid NULL for Display \"xDisplay\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrGraphicsBindingOpenGLXlibKHR-xDisplay-parameter" type
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB)
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLXcbKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingOpenGLXcbKHR",
                             value->type, "VUID-XrGraphicsBindingOpenGLXcbKHR-type-type", XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR, "XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLXcbKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingOpenGLXcbKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLXcbKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLXcbKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLXcbKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLXcbKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB)
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLWaylandKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingOpenGLWaylandKHR",
                             value->type, "VUID-XrGraphicsBindingOpenGLWaylandKHR-type-type", XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR, "XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLWaylandKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingOpenGLWaylandKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLWaylandKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLWaylandKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLWaylandKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLWaylandKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND)
#if defined(XR_USE_GRAPHICS_API_OPENGL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageOpenGLKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageOpenGLKHR",
                             value->type, "VUID-XrSwapchainImageOpenGLKHR-type-type", XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR, "XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageOpenGLKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageOpenGLKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageOpenGLKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageOpenGLKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageOpenGLKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageOpenGLKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "image" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
#if defined(XR_USE_GRAPHICS_API_OPENGL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsOpenGLKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsRequirementsOpenGLKHR",
                             value->type, "VUID-XrGraphicsRequirementsOpenGLKHR-type-type", XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR, "XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsOpenGLKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsRequirementsOpenGLKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsOpenGLKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsOpenGLKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsOpenGLKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsOpenGLKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingOpenGLESAndroidKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingOpenGLESAndroidKHR",
                             value->type, "VUID-XrGraphicsBindingOpenGLESAndroidKHR-type-type", XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR, "XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLESAndroidKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingOpenGLESAndroidKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLESAndroidKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLESAndroidKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingOpenGLESAndroidKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingOpenGLESAndroidKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageOpenGLESKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageOpenGLESKHR",
                             value->type, "VUID-XrSwapchainImageOpenGLESKHR-type-type", XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR, "XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageOpenGLESKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageOpenGLESKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageOpenGLESKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageOpenGLESKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageOpenGLESKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageOpenGLESKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "image" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsOpenGLESKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsRequirementsOpenGLESKHR",
                             value->type, "VUID-XrGraphicsRequirementsOpenGLESKHR-type-type", XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR, "XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsOpenGLESKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsRequirementsOpenGLESKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsOpenGLESKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsOpenGLESKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsOpenGLESKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsOpenGLESKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingVulkanKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingVulkanKHR",
                             value->type, "VUID-XrGraphicsBindingVulkanKHR-type-type", XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, "XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingVulkanKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingVulkanKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingVulkanKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingVulkanKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingVulkanKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingVulkanKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageVulkanKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageVulkanKHR",
                             value->type, "VUID-XrSwapchainImageVulkanKHR-type-type", XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, "XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageVulkanKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageVulkanKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageVulkanKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageVulkanKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageVulkanKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageVulkanKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "image" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsVulkanKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsRequirementsVulkanKHR",
                             value->type, "VUID-XrGraphicsRequirementsVulkanKHR-type-type", XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR, "XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsVulkanKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsRequirementsVulkanKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsVulkanKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsVulkanKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsVulkanKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsVulkanKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_D3D11)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingD3D11KHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_D3D11_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingD3D11KHR",
                             value->type, "VUID-XrGraphicsBindingD3D11KHR-type-type", XR_TYPE_GRAPHICS_BINDING_D3D11_KHR, "XR_TYPE_GRAPHICS_BINDING_D3D11_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingD3D11KHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingD3D11KHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingD3D11KHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingD3D11KHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingD3D11KHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingD3D11KHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->device) {
        CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingD3D11KHR-device-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrGraphicsBindingD3D11KHR contains invalid NULL for ID3D11Device \"device\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrGraphicsBindingD3D11KHR-device-parameter" type
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D11)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageD3D11KHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageD3D11KHR",
                             value->type, "VUID-XrSwapchainImageD3D11KHR-type-type", XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR, "XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageD3D11KHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageD3D11KHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageD3D11KHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageD3D11KHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageD3D11KHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageD3D11KHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "texture" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D11)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsD3D11KHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsRequirementsD3D11KHR",
                             value->type, "VUID-XrGraphicsRequirementsD3D11KHR-type-type", XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR, "XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsD3D11KHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsRequirementsD3D11KHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsD3D11KHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsD3D11KHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsD3D11KHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsD3D11KHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D12)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingD3D12KHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_D3D12_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingD3D12KHR",
                             value->type, "VUID-XrGraphicsBindingD3D12KHR-type-type", XR_TYPE_GRAPHICS_BINDING_D3D12_KHR, "XR_TYPE_GRAPHICS_BINDING_D3D12_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingD3D12KHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingD3D12KHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingD3D12KHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingD3D12KHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingD3D12KHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingD3D12KHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->device) {
        CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingD3D12KHR-device-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrGraphicsBindingD3D12KHR contains invalid NULL for ID3D12Device \"device\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrGraphicsBindingD3D12KHR-device-parameter" type
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->queue) {
        CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingD3D12KHR-queue-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrGraphicsBindingD3D12KHR contains invalid NULL for ID3D12CommandQueue \"queue\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrGraphicsBindingD3D12KHR-queue-parameter" type
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_D3D12)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageD3D12KHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageD3D12KHR",
                             value->type, "VUID-XrSwapchainImageD3D12KHR-type-type", XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR, "XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageD3D12KHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageD3D12KHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageD3D12KHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageD3D12KHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageD3D12KHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageD3D12KHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "texture" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_D3D12)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsD3D12KHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsRequirementsD3D12KHR",
                             value->type, "VUID-XrGraphicsRequirementsD3D12KHR-type-type", XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR, "XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsD3D12KHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsRequirementsD3D12KHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsD3D12KHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsD3D12KHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsD3D12KHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsD3D12KHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_METAL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingMetalKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_METAL_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingMetalKHR",
                             value->type, "VUID-XrGraphicsBindingMetalKHR-type-type", XR_TYPE_GRAPHICS_BINDING_METAL_KHR, "XR_TYPE_GRAPHICS_BINDING_METAL_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingMetalKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingMetalKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingMetalKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingMetalKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingMetalKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingMetalKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->commandQueue) {
        CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingMetalKHR-commandQueue-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrGraphicsBindingMetalKHR contains invalid NULL for void \"commandQueue\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_METAL)
#if defined(XR_USE_GRAPHICS_API_METAL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageMetalKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageMetalKHR",
                             value->type, "VUID-XrSwapchainImageMetalKHR-type-type", XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR, "XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageMetalKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageMetalKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageMetalKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageMetalKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageMetalKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageMetalKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "texture" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_METAL)
#if defined(XR_USE_GRAPHICS_API_METAL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsRequirementsMetalKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_REQUIREMENTS_METAL_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsRequirementsMetalKHR",
                             value->type, "VUID-XrGraphicsRequirementsMetalKHR-type-type", XR_TYPE_GRAPHICS_REQUIREMENTS_METAL_KHR, "XR_TYPE_GRAPHICS_REQUIREMENTS_METAL_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsMetalKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsRequirementsMetalKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsMetalKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsMetalKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsRequirementsMetalKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsMetalKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->metalDevice) {
        CoreValidLogMessage(instance_info, "VUID-XrGraphicsRequirementsMetalKHR-metalDevice-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrGraphicsRequirementsMetalKHR contains invalid NULL for void \"metalDevice\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_METAL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVisibilityMaskKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VISIBILITY_MASK_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVisibilityMaskKHR",
                             value->type, "VUID-XrVisibilityMaskKHR-type-type", XR_TYPE_VISIBILITY_MASK_KHR, "XR_TYPE_VISIBILITY_MASK_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVisibilityMaskKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVisibilityMaskKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVisibilityMaskKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVisibilityMaskKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVisibilityMaskKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVisibilityMaskKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrVisibilityMaskKHR-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrVisibilityMaskKHR member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrVisibilityMaskKHR-vertices-parameter" type
    // Optional array must be non-NULL when value->indexCapacityInput is non-zero
    if (0 != value->indexCapacityInput && nullptr == value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrVisibilityMaskKHR-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrVisibilityMaskKHR member indexCapacityInput is NULL, but value->indexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrVisibilityMaskKHR-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVisibilityMaskChangedKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataVisibilityMaskChangedKHR",
                             value->type, "VUID-XrEventDataVisibilityMaskChangedKHR-type-type", XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR, "XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVisibilityMaskChangedKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataVisibilityMaskChangedKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataVisibilityMaskChangedKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVisibilityMaskChangedKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataVisibilityMaskChangedKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVisibilityMaskChangedKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "session" because this struct is returned only.
    // Skip checking member "viewConfigurationType" because this struct is returned only.
    // Skip checking member "viewIndex" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerColorScaleBiasKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerColorScaleBiasKHR",
                             value->type, "VUID-XrCompositionLayerColorScaleBiasKHR-type-type", XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR, "XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerColorScaleBiasKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerColorScaleBiasKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerColorScaleBiasKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerColorScaleBiasKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerColorScaleBiasKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerColorScaleBiasKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLoaderInitInfoBaseHeaderKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrLoaderInitInfoBaseHeaderKHR-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrLoaderInitInfoBaseHeaderKHR-next-next" because it is a base structure
#if defined(XR_USE_PLATFORM_ANDROID)
    if (value->type == XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) {
        const XrLoaderInitInfoAndroidKHR* new_value = reinterpret_cast<const XrLoaderInitInfoAndroidKHR*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_KHR_loader_init_android")) {
            std::string error_str = "XrLoaderInitInfoBaseHeaderKHR being used with child struct type ";
            error_str += "\"XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR\"";
            error_str += " which requires extension \"XR_KHR_loader_init_android\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoBaseHeaderKHR-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_PLATFORM_ANDROID)
    if (value->type == XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT) {
        const XrLoaderInitInfoPropertiesEXT* new_value = reinterpret_cast<const XrLoaderInitInfoPropertiesEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_loader_init_properties")) {
            std::string error_str = "XrLoaderInitInfoBaseHeaderKHR being used with child struct type ";
            error_str += "\"XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT\"";
            error_str += " which requires extension \"XR_EXT_loader_init_properties\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoBaseHeaderKHR-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrLoaderInitInfoBaseHeaderKHR",
                         value->type, "VUID-XrLoaderInitInfoBaseHeaderKHR-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLoaderInitInfoAndroidKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLoaderInitInfoAndroidKHR",
                             value->type, "VUID-XrLoaderInitInfoAndroidKHR-type-type", XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR, "XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoAndroidKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLoaderInitInfoAndroidKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLoaderInitInfoAndroidKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoAndroidKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLoaderInitInfoAndroidKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoAndroidKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->applicationVM) {
        CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoAndroidKHR-applicationVM-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrLoaderInitInfoAndroidKHR contains invalid NULL for void \"applicationVM\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->applicationContext) {
        CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoAndroidKHR-applicationContext-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrLoaderInitInfoAndroidKHR contains invalid NULL for void \"applicationContext\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanInstanceCreateInfoKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVulkanInstanceCreateInfoKHR",
                             value->type, "VUID-XrVulkanInstanceCreateInfoKHR-type-type", XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR, "XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVulkanInstanceCreateInfoKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVulkanInstanceCreateInfoKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVulkanInstanceCreateInfoKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanInstanceCreateInfoKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVulkanInstanceCreateInfoKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanInstanceCreateInfoKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult vulkan_instance_create_flags_khr_result = ValidateXrVulkanInstanceCreateFlagsKHR(value->createFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == vulkan_instance_create_flags_khr_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrVulkanInstanceCreateInfoKHR invalid member XrVulkanInstanceCreateFlagsKHR \"createFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrVulkanInstanceCreateInfoKHR-createFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->pfnGetInstanceProcAddr) {
        CoreValidLogMessage(instance_info, "VUID-XrVulkanInstanceCreateInfoKHR-pfnGetInstanceProcAddr-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrVulkanInstanceCreateInfoKHR contains invalid NULL for PFN_vkGetInstanceProcAddr \"pfnGetInstanceProcAddr\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrVulkanInstanceCreateInfoKHR-pfnGetInstanceProcAddr-parameter" type
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->vulkanCreateInfo) {
        CoreValidLogMessage(instance_info, "VUID-XrVulkanInstanceCreateInfoKHR-vulkanCreateInfo-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrVulkanInstanceCreateInfoKHR contains invalid NULL for VkInstanceCreateInfo \"vulkanCreateInfo\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrVulkanInstanceCreateInfoKHR-vulkanCreateInfo-parameter" type
    // NOTE: Can't validate "VUID-XrVulkanInstanceCreateInfoKHR-vulkanAllocator-parameter" type
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanDeviceCreateInfoKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVulkanDeviceCreateInfoKHR",
                             value->type, "VUID-XrVulkanDeviceCreateInfoKHR-type-type", XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR, "XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVulkanDeviceCreateInfoKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVulkanDeviceCreateInfoKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVulkanDeviceCreateInfoKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanDeviceCreateInfoKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVulkanDeviceCreateInfoKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanDeviceCreateInfoKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult vulkan_device_create_flags_khr_result = ValidateXrVulkanDeviceCreateFlagsKHR(value->createFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == vulkan_device_create_flags_khr_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrVulkanDeviceCreateInfoKHR invalid member XrVulkanDeviceCreateFlagsKHR \"createFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrVulkanDeviceCreateInfoKHR-createFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->pfnGetInstanceProcAddr) {
        CoreValidLogMessage(instance_info, "VUID-XrVulkanDeviceCreateInfoKHR-pfnGetInstanceProcAddr-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrVulkanDeviceCreateInfoKHR contains invalid NULL for PFN_vkGetInstanceProcAddr \"pfnGetInstanceProcAddr\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrVulkanDeviceCreateInfoKHR-pfnGetInstanceProcAddr-parameter" type
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->vulkanCreateInfo) {
        CoreValidLogMessage(instance_info, "VUID-XrVulkanDeviceCreateInfoKHR-vulkanCreateInfo-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrVulkanDeviceCreateInfoKHR contains invalid NULL for VkDeviceCreateInfo \"vulkanCreateInfo\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrVulkanDeviceCreateInfoKHR-vulkanCreateInfo-parameter" type
    // NOTE: Can't validate "VUID-XrVulkanDeviceCreateInfoKHR-vulkanAllocator-parameter" type
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanGraphicsDeviceGetInfoKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVulkanGraphicsDeviceGetInfoKHR",
                             value->type, "VUID-XrVulkanGraphicsDeviceGetInfoKHR-type-type", XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR, "XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVulkanGraphicsDeviceGetInfoKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVulkanGraphicsDeviceGetInfoKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVulkanGraphicsDeviceGetInfoKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanGraphicsDeviceGetInfoKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVulkanGraphicsDeviceGetInfoKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanGraphicsDeviceGetInfoKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerEquirect2KHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerEquirect2KHR",
                             value->type, "VUID-XrCompositionLayerEquirect2KHR-type-type", XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR, "XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirect2KHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerEquirect2KHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerEquirect2KHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirect2KHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerEquirect2KHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirect2KHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_flags_result = ValidateXrCompositionLayerFlags(value->layerFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == composition_layer_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerEquirect2KHR invalid member XrCompositionLayerFlags \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirect2KHR-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirect2KHR-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Make sure the enum type XrEyeVisibility value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerEquirect2KHR", "eyeVisibility", objects_info, value->eyeVisibility)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerEquirect2KHR contains invalid XrEyeVisibility \"eyeVisibility\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->eyeVisibility));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirect2KHR-eyeVisibility-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->subImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerEquirect2KHR-subImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerEquirect2KHR member subImage is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBindingModificationBaseHeaderKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrBindingModificationBaseHeaderKHR-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrBindingModificationBaseHeaderKHR-next-next" because it is a base structure
    if (value->type == XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) {
        const XrInteractionProfileDpadBindingEXT* new_value = reinterpret_cast<const XrInteractionProfileDpadBindingEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_dpad_binding")) {
            std::string error_str = "XrBindingModificationBaseHeaderKHR being used with child struct type ";
            error_str += "\"XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT\"";
            error_str += " which requires extension \"XR_EXT_dpad_binding\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrBindingModificationBaseHeaderKHR-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) {
        const XrInteractionProfileAnalogThresholdVALVE* new_value = reinterpret_cast<const XrInteractionProfileAnalogThresholdVALVE*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_VALVE_analog_threshold")) {
            std::string error_str = "XrBindingModificationBaseHeaderKHR being used with child struct type ";
            error_str += "\"XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE\"";
            error_str += " which requires extension \"XR_VALVE_analog_threshold\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrBindingModificationBaseHeaderKHR-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrBindingModificationBaseHeaderKHR",
                         value->type, "VUID-XrBindingModificationBaseHeaderKHR-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBindingModificationsKHR* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BINDING_MODIFICATIONS_KHR) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBindingModificationsKHR",
                             value->type, "VUID-XrBindingModificationsKHR-type-type", XR_TYPE_BINDING_MODIFICATIONS_KHR, "XR_TYPE_BINDING_MODIFICATIONS_KHR");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBindingModificationsKHR-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBindingModificationsKHR struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBindingModificationsKHR : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBindingModificationsKHR-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBindingModificationsKHR : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBindingModificationsKHR-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->bindingModificationCount is non-zero
    if (0 != value->bindingModificationCount && nullptr == value->bindingModifications) {
        CoreValidLogMessage(instance_info, "VUID-XrBindingModificationsKHR-bindingModifications-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrBindingModificationsKHR member bindingModificationCount is NULL, but value->bindingModificationCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->bindingModifications) {
        for (uint32_t value_bindingmodifications_inc = 0; value_bindingmodifications_inc < value->bindingModificationCount; ++value_bindingmodifications_inc) {
            if (value->bindingModifications[value_bindingmodifications_inc] == nullptr) {
                std::string error_message = "Structure XrBindingModificationsKHR member bindingModifications";
                error_message += "[";
                error_message += std::to_string(value_bindingmodifications_inc);
                error_message += "]";
                error_message += " is null";
                CoreValidLogMessage(instance_info, "VUID-XrBindingModificationsKHR-bindingModifications-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
            // Validate if XrBindingModificationBaseHeaderKHR is a child structure of type XrInteractionProfileDpadBindingEXT and it is valid
            {
                if (value->bindingModifications != nullptr) {
                    const XrInteractionProfileDpadBindingEXT* const* new_interactionprofiledpadbindingext_value = reinterpret_cast<const XrInteractionProfileDpadBindingEXT* const*>(value->bindingModifications);
                    if (new_interactionprofiledpadbindingext_value[value_bindingmodifications_inc]->type == XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) {
                        if (nullptr != new_interactionprofiledpadbindingext_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_interactionprofiledpadbindingext_value[value_bindingmodifications_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrBindingModificationsKHR member bindingModifications";
                                error_message += "[";
                                error_message += std::to_string(value_bindingmodifications_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrBindingModificationsKHR-bindingModifications-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrBindingModificationBaseHeaderKHR is a child structure of type XrInteractionProfileAnalogThresholdVALVE and it is valid
            {
                if (value->bindingModifications != nullptr) {
                    const XrInteractionProfileAnalogThresholdVALVE* const* new_interactionprofileanalogthresholdvalve_value = reinterpret_cast<const XrInteractionProfileAnalogThresholdVALVE* const*>(value->bindingModifications);
                    if (new_interactionprofileanalogthresholdvalve_value[value_bindingmodifications_inc]->type == XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) {
                        if (nullptr != new_interactionprofileanalogthresholdvalve_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_interactionprofileanalogthresholdvalve_value[value_bindingmodifications_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrBindingModificationsKHR member bindingModifications";
                                error_message += "[";
                                error_message += std::to_string(value_bindingmodifications_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrBindingModificationsKHR-bindingModifications-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate that the base-structure XrBindingModificationBaseHeaderKHR is valid
            if (nullptr != value->bindingModifications[value_bindingmodifications_inc]) {
                xr_result = ValidateXrStruct(instance_info, command_name,
                                                                objects_info, check_members, true, value->bindingModifications[value_bindingmodifications_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(instance_info, "VUID-XrBindingModificationsKHR-bindingModifications-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info,
                                        "Structure XrBindingModificationsKHR member bindingModifications is invalid");
                    return xr_result;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataPerfSettingsEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataPerfSettingsEXT",
                             value->type, "VUID-XrEventDataPerfSettingsEXT-type-type", XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT, "XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataPerfSettingsEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataPerfSettingsEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataPerfSettingsEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataPerfSettingsEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataPerfSettingsEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataPerfSettingsEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "domain" because this struct is returned only.
    // Skip checking member "subDomain" because this struct is returned only.
    // Skip checking member "fromLevel" because this struct is returned only.
    // Skip checking member "toLevel" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDebugUtilsObjectNameInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrDebugUtilsObjectNameInfoEXT",
                             value->type, "VUID-XrDebugUtilsObjectNameInfoEXT-type-type", XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, "XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsObjectNameInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrDebugUtilsObjectNameInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrDebugUtilsObjectNameInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsObjectNameInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrDebugUtilsObjectNameInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsObjectNameInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrObjectType value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrDebugUtilsObjectNameInfoEXT", "objectType", objects_info, value->objectType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrDebugUtilsObjectNameInfoEXT contains invalid XrObjectType \"objectType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->objectType));
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsObjectNameInfoEXT-objectType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // NOTE: Can't validate "VUID-XrDebugUtilsObjectNameInfoEXT-objectName-parameter" null-termination
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDebugUtilsLabelEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_DEBUG_UTILS_LABEL_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrDebugUtilsLabelEXT",
                             value->type, "VUID-XrDebugUtilsLabelEXT-type-type", XR_TYPE_DEBUG_UTILS_LABEL_EXT, "XR_TYPE_DEBUG_UTILS_LABEL_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsLabelEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrDebugUtilsLabelEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrDebugUtilsLabelEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsLabelEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrDebugUtilsLabelEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsLabelEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->labelName) {
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsLabelEXT-labelName-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrDebugUtilsLabelEXT contains invalid NULL for char \"labelName\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrDebugUtilsLabelEXT-labelName-parameter" null-termination
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDebugUtilsMessengerCallbackDataEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrDebugUtilsMessengerCallbackDataEXT",
                             value->type, "VUID-XrDebugUtilsMessengerCallbackDataEXT-type-type", XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT, "XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCallbackDataEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrDebugUtilsMessengerCallbackDataEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrDebugUtilsMessengerCallbackDataEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCallbackDataEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrDebugUtilsMessengerCallbackDataEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCallbackDataEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // NOTE: Can't validate "VUID-XrDebugUtilsMessengerCallbackDataEXT-messageId-parameter" null-termination
    // NOTE: Can't validate "VUID-XrDebugUtilsMessengerCallbackDataEXT-functionName-parameter" null-termination
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->message) {
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCallbackDataEXT-message-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrDebugUtilsMessengerCallbackDataEXT contains invalid NULL for char \"message\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrDebugUtilsMessengerCallbackDataEXT-message-parameter" null-termination
    // Optional array must be non-NULL when value->objectCount is non-zero
    if (0 != value->objectCount && nullptr == value->objects) {
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCallbackDataEXT-objects-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrDebugUtilsMessengerCallbackDataEXT member objectCount is NULL, but value->objectCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Optional array must be non-NULL when value->sessionLabelCount is non-zero
    if (0 != value->sessionLabelCount && nullptr == value->sessionLabels) {
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCallbackDataEXT-sessionLabels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrDebugUtilsMessengerCallbackDataEXT member sessionLabelCount is NULL, but value->sessionLabelCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDebugUtilsMessengerCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrDebugUtilsMessengerCreateInfoEXT",
                             value->type, "VUID-XrDebugUtilsMessengerCreateInfoEXT-type-type", XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, "XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrDebugUtilsMessengerCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrDebugUtilsMessengerCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrDebugUtilsMessengerCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult debug_utils_message_severity_flags_ext_result = ValidateXrDebugUtilsMessageSeverityFlagsEXT(value->messageSeverities);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == debug_utils_message_severity_flags_ext_result) {
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCreateInfoEXT-messageSeverities-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrDebugUtilsMessageSeverityFlagsEXT \"messageSeverities\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != debug_utils_message_severity_flags_ext_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrDebugUtilsMessengerCreateInfoEXT invalid member XrDebugUtilsMessageSeverityFlagsEXT \"messageSeverities\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->messageSeverities));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCreateInfoEXT-messageSeverities-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    ValidateXrFlagsResult debug_utils_message_type_flags_ext_result = ValidateXrDebugUtilsMessageTypeFlagsEXT(value->messageTypes);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == debug_utils_message_type_flags_ext_result) {
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCreateInfoEXT-messageTypes-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrDebugUtilsMessageTypeFlagsEXT \"messageTypes\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != debug_utils_message_type_flags_ext_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrDebugUtilsMessengerCreateInfoEXT invalid member XrDebugUtilsMessageTypeFlagsEXT \"messageTypes\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->messageTypes));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCreateInfoEXT-messageTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->userCallback) {
        CoreValidLogMessage(instance_info, "VUID-XrDebugUtilsMessengerCreateInfoEXT-userCallback-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrDebugUtilsMessengerCreateInfoEXT contains invalid NULL for PFN_xrDebugUtilsMessengerCallbackEXT \"userCallback\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrDebugUtilsMessengerCreateInfoEXT-userCallback-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEyeGazeInteractionPropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemEyeGazeInteractionPropertiesEXT",
                             value->type, "VUID-XrSystemEyeGazeInteractionPropertiesEXT-type-type", XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT, "XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemEyeGazeInteractionPropertiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemEyeGazeInteractionPropertiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemEyeGazeInteractionPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEyeGazeInteractionPropertiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemEyeGazeInteractionPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEyeGazeInteractionPropertiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsEyeGazeInteraction" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeGazeSampleTimeEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEyeGazeSampleTimeEXT",
                             value->type, "VUID-XrEyeGazeSampleTimeEXT-type-type", XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT, "XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazeSampleTimeEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEyeGazeSampleTimeEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEyeGazeSampleTimeEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazeSampleTimeEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEyeGazeSampleTimeEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazeSampleTimeEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSessionCreateInfoOverlayEXTX* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSessionCreateInfoOverlayEXTX",
                             value->type, "VUID-XrSessionCreateInfoOverlayEXTX-type-type", XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX, "XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSessionCreateInfoOverlayEXTX-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSessionCreateInfoOverlayEXTX struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSessionCreateInfoOverlayEXTX : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSessionCreateInfoOverlayEXTX-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSessionCreateInfoOverlayEXTX : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSessionCreateInfoOverlayEXTX-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult overlay_session_create_flags_extx_result = ValidateXrOverlaySessionCreateFlagsEXTX(value->createFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == overlay_session_create_flags_extx_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSessionCreateInfoOverlayEXTX invalid member XrOverlaySessionCreateFlagsEXTX \"createFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSessionCreateInfoOverlayEXTX-createFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataMainSessionVisibilityChangedEXTX* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataMainSessionVisibilityChangedEXTX",
                             value->type, "VUID-XrEventDataMainSessionVisibilityChangedEXTX-type-type", XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX, "XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataMainSessionVisibilityChangedEXTX-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataMainSessionVisibilityChangedEXTX struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataMainSessionVisibilityChangedEXTX : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataMainSessionVisibilityChangedEXTX-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataMainSessionVisibilityChangedEXTX : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataMainSessionVisibilityChangedEXTX-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "visible" because this struct is returned only.
    // Skip checking member "flags" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorCreateInfoMSFT",
                             value->type, "VUID-XrSpatialAnchorCreateInfoMSFT-type-type", XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT, "XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorCreateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoMSFT-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorSpaceCreateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorSpaceCreateInfoMSFT",
                             value->type, "VUID-XrSpatialAnchorSpaceCreateInfoMSFT-type-type", XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT, "XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorSpaceCreateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorSpaceCreateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorSpaceCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorSpaceCreateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorSpaceCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorSpaceCreateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorMSFTHandle(&value->anchor);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpatialAnchorMSFT handle \"anchor\" ";
            oss << HandleToHexString(value->anchor);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorSpaceCreateInfoMSFT-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerImageLayoutFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerImageLayoutFB",
                             value->type, "VUID-XrCompositionLayerImageLayoutFB-type-type", XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB, "XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerImageLayoutFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerImageLayoutFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerImageLayoutFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerImageLayoutFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerImageLayoutFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerImageLayoutFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_image_layout_flags_fb_result = ValidateXrCompositionLayerImageLayoutFlagsFB(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == composition_layer_image_layout_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerImageLayoutFB invalid member XrCompositionLayerImageLayoutFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerImageLayoutFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerAlphaBlendFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerAlphaBlendFB",
                             value->type, "VUID-XrCompositionLayerAlphaBlendFB-type-type", XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB, "XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerAlphaBlendFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerAlphaBlendFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerAlphaBlendFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerAlphaBlendFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerAlphaBlendFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerAlphaBlendFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrBlendFactorFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerAlphaBlendFB", "srcFactorColor", objects_info, value->srcFactorColor)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerAlphaBlendFB contains invalid XrBlendFactorFB \"srcFactorColor\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->srcFactorColor));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerAlphaBlendFB-srcFactorColor-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrBlendFactorFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerAlphaBlendFB", "dstFactorColor", objects_info, value->dstFactorColor)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerAlphaBlendFB contains invalid XrBlendFactorFB \"dstFactorColor\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->dstFactorColor));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerAlphaBlendFB-dstFactorColor-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrBlendFactorFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerAlphaBlendFB", "srcFactorAlpha", objects_info, value->srcFactorAlpha)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerAlphaBlendFB contains invalid XrBlendFactorFB \"srcFactorAlpha\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->srcFactorAlpha));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerAlphaBlendFB-srcFactorAlpha-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrBlendFactorFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerAlphaBlendFB", "dstFactorAlpha", objects_info, value->dstFactorAlpha)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerAlphaBlendFB contains invalid XrBlendFactorFB \"dstFactorAlpha\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->dstFactorAlpha));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerAlphaBlendFB-dstFactorAlpha-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewConfigurationDepthRangeEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrViewConfigurationDepthRangeEXT",
                             value->type, "VUID-XrViewConfigurationDepthRangeEXT-type-type", XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT, "XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationDepthRangeEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrViewConfigurationDepthRangeEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrViewConfigurationDepthRangeEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationDepthRangeEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrViewConfigurationDepthRangeEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationDepthRangeEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_PLATFORM_EGL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGraphicsBindingEGLMNDX* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GRAPHICS_BINDING_EGL_MNDX) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGraphicsBindingEGLMNDX",
                             value->type, "VUID-XrGraphicsBindingEGLMNDX-type-type", XR_TYPE_GRAPHICS_BINDING_EGL_MNDX, "XR_TYPE_GRAPHICS_BINDING_EGL_MNDX");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingEGLMNDX-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGraphicsBindingEGLMNDX struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingEGLMNDX : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingEGLMNDX-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGraphicsBindingEGLMNDX : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingEGLMNDX-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->getProcAddress) {
        CoreValidLogMessage(instance_info, "VUID-XrGraphicsBindingEGLMNDX-getProcAddress-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrGraphicsBindingEGLMNDX contains invalid NULL for PFN_xrEglGetProcAddressMNDX \"getProcAddress\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrGraphicsBindingEGLMNDX-getProcAddress-parameter" type
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_EGL)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialGraphNodeSpaceCreateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialGraphNodeSpaceCreateInfoMSFT",
                             value->type, "VUID-XrSpatialGraphNodeSpaceCreateInfoMSFT-type-type", XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT, "XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeSpaceCreateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialGraphNodeSpaceCreateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialGraphNodeSpaceCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeSpaceCreateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialGraphNodeSpaceCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeSpaceCreateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialGraphNodeTypeMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialGraphNodeSpaceCreateInfoMSFT", "nodeType", objects_info, value->nodeType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialGraphNodeSpaceCreateInfoMSFT contains invalid XrSpatialGraphNodeTypeMSFT \"nodeType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->nodeType));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeSpaceCreateInfoMSFT-nodeType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialGraphStaticNodeBindingCreateInfoMSFT",
                             value->type, "VUID-XrSpatialGraphStaticNodeBindingCreateInfoMSFT-type-type", XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT, "XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphStaticNodeBindingCreateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialGraphStaticNodeBindingCreateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialGraphStaticNodeBindingCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphStaticNodeBindingCreateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialGraphStaticNodeBindingCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphStaticNodeBindingCreateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphStaticNodeBindingCreateInfoMSFT-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialGraphNodeBindingPropertiesGetInfoMSFT",
                             value->type, "VUID-XrSpatialGraphNodeBindingPropertiesGetInfoMSFT-type-type", XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT, "XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeBindingPropertiesGetInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialGraphNodeBindingPropertiesGetInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialGraphNodeBindingPropertiesGetInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeBindingPropertiesGetInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialGraphNodeBindingPropertiesGetInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeBindingPropertiesGetInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialGraphNodeBindingPropertiesMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialGraphNodeBindingPropertiesMSFT",
                             value->type, "VUID-XrSpatialGraphNodeBindingPropertiesMSFT-type-type", XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT, "XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeBindingPropertiesMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialGraphNodeBindingPropertiesMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialGraphNodeBindingPropertiesMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeBindingPropertiesMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialGraphNodeBindingPropertiesMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialGraphNodeBindingPropertiesMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemHandTrackingPropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemHandTrackingPropertiesEXT",
                             value->type, "VUID-XrSystemHandTrackingPropertiesEXT-type-type", XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT, "XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemHandTrackingPropertiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemHandTrackingPropertiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemHandTrackingPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemHandTrackingPropertiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemHandTrackingPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemHandTrackingPropertiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsHandTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackerCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandTrackerCreateInfoEXT",
                             value->type, "VUID-XrHandTrackerCreateInfoEXT-type-type", XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT, "XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_HAND_POSE_TYPE_INFO_MSFT);
        valid_ext_structs.insert(XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackerCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandTrackerCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandTrackerCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackerCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandTrackerCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackerCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrHandEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrHandTrackerCreateInfoEXT", "hand", objects_info, value->hand)) {
        std::ostringstream oss_enum;
        oss_enum << "XrHandTrackerCreateInfoEXT contains invalid XrHandEXT \"hand\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->hand));
        CoreValidLogMessage(instance_info, "VUID-XrHandTrackerCreateInfoEXT-hand-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrHandJointSetEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrHandTrackerCreateInfoEXT", "handJointSet", objects_info, value->handJointSet)) {
        std::ostringstream oss_enum;
        oss_enum << "XrHandTrackerCreateInfoEXT contains invalid XrHandJointSetEXT \"handJointSet\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->handJointSet));
        CoreValidLogMessage(instance_info, "VUID-XrHandTrackerCreateInfoEXT-handJointSet-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointsLocateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandJointsLocateInfoEXT",
                             value->type, "VUID-XrHandJointsLocateInfoEXT-type-type", XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT, "XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandJointsLocateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandJointsLocateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandJointsLocateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandJointsLocateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandJointsLocateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandJointsLocateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrHandJointsLocateInfoEXT-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointLocationEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult space_location_flags_result = ValidateXrSpaceLocationFlags(value->locationFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == space_location_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrHandJointLocationEXT invalid member XrSpaceLocationFlags \"locationFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->locationFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrHandJointLocationEXT-locationFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointVelocityEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "velocityFlags" because this struct is returned only.
    // Skip checking member "linearVelocity" because this struct is returned only.
    // Skip checking member "angularVelocity" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointLocationsEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_JOINT_LOCATIONS_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandJointLocationsEXT",
                             value->type, "VUID-XrHandJointLocationsEXT-type-type", XR_TYPE_HAND_JOINT_LOCATIONS_EXT, "XR_TYPE_HAND_JOINT_LOCATIONS_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_HAND_JOINT_VELOCITIES_EXT);
        valid_ext_structs.insert(XR_TYPE_HAND_TRACKING_AIM_STATE_FB);
        valid_ext_structs.insert(XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB);
        valid_ext_structs.insert(XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT);
        valid_ext_structs.insert(XR_TYPE_HAND_TRACKING_SCALE_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandJointLocationsEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandJointLocationsEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandJointLocationsEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandJointLocationsEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandJointLocationsEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandJointLocationsEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->jointCount && nullptr != value->jointLocations) {
        CoreValidLogMessage(instance_info, "VUID-XrHandJointLocationsEXT-jointCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandJointLocationsEXT member jointCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->jointLocations && 0 != value->jointCount) {
        CoreValidLogMessage(instance_info, "VUID-XrHandJointLocationsEXT-jointLocations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrHandJointLocationsEXT contains invalid NULL for XrHandJointLocationEXT \"jointLocations\" is which not "
                            "optional since \"jointCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->jointLocations) {
        for (uint32_t value_jointlocations_inc = 0; value_jointlocations_inc < value->jointCount; ++value_jointlocations_inc) {
            // Validate that the structure XrHandJointLocationEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->jointLocations[value_jointlocations_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrHandJointLocationsEXT-jointLocations-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrHandJointLocationsEXT member jointLocations is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointVelocitiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_JOINT_VELOCITIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandJointVelocitiesEXT",
                             value->type, "VUID-XrHandJointVelocitiesEXT-type-type", XR_TYPE_HAND_JOINT_VELOCITIES_EXT, "XR_TYPE_HAND_JOINT_VELOCITIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandJointVelocitiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandJointVelocitiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandJointVelocitiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandJointVelocitiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandJointVelocitiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandJointVelocitiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->jointCount && nullptr != value->jointVelocities) {
        CoreValidLogMessage(instance_info, "VUID-XrHandJointVelocitiesEXT-jointCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandJointVelocitiesEXT member jointCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->jointVelocities && 0 != value->jointCount) {
        CoreValidLogMessage(instance_info, "VUID-XrHandJointVelocitiesEXT-jointVelocities-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrHandJointVelocitiesEXT contains invalid NULL for XrHandJointVelocityEXT \"jointVelocities\" is which not "
                            "optional since \"jointCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->jointVelocities) {
        for (uint32_t value_jointvelocities_inc = 0; value_jointvelocities_inc < value->jointCount; ++value_jointvelocities_inc) {
            // Validate that the structure XrHandJointVelocityEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->jointVelocities[value_jointvelocities_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrHandJointVelocitiesEXT-jointVelocities-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrHandJointVelocitiesEXT member jointVelocities is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemHandTrackingMeshPropertiesMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemHandTrackingMeshPropertiesMSFT",
                             value->type, "VUID-XrSystemHandTrackingMeshPropertiesMSFT-type-type", XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT, "XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemHandTrackingMeshPropertiesMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemHandTrackingMeshPropertiesMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemHandTrackingMeshPropertiesMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemHandTrackingMeshPropertiesMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemHandTrackingMeshPropertiesMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemHandTrackingMeshPropertiesMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsHandTrackingMesh" because this struct is returned only.
    // Skip checking member "maxHandMeshIndexCount" because this struct is returned only.
    // Skip checking member "maxHandMeshVertexCount" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshSpaceCreateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandMeshSpaceCreateInfoMSFT",
                             value->type, "VUID-XrHandMeshSpaceCreateInfoMSFT-type-type", XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT, "XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandMeshSpaceCreateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandMeshSpaceCreateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandMeshSpaceCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandMeshSpaceCreateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandMeshSpaceCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandMeshSpaceCreateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrHandPoseTypeMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrHandMeshSpaceCreateInfoMSFT", "handPoseType", objects_info, value->handPoseType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrHandMeshSpaceCreateInfoMSFT contains invalid XrHandPoseTypeMSFT \"handPoseType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->handPoseType));
        CoreValidLogMessage(instance_info, "VUID-XrHandMeshSpaceCreateInfoMSFT-handPoseType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshUpdateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandMeshUpdateInfoMSFT",
                             value->type, "VUID-XrHandMeshUpdateInfoMSFT-type-type", XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT, "XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandMeshUpdateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandMeshUpdateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandMeshUpdateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandMeshUpdateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandMeshUpdateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandMeshUpdateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrHandPoseTypeMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrHandMeshUpdateInfoMSFT", "handPoseType", objects_info, value->handPoseType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrHandMeshUpdateInfoMSFT contains invalid XrHandPoseTypeMSFT \"handPoseType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->handPoseType));
        CoreValidLogMessage(instance_info, "VUID-XrHandMeshUpdateInfoMSFT-handPoseType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshIndexBufferMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->indexCapacityInput is non-zero
    if (0 != value->indexCapacityInput && nullptr == value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrHandMeshIndexBufferMSFT-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandMeshIndexBufferMSFT member indexCapacityInput is NULL, but value->indexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHandMeshIndexBufferMSFT-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshVertexMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshVertexBufferMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrHandMeshVertexBufferMSFT-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandMeshVertexBufferMSFT member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHandMeshVertexBufferMSFT-vertices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandMeshMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_MESH_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandMeshMSFT",
                             value->type, "VUID-XrHandMeshMSFT-type-type", XR_TYPE_HAND_MESH_MSFT, "XR_TYPE_HAND_MESH_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandMeshMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandMeshMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandMeshMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandMeshMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandMeshMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandMeshMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Validate that the structure XrHandMeshIndexBufferMSFT is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->indexBuffer);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrHandMeshMSFT-indexBuffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandMeshMSFT member indexBuffer is invalid");
        return xr_result;
    }
    // Validate that the structure XrHandMeshVertexBufferMSFT is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->vertexBuffer);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrHandMeshMSFT-vertexBuffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandMeshMSFT member vertexBuffer is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandPoseTypeInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_POSE_TYPE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandPoseTypeInfoMSFT",
                             value->type, "VUID-XrHandPoseTypeInfoMSFT-type-type", XR_TYPE_HAND_POSE_TYPE_INFO_MSFT, "XR_TYPE_HAND_POSE_TYPE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandPoseTypeInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandPoseTypeInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandPoseTypeInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandPoseTypeInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandPoseTypeInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandPoseTypeInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrHandPoseTypeMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrHandPoseTypeInfoMSFT", "handPoseType", objects_info, value->handPoseType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrHandPoseTypeInfoMSFT contains invalid XrHandPoseTypeMSFT \"handPoseType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->handPoseType));
        CoreValidLogMessage(instance_info, "VUID-XrHandPoseTypeInfoMSFT-handPoseType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationSessionBeginInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSecondaryViewConfigurationSessionBeginInfoMSFT",
                             value->type, "VUID-XrSecondaryViewConfigurationSessionBeginInfoMSFT-type-type", XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT, "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSessionBeginInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSecondaryViewConfigurationSessionBeginInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationSessionBeginInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSessionBeginInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationSessionBeginInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSessionBeginInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->viewConfigurationCount && nullptr != value->enabledViewConfigurationTypes) {
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSessionBeginInfoMSFT-viewConfigurationCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSecondaryViewConfigurationSessionBeginInfoMSFT member viewConfigurationCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledViewConfigurationTypes && 0 != value->viewConfigurationCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSessionBeginInfoMSFT-enabledViewConfigurationTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSecondaryViewConfigurationSessionBeginInfoMSFT contains invalid NULL for XrViewConfigurationType \"enabledViewConfigurationTypes\" is which not "
                            "optional since \"viewConfigurationCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->enabledViewConfigurationTypes) {
        for (uint32_t value_enabledviewconfigurationtypes_inc = 0; value_enabledviewconfigurationtypes_inc < value->viewConfigurationCount; ++value_enabledviewconfigurationtypes_inc) {
            // Make sure the enum type XrViewConfigurationType value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSecondaryViewConfigurationSessionBeginInfoMSFT", "enabledViewConfigurationTypes", objects_info, value->enabledViewConfigurationTypes[value_enabledviewconfigurationtypes_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSecondaryViewConfigurationSessionBeginInfoMSFT contains invalid XrViewConfigurationType \"enabledViewConfigurationTypes\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->enabledViewConfigurationTypes[value_enabledviewconfigurationtypes_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSessionBeginInfoMSFT-enabledViewConfigurationTypes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationStateMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSecondaryViewConfigurationStateMSFT",
                             value->type, "VUID-XrSecondaryViewConfigurationStateMSFT-type-type", XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT, "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationStateMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSecondaryViewConfigurationStateMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationStateMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationStateMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationStateMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationStateMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrViewConfigurationType value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSecondaryViewConfigurationStateMSFT", "viewConfigurationType", objects_info, value->viewConfigurationType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSecondaryViewConfigurationStateMSFT contains invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->viewConfigurationType));
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationStateMSFT-viewConfigurationType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationFrameStateMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSecondaryViewConfigurationFrameStateMSFT",
                             value->type, "VUID-XrSecondaryViewConfigurationFrameStateMSFT-type-type", XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT, "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameStateMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSecondaryViewConfigurationFrameStateMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationFrameStateMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameStateMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationFrameStateMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameStateMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->viewConfigurationCount && nullptr != value->viewConfigurationStates) {
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameStateMSFT-viewConfigurationCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSecondaryViewConfigurationFrameStateMSFT member viewConfigurationCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->viewConfigurationStates && 0 != value->viewConfigurationCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameStateMSFT-viewConfigurationStates-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSecondaryViewConfigurationFrameStateMSFT contains invalid NULL for XrSecondaryViewConfigurationStateMSFT \"viewConfigurationStates\" is which not "
                            "optional since \"viewConfigurationCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->viewConfigurationStates) {
        for (uint32_t value_viewconfigurationstates_inc = 0; value_viewconfigurationstates_inc < value->viewConfigurationCount; ++value_viewconfigurationstates_inc) {
            // Validate that the structure XrSecondaryViewConfigurationStateMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->viewConfigurationStates[value_viewconfigurationstates_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameStateMSFT-viewConfigurationStates-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSecondaryViewConfigurationFrameStateMSFT member viewConfigurationStates is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationLayerInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSecondaryViewConfigurationLayerInfoMSFT",
                             value->type, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-type-type", XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT, "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSecondaryViewConfigurationLayerInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationLayerInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationLayerInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrViewConfigurationType value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSecondaryViewConfigurationLayerInfoMSFT", "viewConfigurationType", objects_info, value->viewConfigurationType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSecondaryViewConfigurationLayerInfoMSFT contains invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->viewConfigurationType));
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-viewConfigurationType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrEnvironmentBlendMode value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSecondaryViewConfigurationLayerInfoMSFT", "environmentBlendMode", objects_info, value->environmentBlendMode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSecondaryViewConfigurationLayerInfoMSFT contains invalid XrEnvironmentBlendMode \"environmentBlendMode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->environmentBlendMode));
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-environmentBlendMode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->layerCount && nullptr != value->layers) {
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layerCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layerCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->layers && 0 != value->layerCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSecondaryViewConfigurationLayerInfoMSFT contains invalid NULL for XrCompositionLayerBaseHeader \"layers\" is which not "
                            "optional since \"layerCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->layers) {
        for (uint32_t value_layers_inc = 0; value_layers_inc < value->layerCount; ++value_layers_inc) {
            if (value->layers[value_layers_inc] == nullptr) {
                std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                error_message += "[";
                error_message += std::to_string(value_layers_inc);
                error_message += "]";
                error_message += " is null";
                CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerProjection and it is valid
            {
                const XrCompositionLayerProjection* const* new_compositionlayerprojection_value = reinterpret_cast<const XrCompositionLayerProjection* const*>(value->layers);
                if (new_compositionlayerprojection_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_PROJECTION) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_compositionlayerprojection_value[value_layers_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                        error_message += "[";
                        error_message += std::to_string(value_layers_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerQuad and it is valid
            {
                const XrCompositionLayerQuad* const* new_compositionlayerquad_value = reinterpret_cast<const XrCompositionLayerQuad* const*>(value->layers);
                if (new_compositionlayerquad_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_QUAD) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_compositionlayerquad_value[value_layers_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                        error_message += "[";
                        error_message += std::to_string(value_layers_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerCubeKHR and it is valid
            {
                const XrCompositionLayerCubeKHR* const* new_compositionlayercubekhr_value = reinterpret_cast<const XrCompositionLayerCubeKHR* const*>(value->layers);
                if (new_compositionlayercubekhr_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_compositionlayercubekhr_value[value_layers_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                        error_message += "[";
                        error_message += std::to_string(value_layers_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerCylinderKHR and it is valid
            {
                const XrCompositionLayerCylinderKHR* const* new_compositionlayercylinderkhr_value = reinterpret_cast<const XrCompositionLayerCylinderKHR* const*>(value->layers);
                if (new_compositionlayercylinderkhr_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_compositionlayercylinderkhr_value[value_layers_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                        error_message += "[";
                        error_message += std::to_string(value_layers_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerEquirectKHR and it is valid
            {
                const XrCompositionLayerEquirectKHR* const* new_compositionlayerequirectkhr_value = reinterpret_cast<const XrCompositionLayerEquirectKHR* const*>(value->layers);
                if (new_compositionlayerequirectkhr_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_compositionlayerequirectkhr_value[value_layers_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                        error_message += "[";
                        error_message += std::to_string(value_layers_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerEquirect2KHR and it is valid
            {
                const XrCompositionLayerEquirect2KHR* const* new_compositionlayerequirect2khr_value = reinterpret_cast<const XrCompositionLayerEquirect2KHR* const*>(value->layers);
                if (new_compositionlayerequirect2khr_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_compositionlayerequirect2khr_value[value_layers_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                        error_message += "[";
                        error_message += std::to_string(value_layers_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerPassthroughFB and it is valid
            {
                const XrCompositionLayerPassthroughFB* const* new_compositionlayerpassthroughfb_value = reinterpret_cast<const XrCompositionLayerPassthroughFB* const*>(value->layers);
                if (new_compositionlayerpassthroughfb_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_compositionlayerpassthroughfb_value[value_layers_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                        error_message += "[";
                        error_message += std::to_string(value_layers_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerPassthroughHTC and it is valid
            {
                const XrCompositionLayerPassthroughHTC* const* new_compositionlayerpassthroughhtc_value = reinterpret_cast<const XrCompositionLayerPassthroughHTC* const*>(value->layers);
                if (new_compositionlayerpassthroughhtc_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_compositionlayerpassthroughhtc_value[value_layers_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                        error_message += "[";
                        error_message += std::to_string(value_layers_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerPassthroughANDROID and it is valid
            {
                const XrCompositionLayerPassthroughANDROID* const* new_compositionlayerpassthroughandroid_value = reinterpret_cast<const XrCompositionLayerPassthroughANDROID* const*>(value->layers);
                if (new_compositionlayerpassthroughandroid_value[value_layers_inc]->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_compositionlayerpassthroughandroid_value[value_layers_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers";
                        error_message += "[";
                        error_message += std::to_string(value_layers_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate that the base-structure XrCompositionLayerBaseHeader is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, value->layers[value_layers_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationLayerInfoMSFT-layers-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSecondaryViewConfigurationLayerInfoMSFT member layers is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationFrameEndInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSecondaryViewConfigurationFrameEndInfoMSFT",
                             value->type, "VUID-XrSecondaryViewConfigurationFrameEndInfoMSFT-type-type", XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT, "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameEndInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSecondaryViewConfigurationFrameEndInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationFrameEndInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameEndInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationFrameEndInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameEndInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->viewConfigurationCount && nullptr != value->viewConfigurationLayersInfo) {
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameEndInfoMSFT-viewConfigurationCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSecondaryViewConfigurationFrameEndInfoMSFT member viewConfigurationCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->viewConfigurationLayersInfo && 0 != value->viewConfigurationCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameEndInfoMSFT-viewConfigurationLayersInfo-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSecondaryViewConfigurationFrameEndInfoMSFT contains invalid NULL for XrSecondaryViewConfigurationLayerInfoMSFT \"viewConfigurationLayersInfo\" is which not "
                            "optional since \"viewConfigurationCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->viewConfigurationLayersInfo) {
        for (uint32_t value_viewconfigurationlayersinfo_inc = 0; value_viewconfigurationlayersinfo_inc < value->viewConfigurationCount; ++value_viewconfigurationlayersinfo_inc) {
            // Validate that the structure XrSecondaryViewConfigurationLayerInfoMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->viewConfigurationLayersInfo[value_viewconfigurationlayersinfo_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationFrameEndInfoMSFT-viewConfigurationLayersInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSecondaryViewConfigurationFrameEndInfoMSFT member viewConfigurationLayersInfo is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSecondaryViewConfigurationSwapchainCreateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSecondaryViewConfigurationSwapchainCreateInfoMSFT",
                             value->type, "VUID-XrSecondaryViewConfigurationSwapchainCreateInfoMSFT-type-type", XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT, "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSwapchainCreateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSecondaryViewConfigurationSwapchainCreateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationSwapchainCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSwapchainCreateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSecondaryViewConfigurationSwapchainCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSwapchainCreateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrViewConfigurationType value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSecondaryViewConfigurationSwapchainCreateInfoMSFT", "viewConfigurationType", objects_info, value->viewConfigurationType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSecondaryViewConfigurationSwapchainCreateInfoMSFT contains invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->viewConfigurationType));
        CoreValidLogMessage(instance_info, "VUID-XrSecondaryViewConfigurationSwapchainCreateInfoMSFT-viewConfigurationType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelKeyStateMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrControllerModelKeyStateMSFT",
                             value->type, "VUID-XrControllerModelKeyStateMSFT-type-type", XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT, "XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelKeyStateMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrControllerModelKeyStateMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrControllerModelKeyStateMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelKeyStateMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrControllerModelKeyStateMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelKeyStateMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelNodePropertiesMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrControllerModelNodePropertiesMSFT",
                             value->type, "VUID-XrControllerModelNodePropertiesMSFT-type-type", XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT, "XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelNodePropertiesMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrControllerModelNodePropertiesMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrControllerModelNodePropertiesMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelNodePropertiesMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrControllerModelNodePropertiesMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelNodePropertiesMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelPropertiesMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrControllerModelPropertiesMSFT",
                             value->type, "VUID-XrControllerModelPropertiesMSFT-type-type", XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT, "XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelPropertiesMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrControllerModelPropertiesMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrControllerModelPropertiesMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelPropertiesMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrControllerModelPropertiesMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelPropertiesMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->nodeCapacityInput is non-zero
    if (0 != value->nodeCapacityInput && nullptr == value->nodeProperties) {
        CoreValidLogMessage(instance_info, "VUID-XrControllerModelPropertiesMSFT-nodeProperties-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrControllerModelPropertiesMSFT member nodeCapacityInput is NULL, but value->nodeCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->nodeProperties) {
        for (uint32_t value_nodeproperties_inc = 0; value_nodeproperties_inc < value->nodeCapacityInput; ++value_nodeproperties_inc) {
            // Validate that the structure XrControllerModelNodePropertiesMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->nodeProperties[value_nodeproperties_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrControllerModelPropertiesMSFT-nodeProperties-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrControllerModelPropertiesMSFT member nodeProperties is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelNodeStateMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrControllerModelNodeStateMSFT",
                             value->type, "VUID-XrControllerModelNodeStateMSFT-type-type", XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT, "XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelNodeStateMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrControllerModelNodeStateMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrControllerModelNodeStateMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelNodeStateMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrControllerModelNodeStateMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelNodeStateMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrControllerModelStateMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CONTROLLER_MODEL_STATE_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrControllerModelStateMSFT",
                             value->type, "VUID-XrControllerModelStateMSFT-type-type", XR_TYPE_CONTROLLER_MODEL_STATE_MSFT, "XR_TYPE_CONTROLLER_MODEL_STATE_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelStateMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrControllerModelStateMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrControllerModelStateMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelStateMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrControllerModelStateMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrControllerModelStateMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->nodeCapacityInput is non-zero
    if (0 != value->nodeCapacityInput && nullptr == value->nodeStates) {
        CoreValidLogMessage(instance_info, "VUID-XrControllerModelStateMSFT-nodeStates-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrControllerModelStateMSFT member nodeCapacityInput is NULL, but value->nodeCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->nodeStates) {
        for (uint32_t value_nodestates_inc = 0; value_nodestates_inc < value->nodeCapacityInput; ++value_nodestates_inc) {
            // Validate that the structure XrControllerModelNodeStateMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->nodeStates[value_nodestates_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrControllerModelStateMSFT-nodeStates-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrControllerModelStateMSFT member nodeStates is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewConfigurationViewFovEPIC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrViewConfigurationViewFovEPIC",
                             value->type, "VUID-XrViewConfigurationViewFovEPIC-type-type", XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC, "XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationViewFovEPIC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrViewConfigurationViewFovEPIC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrViewConfigurationViewFovEPIC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationViewFovEPIC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrViewConfigurationViewFovEPIC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewConfigurationViewFovEPIC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_PLATFORM_WIN32)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHolographicWindowAttachmentMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHolographicWindowAttachmentMSFT",
                             value->type, "VUID-XrHolographicWindowAttachmentMSFT-type-type", XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT, "XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHolographicWindowAttachmentMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHolographicWindowAttachmentMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHolographicWindowAttachmentMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHolographicWindowAttachmentMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHolographicWindowAttachmentMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHolographicWindowAttachmentMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->holographicSpace) {
        CoreValidLogMessage(instance_info, "VUID-XrHolographicWindowAttachmentMSFT-holographicSpace-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrHolographicWindowAttachmentMSFT contains invalid NULL for IUnknown \"holographicSpace\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHolographicWindowAttachmentMSFT-holographicSpace-parameter" type
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->coreWindow) {
        CoreValidLogMessage(instance_info, "VUID-XrHolographicWindowAttachmentMSFT-coreWindow-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrHolographicWindowAttachmentMSFT contains invalid NULL for IUnknown \"coreWindow\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHolographicWindowAttachmentMSFT-coreWindow-parameter" type
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_PLATFORM_WIN32)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerReprojectionInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerReprojectionInfoMSFT",
                             value->type, "VUID-XrCompositionLayerReprojectionInfoMSFT-type-type", XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT, "XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerReprojectionInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerReprojectionInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerReprojectionInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerReprojectionInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerReprojectionInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerReprojectionInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrReprojectionModeMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerReprojectionInfoMSFT", "reprojectionMode", objects_info, value->reprojectionMode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerReprojectionInfoMSFT contains invalid XrReprojectionModeMSFT \"reprojectionMode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->reprojectionMode));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerReprojectionInfoMSFT-reprojectionMode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerReprojectionPlaneOverrideMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerReprojectionPlaneOverrideMSFT",
                             value->type, "VUID-XrCompositionLayerReprojectionPlaneOverrideMSFT-type-type", XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT, "XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerReprojectionPlaneOverrideMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerReprojectionPlaneOverrideMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerReprojectionPlaneOverrideMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerReprojectionPlaneOverrideMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerReprojectionPlaneOverrideMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerReprojectionPlaneOverrideMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAndroidSurfaceSwapchainCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrAndroidSurfaceSwapchainCreateInfoFB",
                             value->type, "VUID-XrAndroidSurfaceSwapchainCreateInfoFB-type-type", XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB, "XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrAndroidSurfaceSwapchainCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrAndroidSurfaceSwapchainCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrAndroidSurfaceSwapchainCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAndroidSurfaceSwapchainCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrAndroidSurfaceSwapchainCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAndroidSurfaceSwapchainCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult android_surface_swapchain_flags_fb_result = ValidateXrAndroidSurfaceSwapchainFlagsFB(value->createFlags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == android_surface_swapchain_flags_fb_result) {
        CoreValidLogMessage(instance_info, "VUID-XrAndroidSurfaceSwapchainCreateInfoFB-createFlags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrAndroidSurfaceSwapchainFlagsFB \"createFlags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != android_surface_swapchain_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrAndroidSurfaceSwapchainCreateInfoFB invalid member XrAndroidSurfaceSwapchainFlagsFB \"createFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrAndroidSurfaceSwapchainCreateInfoFB-createFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateBaseHeaderFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrSwapchainStateBaseHeaderFB-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSwapchainStateBaseHeaderFB-next-next" because it is a base structure
    if (value->type == XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) {
        const XrSwapchainStateFoveationFB* new_value = reinterpret_cast<const XrSwapchainStateFoveationFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_foveation")) {
            std::string error_str = "XrSwapchainStateBaseHeaderFB being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB\"";
            error_str += " which requires extension \"XR_FB_foveation\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateBaseHeaderFB-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
    if (value->type == XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) {
        const XrSwapchainStateAndroidSurfaceDimensionsFB* new_value = reinterpret_cast<const XrSwapchainStateAndroidSurfaceDimensionsFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_swapchain_update_state_android_surface")) {
            std::string error_str = "XrSwapchainStateBaseHeaderFB being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB\"";
            error_str += " which requires extension \"XR_FB_swapchain_update_state_android_surface\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateBaseHeaderFB-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
    if (value->type == XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) {
        const XrSwapchainStateSamplerOpenGLESFB* new_value = reinterpret_cast<const XrSwapchainStateSamplerOpenGLESFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_swapchain_update_state_opengl_es")) {
            std::string error_str = "XrSwapchainStateBaseHeaderFB being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB\"";
            error_str += " which requires extension \"XR_FB_swapchain_update_state_opengl_es\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateBaseHeaderFB-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
    if (value->type == XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) {
        const XrSwapchainStateSamplerVulkanFB* new_value = reinterpret_cast<const XrSwapchainStateSamplerVulkanFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_swapchain_update_state_vulkan")) {
            std::string error_str = "XrSwapchainStateBaseHeaderFB being used with child struct type ";
            error_str += "\"XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB\"";
            error_str += " which requires extension \"XR_FB_swapchain_update_state_vulkan\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateBaseHeaderFB-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
    InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainStateBaseHeaderFB",
                         value->type, "VUID-XrSwapchainStateBaseHeaderFB-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerSecureContentFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerSecureContentFB",
                             value->type, "VUID-XrCompositionLayerSecureContentFB-type-type", XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB, "XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSecureContentFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerSecureContentFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerSecureContentFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSecureContentFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerSecureContentFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSecureContentFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_secure_content_flags_fb_result = ValidateXrCompositionLayerSecureContentFlagsFB(value->flags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == composition_layer_secure_content_flags_fb_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSecureContentFB-flags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrCompositionLayerSecureContentFlagsFB \"flags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != composition_layer_secure_content_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerSecureContentFB invalid member XrCompositionLayerSecureContentFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSecureContentFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult space_location_flags_result = ValidateXrSpaceLocationFlags(value->locationFlags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == space_location_flags_result) {
        CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationFB-locationFlags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrSpaceLocationFlags \"locationFlags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != space_location_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrBodyJointLocationFB invalid member XrSpaceLocationFlags \"locationFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->locationFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationFB-locationFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemBodyTrackingPropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemBodyTrackingPropertiesFB",
                             value->type, "VUID-XrSystemBodyTrackingPropertiesFB-type-type", XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB, "XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemBodyTrackingPropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemBodyTrackingPropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemBodyTrackingPropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemBodyTrackingPropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemBodyTrackingPropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemBodyTrackingPropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsBodyTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackerCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_TRACKER_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyTrackerCreateInfoFB",
                             value->type, "VUID-XrBodyTrackerCreateInfoFB-type-type", XR_TYPE_BODY_TRACKER_CREATE_INFO_FB, "XR_TYPE_BODY_TRACKER_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyTrackerCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackerCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackerCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrBodyJointSetFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrBodyTrackerCreateInfoFB", "bodyJointSet", objects_info, value->bodyJointSet)) {
        std::ostringstream oss_enum;
        oss_enum << "XrBodyTrackerCreateInfoFB contains invalid XrBodyJointSetFB \"bodyJointSet\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->bodyJointSet));
        CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoFB-bodyJointSet-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodySkeletonJointFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodySkeletonFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_SKELETON_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodySkeletonFB",
                             value->type, "VUID-XrBodySkeletonFB-type-type", XR_TYPE_BODY_SKELETON_FB, "XR_TYPE_BODY_SKELETON_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodySkeletonFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodySkeletonFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodySkeletonFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->jointCount && nullptr != value->joints) {
        CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonFB-jointCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrBodySkeletonFB member jointCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->joints && 0 != value->jointCount) {
        CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonFB-joints-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrBodySkeletonFB contains invalid NULL for XrBodySkeletonJointFB \"joints\" is which not "
                            "optional since \"jointCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrBodySkeletonFB-joints-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointsLocateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyJointsLocateInfoFB",
                             value->type, "VUID-XrBodyJointsLocateInfoFB-type-type", XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB, "XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyJointsLocateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyJointsLocateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyJointsLocateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoFB-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationsFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_JOINT_LOCATIONS_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyJointLocationsFB",
                             value->type, "VUID-XrBodyJointLocationsFB-type-type", XR_TYPE_BODY_JOINT_LOCATIONS_FB, "XR_TYPE_BODY_JOINT_LOCATIONS_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_BODY_TRACKING_CALIBRATION_STATUS_META);
        valid_ext_structs.insert(XR_TYPE_BODY_TRACKING_FIDELITY_STATUS_META);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyJointLocationsFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyJointLocationsFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyJointLocationsFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "isActive" because this struct is returned only.
    // Skip checking member "confidence" because this struct is returned only.
    // Skip checking member "jointCount" because this struct is returned only.
    // Skip checking member "jointLocations" because this struct is returned only.
    // Skip checking member "skeletonChangedCount" because this struct is returned only.
    // Skip checking member "time" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionProfileDpadBindingEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInteractionProfileDpadBindingEXT",
                             value->type, "VUID-XrInteractionProfileDpadBindingEXT-type-type", XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT, "XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInteractionProfileDpadBindingEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInteractionProfileDpadBindingEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInteractionProfileDpadBindingEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrActionSetHandle(&value->actionSet);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrActionSet handle \"actionSet\" ";
            oss << HandleToHexString(value->actionSet);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-actionSet-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticVibration and it is valid
    {
        if (value->onHaptic != nullptr) {
            const XrHapticVibration* new_hapticvibration_value = reinterpret_cast<const XrHapticVibration*>(value->onHaptic);
            if (new_hapticvibration_value->type == XR_TYPE_HAPTIC_VIBRATION) {
                if (nullptr != new_hapticvibration_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticvibration_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileDpadBindingEXT member onHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-onHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticAmplitudeEnvelopeVibrationFB and it is valid
    {
        if (value->onHaptic != nullptr) {
            const XrHapticAmplitudeEnvelopeVibrationFB* new_hapticamplitudeenvelopevibrationfb_value = reinterpret_cast<const XrHapticAmplitudeEnvelopeVibrationFB*>(value->onHaptic);
            if (new_hapticamplitudeenvelopevibrationfb_value->type == XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) {
                if (nullptr != new_hapticamplitudeenvelopevibrationfb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticamplitudeenvelopevibrationfb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileDpadBindingEXT member onHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-onHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticPcmVibrationFB and it is valid
    {
        if (value->onHaptic != nullptr) {
            const XrHapticPcmVibrationFB* new_hapticpcmvibrationfb_value = reinterpret_cast<const XrHapticPcmVibrationFB*>(value->onHaptic);
            if (new_hapticpcmvibrationfb_value->type == XR_TYPE_HAPTIC_PCM_VIBRATION_FB) {
                if (nullptr != new_hapticpcmvibrationfb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticpcmvibrationfb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileDpadBindingEXT member onHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-onHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticParametricVibrationEXT and it is valid
    {
        if (value->onHaptic != nullptr) {
            const XrHapticParametricVibrationEXT* new_hapticparametricvibrationext_value = reinterpret_cast<const XrHapticParametricVibrationEXT*>(value->onHaptic);
            if (new_hapticparametricvibrationext_value->type == XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT) {
                if (nullptr != new_hapticparametricvibrationext_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticparametricvibrationext_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileDpadBindingEXT member onHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-onHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate that the base-structure XrHapticBaseHeader is valid
    if (nullptr != value->onHaptic) {
        xr_result = ValidateXrStruct(instance_info, command_name,
                                                        objects_info, check_members, true, value->onHaptic);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-onHaptic-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrInteractionProfileDpadBindingEXT member onHaptic is invalid");
            return xr_result;
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticVibration and it is valid
    {
        if (value->offHaptic != nullptr) {
            const XrHapticVibration* new_hapticvibration_value = reinterpret_cast<const XrHapticVibration*>(value->offHaptic);
            if (new_hapticvibration_value->type == XR_TYPE_HAPTIC_VIBRATION) {
                if (nullptr != new_hapticvibration_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticvibration_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileDpadBindingEXT member offHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-offHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticAmplitudeEnvelopeVibrationFB and it is valid
    {
        if (value->offHaptic != nullptr) {
            const XrHapticAmplitudeEnvelopeVibrationFB* new_hapticamplitudeenvelopevibrationfb_value = reinterpret_cast<const XrHapticAmplitudeEnvelopeVibrationFB*>(value->offHaptic);
            if (new_hapticamplitudeenvelopevibrationfb_value->type == XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) {
                if (nullptr != new_hapticamplitudeenvelopevibrationfb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticamplitudeenvelopevibrationfb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileDpadBindingEXT member offHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-offHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticPcmVibrationFB and it is valid
    {
        if (value->offHaptic != nullptr) {
            const XrHapticPcmVibrationFB* new_hapticpcmvibrationfb_value = reinterpret_cast<const XrHapticPcmVibrationFB*>(value->offHaptic);
            if (new_hapticpcmvibrationfb_value->type == XR_TYPE_HAPTIC_PCM_VIBRATION_FB) {
                if (nullptr != new_hapticpcmvibrationfb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticpcmvibrationfb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileDpadBindingEXT member offHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-offHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticParametricVibrationEXT and it is valid
    {
        if (value->offHaptic != nullptr) {
            const XrHapticParametricVibrationEXT* new_hapticparametricvibrationext_value = reinterpret_cast<const XrHapticParametricVibrationEXT*>(value->offHaptic);
            if (new_hapticparametricvibrationext_value->type == XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT) {
                if (nullptr != new_hapticparametricvibrationext_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticparametricvibrationext_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileDpadBindingEXT member offHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-offHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate that the base-structure XrHapticBaseHeader is valid
    if (nullptr != value->offHaptic) {
        xr_result = ValidateXrStruct(instance_info, command_name,
                                                        objects_info, check_members, true, value->offHaptic);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileDpadBindingEXT-offHaptic-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrInteractionProfileDpadBindingEXT member offHaptic is invalid");
            return xr_result;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionProfileAnalogThresholdVALVE* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInteractionProfileAnalogThresholdVALVE",
                             value->type, "VUID-XrInteractionProfileAnalogThresholdVALVE-type-type", XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE, "XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInteractionProfileAnalogThresholdVALVE struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInteractionProfileAnalogThresholdVALVE : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInteractionProfileAnalogThresholdVALVE : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrActionHandle(&value->action);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAction handle \"action\" ";
            oss << HandleToHexString(value->action);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-action-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticVibration and it is valid
    {
        if (value->onHaptic != nullptr) {
            const XrHapticVibration* new_hapticvibration_value = reinterpret_cast<const XrHapticVibration*>(value->onHaptic);
            if (new_hapticvibration_value->type == XR_TYPE_HAPTIC_VIBRATION) {
                if (nullptr != new_hapticvibration_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticvibration_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileAnalogThresholdVALVE member onHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-onHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticAmplitudeEnvelopeVibrationFB and it is valid
    {
        if (value->onHaptic != nullptr) {
            const XrHapticAmplitudeEnvelopeVibrationFB* new_hapticamplitudeenvelopevibrationfb_value = reinterpret_cast<const XrHapticAmplitudeEnvelopeVibrationFB*>(value->onHaptic);
            if (new_hapticamplitudeenvelopevibrationfb_value->type == XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) {
                if (nullptr != new_hapticamplitudeenvelopevibrationfb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticamplitudeenvelopevibrationfb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileAnalogThresholdVALVE member onHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-onHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticPcmVibrationFB and it is valid
    {
        if (value->onHaptic != nullptr) {
            const XrHapticPcmVibrationFB* new_hapticpcmvibrationfb_value = reinterpret_cast<const XrHapticPcmVibrationFB*>(value->onHaptic);
            if (new_hapticpcmvibrationfb_value->type == XR_TYPE_HAPTIC_PCM_VIBRATION_FB) {
                if (nullptr != new_hapticpcmvibrationfb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticpcmvibrationfb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileAnalogThresholdVALVE member onHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-onHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticParametricVibrationEXT and it is valid
    {
        if (value->onHaptic != nullptr) {
            const XrHapticParametricVibrationEXT* new_hapticparametricvibrationext_value = reinterpret_cast<const XrHapticParametricVibrationEXT*>(value->onHaptic);
            if (new_hapticparametricvibrationext_value->type == XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT) {
                if (nullptr != new_hapticparametricvibrationext_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticparametricvibrationext_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileAnalogThresholdVALVE member onHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-onHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate that the base-structure XrHapticBaseHeader is valid
    if (nullptr != value->onHaptic) {
        xr_result = ValidateXrStruct(instance_info, command_name,
                                                        objects_info, check_members, true, value->onHaptic);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-onHaptic-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrInteractionProfileAnalogThresholdVALVE member onHaptic is invalid");
            return xr_result;
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticVibration and it is valid
    {
        if (value->offHaptic != nullptr) {
            const XrHapticVibration* new_hapticvibration_value = reinterpret_cast<const XrHapticVibration*>(value->offHaptic);
            if (new_hapticvibration_value->type == XR_TYPE_HAPTIC_VIBRATION) {
                if (nullptr != new_hapticvibration_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticvibration_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileAnalogThresholdVALVE member offHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-offHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticAmplitudeEnvelopeVibrationFB and it is valid
    {
        if (value->offHaptic != nullptr) {
            const XrHapticAmplitudeEnvelopeVibrationFB* new_hapticamplitudeenvelopevibrationfb_value = reinterpret_cast<const XrHapticAmplitudeEnvelopeVibrationFB*>(value->offHaptic);
            if (new_hapticamplitudeenvelopevibrationfb_value->type == XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) {
                if (nullptr != new_hapticamplitudeenvelopevibrationfb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticamplitudeenvelopevibrationfb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileAnalogThresholdVALVE member offHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-offHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticPcmVibrationFB and it is valid
    {
        if (value->offHaptic != nullptr) {
            const XrHapticPcmVibrationFB* new_hapticpcmvibrationfb_value = reinterpret_cast<const XrHapticPcmVibrationFB*>(value->offHaptic);
            if (new_hapticpcmvibrationfb_value->type == XR_TYPE_HAPTIC_PCM_VIBRATION_FB) {
                if (nullptr != new_hapticpcmvibrationfb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticpcmvibrationfb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileAnalogThresholdVALVE member offHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-offHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrHapticBaseHeader is a child structure of type XrHapticParametricVibrationEXT and it is valid
    {
        if (value->offHaptic != nullptr) {
            const XrHapticParametricVibrationEXT* new_hapticparametricvibrationext_value = reinterpret_cast<const XrHapticParametricVibrationEXT*>(value->offHaptic);
            if (new_hapticparametricvibrationext_value->type == XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT) {
                if (nullptr != new_hapticparametricvibrationext_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_hapticparametricvibrationext_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrInteractionProfileAnalogThresholdVALVE member offHaptic";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-offHaptic-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate that the base-structure XrHapticBaseHeader is valid
    if (nullptr != value->offHaptic) {
        xr_result = ValidateXrStruct(instance_info, command_name,
                                                        objects_info, check_members, true, value->offHaptic);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionProfileAnalogThresholdVALVE-offHaptic-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrInteractionProfileAnalogThresholdVALVE member offHaptic is invalid");
            return xr_result;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandJointsMotionRangeInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandJointsMotionRangeInfoEXT",
                             value->type, "VUID-XrHandJointsMotionRangeInfoEXT-type-type", XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT, "XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandJointsMotionRangeInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandJointsMotionRangeInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandJointsMotionRangeInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandJointsMotionRangeInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandJointsMotionRangeInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandJointsMotionRangeInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrHandJointsMotionRangeEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrHandJointsMotionRangeInfoEXT", "handJointsMotionRange", objects_info, value->handJointsMotionRange)) {
        std::ostringstream oss_enum;
        oss_enum << "XrHandJointsMotionRangeInfoEXT contains invalid XrHandJointsMotionRangeEXT \"handJointsMotionRange\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->handJointsMotionRange));
        CoreValidLogMessage(instance_info, "VUID-XrHandJointsMotionRangeInfoEXT-handJointsMotionRange-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrUuidMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneObserverCreateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneObserverCreateInfoMSFT",
                             value->type, "VUID-XrSceneObserverCreateInfoMSFT-type-type", XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT, "XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneObserverCreateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneObserverCreateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneObserverCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneObserverCreateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneObserverCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneObserverCreateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneCreateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_CREATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneCreateInfoMSFT",
                             value->type, "VUID-XrSceneCreateInfoMSFT-type-type", XR_TYPE_SCENE_CREATE_INFO_MSFT, "XR_TYPE_SCENE_CREATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneCreateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneCreateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneCreateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneCreateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneSphereBoundMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneOrientedBoxBoundMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneFrustumBoundMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneBoundsMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrSceneBoundsMSFT-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Optional array must be non-NULL when value->sphereCount is non-zero
    if (0 != value->sphereCount && nullptr == value->spheres) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneBoundsMSFT-spheres-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneBoundsMSFT member sphereCount is NULL, but value->sphereCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneBoundsMSFT-spheres-parameter" type
    // Optional array must be non-NULL when value->boxCount is non-zero
    if (0 != value->boxCount && nullptr == value->boxes) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneBoundsMSFT-boxes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneBoundsMSFT member boxCount is NULL, but value->boxCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneBoundsMSFT-boxes-parameter" type
    // Optional array must be non-NULL when value->frustumCount is non-zero
    if (0 != value->frustumCount && nullptr == value->frustums) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneBoundsMSFT-frustums-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneBoundsMSFT member frustumCount is NULL, but value->frustumCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneBoundsMSFT-frustums-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrNewSceneComputeInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrNewSceneComputeInfoMSFT",
                             value->type, "VUID-XrNewSceneComputeInfoMSFT-type-type", XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT, "XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrNewSceneComputeInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrNewSceneComputeInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrNewSceneComputeInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrNewSceneComputeInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrNewSceneComputeInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrNewSceneComputeInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->requestedFeatureCount && nullptr != value->requestedFeatures) {
        CoreValidLogMessage(instance_info, "VUID-XrNewSceneComputeInfoMSFT-requestedFeatureCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrNewSceneComputeInfoMSFT member requestedFeatureCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->requestedFeatures && 0 != value->requestedFeatureCount) {
        CoreValidLogMessage(instance_info, "VUID-XrNewSceneComputeInfoMSFT-requestedFeatures-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrNewSceneComputeInfoMSFT contains invalid NULL for XrSceneComputeFeatureMSFT \"requestedFeatures\" is which not "
                            "optional since \"requestedFeatureCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->requestedFeatures) {
        for (uint32_t value_requestedfeatures_inc = 0; value_requestedfeatures_inc < value->requestedFeatureCount; ++value_requestedfeatures_inc) {
            // Make sure the enum type XrSceneComputeFeatureMSFT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrNewSceneComputeInfoMSFT", "requestedFeatures", objects_info, value->requestedFeatures[value_requestedfeatures_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrNewSceneComputeInfoMSFT contains invalid XrSceneComputeFeatureMSFT \"requestedFeatures\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->requestedFeatures[value_requestedfeatures_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrNewSceneComputeInfoMSFT-requestedFeatures-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Make sure the enum type XrSceneComputeConsistencyMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrNewSceneComputeInfoMSFT", "consistency", objects_info, value->consistency)) {
        std::ostringstream oss_enum;
        oss_enum << "XrNewSceneComputeInfoMSFT contains invalid XrSceneComputeConsistencyMSFT \"consistency\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->consistency));
        CoreValidLogMessage(instance_info, "VUID-XrNewSceneComputeInfoMSFT-consistency-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Validate that the structure XrSceneBoundsMSFT is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->bounds);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrNewSceneComputeInfoMSFT-bounds-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrNewSceneComputeInfoMSFT member bounds is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVisualMeshComputeLodInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVisualMeshComputeLodInfoMSFT",
                             value->type, "VUID-XrVisualMeshComputeLodInfoMSFT-type-type", XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT, "XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVisualMeshComputeLodInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVisualMeshComputeLodInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVisualMeshComputeLodInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVisualMeshComputeLodInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVisualMeshComputeLodInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVisualMeshComputeLodInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrMeshComputeLodMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrVisualMeshComputeLodInfoMSFT", "lod", objects_info, value->lod)) {
        std::ostringstream oss_enum;
        oss_enum << "XrVisualMeshComputeLodInfoMSFT contains invalid XrMeshComputeLodMSFT \"lod\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->lod));
        CoreValidLogMessage(instance_info, "VUID-XrVisualMeshComputeLodInfoMSFT-lod-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSceneComponentTypeMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSceneComponentMSFT", "componentType", objects_info, value->componentType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSceneComponentMSFT contains invalid XrSceneComponentTypeMSFT \"componentType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentType));
        CoreValidLogMessage(instance_info, "VUID-XrSceneComponentMSFT-componentType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentsMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_COMPONENTS_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneComponentsMSFT",
                             value->type, "VUID-XrSceneComponentsMSFT-type-type", XR_TYPE_SCENE_COMPONENTS_MSFT, "XR_TYPE_SCENE_COMPONENTS_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SCENE_MARKER_QR_CODES_MSFT);
        valid_ext_structs.insert(XR_TYPE_SCENE_MARKERS_MSFT);
        valid_ext_structs.insert(XR_TYPE_SCENE_MESHES_MSFT);
        valid_ext_structs.insert(XR_TYPE_SCENE_OBJECTS_MSFT);
        valid_ext_structs.insert(XR_TYPE_SCENE_PLANES_MSFT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneComponentsMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentsMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentsMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->componentCapacityInput is non-zero
    if (0 != value->componentCapacityInput && nullptr == value->components) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsMSFT-components-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneComponentsMSFT member componentCapacityInput is NULL, but value->componentCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->components) {
        for (uint32_t value_components_inc = 0; value_components_inc < value->componentCapacityInput; ++value_components_inc) {
            // Validate that the structure XrSceneComponentMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->components[value_components_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsMSFT-components-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSceneComponentsMSFT member components is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentsGetInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneComponentsGetInfoMSFT",
                             value->type, "VUID-XrSceneComponentsGetInfoMSFT-type-type", XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT, "XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT);
        valid_ext_structs.insert(XR_TYPE_SCENE_MARKER_TYPE_FILTER_MSFT);
        valid_ext_structs.insert(XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT);
        valid_ext_structs.insert(XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsGetInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneComponentsGetInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentsGetInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsGetInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentsGetInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsGetInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSceneComponentTypeMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSceneComponentsGetInfoMSFT", "componentType", objects_info, value->componentType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSceneComponentsGetInfoMSFT contains invalid XrSceneComponentTypeMSFT \"componentType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentType));
        CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsGetInfoMSFT-componentType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentLocationMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult space_location_flags_result = ValidateXrSpaceLocationFlags(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == space_location_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSceneComponentLocationMSFT invalid member XrSpaceLocationFlags \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSceneComponentLocationMSFT-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentLocationsMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneComponentLocationsMSFT",
                             value->type, "VUID-XrSceneComponentLocationsMSFT-type-type", XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT, "XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentLocationsMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneComponentLocationsMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentLocationsMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentLocationsMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentLocationsMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentLocationsMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->locationCount is non-zero
    if (0 != value->locationCount && nullptr == value->locations) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneComponentLocationsMSFT-locations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneComponentLocationsMSFT member locationCount is NULL, but value->locationCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->locations) {
        for (uint32_t value_locations_inc = 0; value_locations_inc < value->locationCount; ++value_locations_inc) {
            // Validate that the structure XrSceneComponentLocationMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->locations[value_locations_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSceneComponentLocationsMSFT-locations-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSceneComponentLocationsMSFT member locations is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentsLocateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneComponentsLocateInfoMSFT",
                             value->type, "VUID-XrSceneComponentsLocateInfoMSFT-type-type", XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT, "XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsLocateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneComponentsLocateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentsLocateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsLocateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentsLocateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsLocateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsLocateInfoMSFT-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Optional array must be non-NULL when value->componentIdCount is non-zero
    if (0 != value->componentIdCount && nullptr == value->componentIds) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneComponentsLocateInfoMSFT-componentIds-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneComponentsLocateInfoMSFT member componentIdCount is NULL, but value->componentIdCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneComponentsLocateInfoMSFT-componentIds-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneObjectMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSceneObjectTypeMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSceneObjectMSFT", "objectType", objects_info, value->objectType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSceneObjectMSFT contains invalid XrSceneObjectTypeMSFT \"objectType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->objectType));
        CoreValidLogMessage(instance_info, "VUID-XrSceneObjectMSFT-objectType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneObjectsMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_OBJECTS_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneObjectsMSFT",
                             value->type, "VUID-XrSceneObjectsMSFT-type-type", XR_TYPE_SCENE_OBJECTS_MSFT, "XR_TYPE_SCENE_OBJECTS_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneObjectsMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneObjectsMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneObjectsMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneObjectsMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneObjectsMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneObjectsMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->sceneObjectCount is non-zero
    if (0 != value->sceneObjectCount && nullptr == value->sceneObjects) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneObjectsMSFT-sceneObjects-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneObjectsMSFT member sceneObjectCount is NULL, but value->sceneObjectCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->sceneObjects) {
        for (uint32_t value_sceneobjects_inc = 0; value_sceneobjects_inc < value->sceneObjectCount; ++value_sceneobjects_inc) {
            // Validate that the structure XrSceneObjectMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->sceneObjects[value_sceneobjects_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSceneObjectsMSFT-sceneObjects-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSceneObjectsMSFT member sceneObjects is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneComponentParentFilterInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneComponentParentFilterInfoMSFT",
                             value->type, "VUID-XrSceneComponentParentFilterInfoMSFT-type-type", XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT, "XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentParentFilterInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneComponentParentFilterInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentParentFilterInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentParentFilterInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneComponentParentFilterInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneComponentParentFilterInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneObjectTypesFilterInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneObjectTypesFilterInfoMSFT",
                             value->type, "VUID-XrSceneObjectTypesFilterInfoMSFT-type-type", XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT, "XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneObjectTypesFilterInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneObjectTypesFilterInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneObjectTypesFilterInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneObjectTypesFilterInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneObjectTypesFilterInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneObjectTypesFilterInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->objectTypeCount is non-zero
    if (0 != value->objectTypeCount && nullptr == value->objectTypes) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneObjectTypesFilterInfoMSFT-objectTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneObjectTypesFilterInfoMSFT member objectTypeCount is NULL, but value->objectTypeCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->objectTypes) {
        for (uint32_t value_objecttypes_inc = 0; value_objecttypes_inc < value->objectTypeCount; ++value_objecttypes_inc) {
            // Make sure the enum type XrSceneObjectTypeMSFT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSceneObjectTypesFilterInfoMSFT", "objectTypes", objects_info, value->objectTypes[value_objecttypes_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSceneObjectTypesFilterInfoMSFT contains invalid XrSceneObjectTypeMSFT \"objectTypes\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->objectTypes[value_objecttypes_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSceneObjectTypesFilterInfoMSFT-objectTypes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrScenePlaneMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrScenePlaneAlignmentTypeMSFT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrScenePlaneMSFT", "alignment", objects_info, value->alignment)) {
        std::ostringstream oss_enum;
        oss_enum << "XrScenePlaneMSFT contains invalid XrScenePlaneAlignmentTypeMSFT \"alignment\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->alignment));
        CoreValidLogMessage(instance_info, "VUID-XrScenePlaneMSFT-alignment-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrScenePlanesMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_PLANES_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrScenePlanesMSFT",
                             value->type, "VUID-XrScenePlanesMSFT-type-type", XR_TYPE_SCENE_PLANES_MSFT, "XR_TYPE_SCENE_PLANES_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrScenePlanesMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrScenePlanesMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrScenePlanesMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrScenePlanesMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrScenePlanesMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrScenePlanesMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->scenePlaneCount is non-zero
    if (0 != value->scenePlaneCount && nullptr == value->scenePlanes) {
        CoreValidLogMessage(instance_info, "VUID-XrScenePlanesMSFT-scenePlanes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrScenePlanesMSFT member scenePlaneCount is NULL, but value->scenePlaneCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->scenePlanes) {
        for (uint32_t value_sceneplanes_inc = 0; value_sceneplanes_inc < value->scenePlaneCount; ++value_sceneplanes_inc) {
            // Validate that the structure XrScenePlaneMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->scenePlanes[value_sceneplanes_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrScenePlanesMSFT-scenePlanes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrScenePlanesMSFT member scenePlanes is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrScenePlaneAlignmentFilterInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrScenePlaneAlignmentFilterInfoMSFT",
                             value->type, "VUID-XrScenePlaneAlignmentFilterInfoMSFT-type-type", XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT, "XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrScenePlaneAlignmentFilterInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrScenePlaneAlignmentFilterInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrScenePlaneAlignmentFilterInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrScenePlaneAlignmentFilterInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrScenePlaneAlignmentFilterInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrScenePlaneAlignmentFilterInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->alignmentCount is non-zero
    if (0 != value->alignmentCount && nullptr == value->alignments) {
        CoreValidLogMessage(instance_info, "VUID-XrScenePlaneAlignmentFilterInfoMSFT-alignments-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrScenePlaneAlignmentFilterInfoMSFT member alignmentCount is NULL, but value->alignmentCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->alignments) {
        for (uint32_t value_alignments_inc = 0; value_alignments_inc < value->alignmentCount; ++value_alignments_inc) {
            // Make sure the enum type XrScenePlaneAlignmentTypeMSFT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrScenePlaneAlignmentFilterInfoMSFT", "alignments", objects_info, value->alignments[value_alignments_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrScenePlaneAlignmentFilterInfoMSFT contains invalid XrScenePlaneAlignmentTypeMSFT \"alignments\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->alignments[value_alignments_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrScenePlaneAlignmentFilterInfoMSFT-alignments-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshesMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MESHES_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMeshesMSFT",
                             value->type, "VUID-XrSceneMeshesMSFT-type-type", XR_TYPE_SCENE_MESHES_MSFT, "XR_TYPE_SCENE_MESHES_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshesMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMeshesMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshesMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshesMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshesMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshesMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->sceneMeshCount is non-zero
    if (0 != value->sceneMeshCount && nullptr == value->sceneMeshes) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneMeshesMSFT-sceneMeshes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneMeshesMSFT member sceneMeshCount is NULL, but value->sceneMeshCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->sceneMeshes) {
        for (uint32_t value_scenemeshes_inc = 0; value_scenemeshes_inc < value->sceneMeshCount; ++value_scenemeshes_inc) {
            // Validate that the structure XrSceneMeshMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->sceneMeshes[value_scenemeshes_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSceneMeshesMSFT-sceneMeshes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSceneMeshesMSFT member sceneMeshes is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshBuffersGetInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMeshBuffersGetInfoMSFT",
                             value->type, "VUID-XrSceneMeshBuffersGetInfoMSFT-type-type", XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT, "XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshBuffersGetInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMeshBuffersGetInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshBuffersGetInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshBuffersGetInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshBuffersGetInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshBuffersGetInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshBuffersMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MESH_BUFFERS_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMeshBuffersMSFT",
                             value->type, "VUID-XrSceneMeshBuffersMSFT-type-type", XR_TYPE_SCENE_MESH_BUFFERS_MSFT, "XR_TYPE_SCENE_MESH_BUFFERS_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT);
        valid_ext_structs.insert(XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT);
        valid_ext_structs.insert(XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshBuffersMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMeshBuffersMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshBuffersMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshBuffersMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshBuffersMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshBuffersMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshVertexBufferMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMeshVertexBufferMSFT",
                             value->type, "VUID-XrSceneMeshVertexBufferMSFT-type-type", XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT, "XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshVertexBufferMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMeshVertexBufferMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshVertexBufferMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshVertexBufferMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshVertexBufferMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshVertexBufferMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneMeshVertexBufferMSFT-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneMeshVertexBufferMSFT member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneMeshVertexBufferMSFT-vertices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshIndicesUint32MSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMeshIndicesUint32MSFT",
                             value->type, "VUID-XrSceneMeshIndicesUint32MSFT-type-type", XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT, "XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshIndicesUint32MSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMeshIndicesUint32MSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshIndicesUint32MSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshIndicesUint32MSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshIndicesUint32MSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshIndicesUint32MSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->indexCapacityInput is non-zero
    if (0 != value->indexCapacityInput && nullptr == value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneMeshIndicesUint32MSFT-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneMeshIndicesUint32MSFT member indexCapacityInput is NULL, but value->indexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneMeshIndicesUint32MSFT-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshIndicesUint16MSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMeshIndicesUint16MSFT",
                             value->type, "VUID-XrSceneMeshIndicesUint16MSFT-type-type", XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT, "XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshIndicesUint16MSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMeshIndicesUint16MSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshIndicesUint16MSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshIndicesUint16MSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshIndicesUint16MSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshIndicesUint16MSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->indexCapacityInput is non-zero
    if (0 != value->indexCapacityInput && nullptr == value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneMeshIndicesUint16MSFT-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneMeshIndicesUint16MSFT member indexCapacityInput is NULL, but value->indexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneMeshIndicesUint16MSFT-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSerializedSceneFragmentDataGetInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSerializedSceneFragmentDataGetInfoMSFT",
                             value->type, "VUID-XrSerializedSceneFragmentDataGetInfoMSFT-type-type", XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT, "XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSerializedSceneFragmentDataGetInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSerializedSceneFragmentDataGetInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSerializedSceneFragmentDataGetInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSerializedSceneFragmentDataGetInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSerializedSceneFragmentDataGetInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSerializedSceneFragmentDataGetInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDeserializeSceneFragmentMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->bufferSize is non-zero
    if (0 != value->bufferSize && nullptr == value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrDeserializeSceneFragmentMSFT-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrDeserializeSceneFragmentMSFT member bufferSize is NULL, but value->bufferSize is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrDeserializeSceneFragmentMSFT-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneDeserializeInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneDeserializeInfoMSFT",
                             value->type, "VUID-XrSceneDeserializeInfoMSFT-type-type", XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT, "XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneDeserializeInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneDeserializeInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneDeserializeInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneDeserializeInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneDeserializeInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneDeserializeInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->fragmentCount is non-zero
    if (0 != value->fragmentCount && nullptr == value->fragments) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneDeserializeInfoMSFT-fragments-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneDeserializeInfoMSFT member fragmentCount is NULL, but value->fragmentCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->fragments) {
        for (uint32_t value_fragments_inc = 0; value_fragments_inc < value->fragmentCount; ++value_fragments_inc) {
            // Validate that the structure XrDeserializeSceneFragmentMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->fragments[value_fragments_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSceneDeserializeInfoMSFT-fragments-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSceneDeserializeInfoMSFT member fragments is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataDisplayRefreshRateChangedFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataDisplayRefreshRateChangedFB",
                             value->type, "VUID-XrEventDataDisplayRefreshRateChangedFB-type-type", XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB, "XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataDisplayRefreshRateChangedFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataDisplayRefreshRateChangedFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataDisplayRefreshRateChangedFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataDisplayRefreshRateChangedFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataDisplayRefreshRateChangedFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataDisplayRefreshRateChangedFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "fromDisplayRefreshRate" because this struct is returned only.
    // Skip checking member "toDisplayRefreshRate" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViveTrackerPathsHTCX* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIVE_TRACKER_PATHS_HTCX) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrViveTrackerPathsHTCX",
                             value->type, "VUID-XrViveTrackerPathsHTCX-type-type", XR_TYPE_VIVE_TRACKER_PATHS_HTCX, "XR_TYPE_VIVE_TRACKER_PATHS_HTCX");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrViveTrackerPathsHTCX-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrViveTrackerPathsHTCX struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrViveTrackerPathsHTCX : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViveTrackerPathsHTCX-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrViveTrackerPathsHTCX : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViveTrackerPathsHTCX-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "persistentPath" because this struct is returned only.
    // Skip checking member "rolePath" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataViveTrackerConnectedHTCX* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataViveTrackerConnectedHTCX",
                             value->type, "VUID-XrEventDataViveTrackerConnectedHTCX-type-type", XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX, "XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataViveTrackerConnectedHTCX-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataViveTrackerConnectedHTCX struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataViveTrackerConnectedHTCX : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataViveTrackerConnectedHTCX-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataViveTrackerConnectedHTCX : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataViveTrackerConnectedHTCX-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "paths" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFacialTrackingPropertiesHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemFacialTrackingPropertiesHTC",
                             value->type, "VUID-XrSystemFacialTrackingPropertiesHTC-type-type", XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC, "XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemFacialTrackingPropertiesHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemFacialTrackingPropertiesHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemFacialTrackingPropertiesHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFacialTrackingPropertiesHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemFacialTrackingPropertiesHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFacialTrackingPropertiesHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportEyeFacialTracking" because this struct is returned only.
    // Skip checking member "supportLipFacialTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialExpressionsHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACIAL_EXPRESSIONS_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFacialExpressionsHTC",
                             value->type, "VUID-XrFacialExpressionsHTC-type-type", XR_TYPE_FACIAL_EXPRESSIONS_HTC, "XR_TYPE_FACIAL_EXPRESSIONS_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionsHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFacialExpressionsHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFacialExpressionsHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionsHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFacialExpressionsHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionsHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->expressionWeightings) {
        CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionsHTC-expressionWeightings-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrFacialExpressionsHTC contains invalid NULL for float \"expressionWeightings\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrFacialExpressionsHTC-expressionWeightings-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialTrackerCreateInfoHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFacialTrackerCreateInfoHTC",
                             value->type, "VUID-XrFacialTrackerCreateInfoHTC-type-type", XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC, "XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFacialTrackerCreateInfoHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFacialTrackerCreateInfoHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFacialTrackerCreateInfoHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialTrackerCreateInfoHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFacialTrackerCreateInfoHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialTrackerCreateInfoHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrFacialTrackingTypeHTC value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFacialTrackerCreateInfoHTC", "facialTrackingType", objects_info, value->facialTrackingType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFacialTrackerCreateInfoHTC contains invalid XrFacialTrackingTypeHTC \"facialTrackingType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->facialTrackingType));
        CoreValidLogMessage(instance_info, "VUID-XrFacialTrackerCreateInfoHTC-facialTrackingType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemColorSpacePropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemColorSpacePropertiesFB",
                             value->type, "VUID-XrSystemColorSpacePropertiesFB-type-type", XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB, "XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemColorSpacePropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemColorSpacePropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemColorSpacePropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemColorSpacePropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemColorSpacePropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemColorSpacePropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "colorSpace" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVector4sFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingMeshFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_TRACKING_MESH_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandTrackingMeshFB",
                             value->type, "VUID-XrHandTrackingMeshFB-type-type", XR_TYPE_HAND_TRACKING_MESH_FB, "XR_TYPE_HAND_TRACKING_MESH_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingMeshFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandTrackingMeshFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingMeshFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingMeshFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingMeshFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingMeshFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->jointCapacityInput is non-zero
    if (0 != value->jointCapacityInput && nullptr == value->jointParents) {
        CoreValidLogMessage(instance_info, "VUID-XrHandTrackingMeshFB-jointParents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandTrackingMeshFB member jointCapacityInput is NULL, but value->jointCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHandTrackingMeshFB-jointBindPoses-parameter" type
    // NOTE: Can't validate "VUID-XrHandTrackingMeshFB-jointRadii-parameter" type
            // NOTE: Can't validate "VUID-XrHandTrackingMeshFB-jointParents-parameter" output enum buffer
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertexBlendWeights) {
        CoreValidLogMessage(instance_info, "VUID-XrHandTrackingMeshFB-vertexBlendWeights-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandTrackingMeshFB member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHandTrackingMeshFB-vertexPositions-parameter" type
    // NOTE: Can't validate "VUID-XrHandTrackingMeshFB-vertexNormals-parameter" type
    // NOTE: Can't validate "VUID-XrHandTrackingMeshFB-vertexUVs-parameter" type
    // NOTE: Can't validate "VUID-XrHandTrackingMeshFB-vertexBlendIndices-parameter" type
    // NOTE: Can't validate "VUID-XrHandTrackingMeshFB-vertexBlendWeights-parameter" type
    // Optional array must be non-NULL when value->indexCapacityInput is non-zero
    if (0 != value->indexCapacityInput && nullptr == value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrHandTrackingMeshFB-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandTrackingMeshFB member indexCapacityInput is NULL, but value->indexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHandTrackingMeshFB-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingScaleFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_TRACKING_SCALE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandTrackingScaleFB",
                             value->type, "VUID-XrHandTrackingScaleFB-type-type", XR_TYPE_HAND_TRACKING_SCALE_FB, "XR_TYPE_HAND_TRACKING_SCALE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingScaleFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandTrackingScaleFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingScaleFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingScaleFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingScaleFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingScaleFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "sensorOutput" because this struct is returned only.
    // Skip checking member "currentOutput" because this struct is returned only.
    // Skip checking member "overrideHandScale" because this struct is returned only.
    // Skip checking member "overrideValueInput" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingAimStateFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_TRACKING_AIM_STATE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandTrackingAimStateFB",
                             value->type, "VUID-XrHandTrackingAimStateFB-type-type", XR_TYPE_HAND_TRACKING_AIM_STATE_FB, "XR_TYPE_HAND_TRACKING_AIM_STATE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingAimStateFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandTrackingAimStateFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingAimStateFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingAimStateFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingAimStateFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingAimStateFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "status" because this struct is returned only.
    // Skip checking member "aimPose" because this struct is returned only.
    // Skip checking member "pinchStrengthIndex" because this struct is returned only.
    // Skip checking member "pinchStrengthMiddle" because this struct is returned only.
    // Skip checking member "pinchStrengthRing" because this struct is returned only.
    // Skip checking member "pinchStrengthLittle" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandCapsuleFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "points" because this struct is returned only.
    // Skip checking member "radius" because this struct is returned only.
    // Skip checking member "joint" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingCapsulesStateFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandTrackingCapsulesStateFB",
                             value->type, "VUID-XrHandTrackingCapsulesStateFB-type-type", XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB, "XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingCapsulesStateFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandTrackingCapsulesStateFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingCapsulesStateFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingCapsulesStateFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingCapsulesStateFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingCapsulesStateFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "capsules" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialEntityPropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpatialEntityPropertiesFB",
                             value->type, "VUID-XrSystemSpatialEntityPropertiesFB-type-type", XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB, "XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialEntityPropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpatialEntityPropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialEntityPropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialEntityPropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialEntityPropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialEntityPropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpatialEntity" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorCreateInfoFB",
                             value->type, "VUID-XrSpatialAnchorCreateInfoFB-type-type", XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB, "XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoFB-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceComponentStatusSetInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceComponentStatusSetInfoFB",
                             value->type, "VUID-XrSpaceComponentStatusSetInfoFB-type-type", XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB, "XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentStatusSetInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceComponentStatusSetInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceComponentStatusSetInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentStatusSetInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceComponentStatusSetInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentStatusSetInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpaceComponentTypeFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpaceComponentStatusSetInfoFB", "componentType", objects_info, value->componentType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceComponentStatusSetInfoFB contains invalid XrSpaceComponentTypeFB \"componentType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentType));
        CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentStatusSetInfoFB-componentType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceComponentStatusFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_COMPONENT_STATUS_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceComponentStatusFB",
                             value->type, "VUID-XrSpaceComponentStatusFB-type-type", XR_TYPE_SPACE_COMPONENT_STATUS_FB, "XR_TYPE_SPACE_COMPONENT_STATUS_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentStatusFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceComponentStatusFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceComponentStatusFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentStatusFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceComponentStatusFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentStatusFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "enabled" because this struct is returned only.
    // Skip checking member "changePending" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpatialAnchorCreateCompleteFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpatialAnchorCreateCompleteFB",
                             value->type, "VUID-XrEventDataSpatialAnchorCreateCompleteFB-type-type", XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB, "XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpatialAnchorCreateCompleteFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpatialAnchorCreateCompleteFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpatialAnchorCreateCompleteFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpatialAnchorCreateCompleteFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpatialAnchorCreateCompleteFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpatialAnchorCreateCompleteFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Skip checking member "space" because this struct is returned only.
    // Skip checking member "uuid" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceSetStatusCompleteFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpaceSetStatusCompleteFB",
                             value->type, "VUID-XrEventDataSpaceSetStatusCompleteFB-type-type", XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB, "XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceSetStatusCompleteFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpaceSetStatusCompleteFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceSetStatusCompleteFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceSetStatusCompleteFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceSetStatusCompleteFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceSetStatusCompleteFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Skip checking member "space" because this struct is returned only.
    // Skip checking member "uuid" because this struct is returned only.
    // Skip checking member "componentType" because this struct is returned only.
    // Skip checking member "enabled" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationProfileCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFoveationProfileCreateInfoFB",
                             value->type, "VUID-XrFoveationProfileCreateInfoFB-type-type", XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB, "XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFoveationProfileCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFoveationProfileCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFoveationProfileCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationProfileCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFoveationProfileCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationProfileCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainCreateInfoFoveationFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainCreateInfoFoveationFB",
                             value->type, "VUID-XrSwapchainCreateInfoFoveationFB-type-type", XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB, "XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainCreateInfoFoveationFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainCreateInfoFoveationFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainCreateInfoFoveationFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainCreateInfoFoveationFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainCreateInfoFoveationFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainCreateInfoFoveationFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult swapchain_create_foveation_flags_fb_result = ValidateXrSwapchainCreateFoveationFlagsFB(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == swapchain_create_foveation_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSwapchainCreateInfoFoveationFB invalid member XrSwapchainCreateFoveationFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSwapchainCreateInfoFoveationFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateFoveationFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainStateFoveationFB",
                             value->type, "VUID-XrSwapchainStateFoveationFB-type-type", XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB, "XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateFoveationFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainStateFoveationFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainStateFoveationFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateFoveationFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainStateFoveationFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateFoveationFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult swapchain_state_foveation_flags_fb_result = ValidateXrSwapchainStateFoveationFlagsFB(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == swapchain_state_foveation_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSwapchainStateFoveationFB invalid member XrSwapchainStateFoveationFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateFoveationFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrFoveationProfileFBHandle(&value->profile);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrFoveationProfileFB handle \"profile\" ";
            oss << HandleToHexString(value->profile);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateFoveationFB-profile-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationLevelProfileCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFoveationLevelProfileCreateInfoFB",
                             value->type, "VUID-XrFoveationLevelProfileCreateInfoFB-type-type", XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB, "XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFoveationLevelProfileCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFoveationLevelProfileCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFoveationLevelProfileCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationLevelProfileCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFoveationLevelProfileCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationLevelProfileCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrFoveationLevelFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFoveationLevelProfileCreateInfoFB", "level", objects_info, value->level)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFoveationLevelProfileCreateInfoFB contains invalid XrFoveationLevelFB \"level\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->level));
        CoreValidLogMessage(instance_info, "VUID-XrFoveationLevelProfileCreateInfoFB-level-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrFoveationDynamicFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFoveationLevelProfileCreateInfoFB", "dynamic", objects_info, value->dynamic)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFoveationLevelProfileCreateInfoFB contains invalid XrFoveationDynamicFB \"dynamic\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->dynamic));
        CoreValidLogMessage(instance_info, "VUID-XrFoveationLevelProfileCreateInfoFB-dynamic-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemKeyboardTrackingPropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemKeyboardTrackingPropertiesFB",
                             value->type, "VUID-XrSystemKeyboardTrackingPropertiesFB-type-type", XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB, "XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemKeyboardTrackingPropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemKeyboardTrackingPropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemKeyboardTrackingPropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemKeyboardTrackingPropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemKeyboardTrackingPropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemKeyboardTrackingPropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsKeyboardTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrKeyboardTrackingDescriptionFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "trackedKeyboardId" because this struct is returned only.
    // Skip checking member "size" because this struct is returned only.
    // Skip checking member "flags" because this struct is returned only.
    // Skip checking member "name" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrKeyboardSpaceCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrKeyboardSpaceCreateInfoFB",
                             value->type, "VUID-XrKeyboardSpaceCreateInfoFB-type-type", XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB, "XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrKeyboardSpaceCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrKeyboardSpaceCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrKeyboardSpaceCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrKeyboardSpaceCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrKeyboardSpaceCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrKeyboardSpaceCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrKeyboardTrackingQueryFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_KEYBOARD_TRACKING_QUERY_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrKeyboardTrackingQueryFB",
                             value->type, "VUID-XrKeyboardTrackingQueryFB-type-type", XR_TYPE_KEYBOARD_TRACKING_QUERY_FB, "XR_TYPE_KEYBOARD_TRACKING_QUERY_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrKeyboardTrackingQueryFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrKeyboardTrackingQueryFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrKeyboardTrackingQueryFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrKeyboardTrackingQueryFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrKeyboardTrackingQueryFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrKeyboardTrackingQueryFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult keyboard_tracking_query_flags_fb_result = ValidateXrKeyboardTrackingQueryFlagsFB(value->flags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == keyboard_tracking_query_flags_fb_result) {
        CoreValidLogMessage(instance_info, "VUID-XrKeyboardTrackingQueryFB-flags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrKeyboardTrackingQueryFlagsFB \"flags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != keyboard_tracking_query_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrKeyboardTrackingQueryFB invalid member XrKeyboardTrackingQueryFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrKeyboardTrackingQueryFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTriangleMeshCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTriangleMeshCreateInfoFB",
                             value->type, "VUID-XrTriangleMeshCreateInfoFB-type-type", XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB, "XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTriangleMeshCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTriangleMeshCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTriangleMeshCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTriangleMeshCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTriangleMeshCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTriangleMeshCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult triangle_mesh_flags_fb_result = ValidateXrTriangleMeshFlagsFB(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == triangle_mesh_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrTriangleMeshCreateInfoFB invalid member XrTriangleMeshFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrTriangleMeshCreateInfoFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Make sure the enum type XrWindingOrderFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTriangleMeshCreateInfoFB", "windingOrder", objects_info, value->windingOrder)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTriangleMeshCreateInfoFB contains invalid XrWindingOrderFB \"windingOrder\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->windingOrder));
        CoreValidLogMessage(instance_info, "VUID-XrTriangleMeshCreateInfoFB-windingOrder-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughPropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemPassthroughPropertiesFB",
                             value->type, "VUID-XrSystemPassthroughPropertiesFB-type-type", XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB, "XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughPropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemPassthroughPropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughPropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughPropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughPropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughPropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsPassthrough" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughProperties2FB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemPassthroughProperties2FB",
                             value->type, "VUID-XrSystemPassthroughProperties2FB-type-type", XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB, "XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughProperties2FB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemPassthroughProperties2FB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughProperties2FB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughProperties2FB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughProperties2FB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughProperties2FB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "capabilities" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughCreateInfoFB",
                             value->type, "VUID-XrPassthroughCreateInfoFB-type-type", XR_TYPE_PASSTHROUGH_CREATE_INFO_FB, "XR_TYPE_PASSTHROUGH_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult passthrough_flags_fb_result = ValidateXrPassthroughFlagsFB(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == passthrough_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrPassthroughCreateInfoFB invalid member XrPassthroughFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughCreateInfoFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughLayerCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughLayerCreateInfoFB",
                             value->type, "VUID-XrPassthroughLayerCreateInfoFB-type-type", XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB, "XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughLayerCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughLayerCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughLayerCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrPassthroughFBHandle(&value->passthrough);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrPassthroughFB handle \"passthrough\" ";
            oss << HandleToHexString(value->passthrough);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerCreateInfoFB-passthrough-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    ValidateXrFlagsResult passthrough_flags_fb_result = ValidateXrPassthroughFlagsFB(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == passthrough_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrPassthroughLayerCreateInfoFB invalid member XrPassthroughFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerCreateInfoFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Make sure the enum type XrPassthroughLayerPurposeFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrPassthroughLayerCreateInfoFB", "purpose", objects_info, value->purpose)) {
        std::ostringstream oss_enum;
        oss_enum << "XrPassthroughLayerCreateInfoFB contains invalid XrPassthroughLayerPurposeFB \"purpose\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->purpose));
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerCreateInfoFB-purpose-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerPassthroughFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerPassthroughFB",
                             value->type, "VUID-XrCompositionLayerPassthroughFB-type-type", XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB, "XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerPassthroughFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerPassthroughFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerPassthroughFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_flags_result = ValidateXrCompositionLayerFlags(value->flags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == composition_layer_flags_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughFB-flags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrCompositionLayerFlags \"flags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != composition_layer_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerPassthroughFB invalid member XrCompositionLayerFlags \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result == VALIDATE_XR_HANDLE_INVALID) {
            // Not a valid handle
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughFB-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerFBHandle(&value->layerHandle);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrPassthroughLayerFB handle \"layerHandle\" ";
            oss << HandleToHexString(value->layerHandle);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughFB-layerHandle-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGeometryInstanceCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGeometryInstanceCreateInfoFB",
                             value->type, "VUID-XrGeometryInstanceCreateInfoFB-type-type", XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB, "XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGeometryInstanceCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGeometryInstanceCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGeometryInstanceCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerFBHandle(&value->layer);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrPassthroughLayerFB handle \"layer\" ";
            oss << HandleToHexString(value->layer);
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceCreateInfoFB-layer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrTriangleMeshFBHandle(&value->mesh);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrTriangleMeshFB handle \"mesh\" ";
            oss << HandleToHexString(value->mesh);
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceCreateInfoFB-mesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceCreateInfoFB-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGeometryInstanceTransformFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGeometryInstanceTransformFB",
                             value->type, "VUID-XrGeometryInstanceTransformFB-type-type", XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB, "XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceTransformFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGeometryInstanceTransformFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGeometryInstanceTransformFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceTransformFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGeometryInstanceTransformFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceTransformFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrGeometryInstanceTransformFB-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughStyleFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_STYLE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughStyleFB",
                             value->type, "VUID-XrPassthroughStyleFB-type-type", XR_TYPE_PASSTHROUGH_STYLE_FB, "XR_TYPE_PASSTHROUGH_STYLE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB);
        valid_ext_structs.insert(XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META);
        valid_ext_structs.insert(XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META);
        valid_ext_structs.insert(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB);
        valid_ext_structs.insert(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughStyleFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughStyleFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughStyleFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughStyleFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughStyleFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughStyleFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorMapMonoToRgbaFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughColorMapMonoToRgbaFB",
                             value->type, "VUID-XrPassthroughColorMapMonoToRgbaFB-type-type", XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB, "XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapMonoToRgbaFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughColorMapMonoToRgbaFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorMapMonoToRgbaFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapMonoToRgbaFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorMapMonoToRgbaFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapMonoToRgbaFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorMapMonoToMonoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughColorMapMonoToMonoFB",
                             value->type, "VUID-XrPassthroughColorMapMonoToMonoFB-type-type", XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB, "XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapMonoToMonoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughColorMapMonoToMonoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorMapMonoToMonoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapMonoToMonoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorMapMonoToMonoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapMonoToMonoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughBrightnessContrastSaturationFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughBrightnessContrastSaturationFB",
                             value->type, "VUID-XrPassthroughBrightnessContrastSaturationFB-type-type", XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB, "XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughBrightnessContrastSaturationFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughBrightnessContrastSaturationFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughBrightnessContrastSaturationFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughBrightnessContrastSaturationFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughBrightnessContrastSaturationFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughBrightnessContrastSaturationFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataPassthroughStateChangedFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataPassthroughStateChangedFB",
                             value->type, "VUID-XrEventDataPassthroughStateChangedFB-type-type", XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB, "XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataPassthroughStateChangedFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataPassthroughStateChangedFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataPassthroughStateChangedFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataPassthroughStateChangedFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataPassthroughStateChangedFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataPassthroughStateChangedFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "flags" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelPathInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_PATH_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelPathInfoFB",
                             value->type, "VUID-XrRenderModelPathInfoFB-type-type", XR_TYPE_RENDER_MODEL_PATH_INFO_FB, "XR_TYPE_RENDER_MODEL_PATH_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPathInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelPathInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelPathInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPathInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelPathInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPathInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelPropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelPropertiesFB",
                             value->type, "VUID-XrRenderModelPropertiesFB-type-type", XR_TYPE_RENDER_MODEL_PROPERTIES_FB, "XR_TYPE_RENDER_MODEL_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelPropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelPropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelPropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult render_model_flags_fb_result = ValidateXrRenderModelFlagsFB(value->flags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == render_model_flags_fb_result) {
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesFB-flags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrRenderModelFlagsFB \"flags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != render_model_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrRenderModelPropertiesFB invalid member XrRenderModelFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelBufferFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_BUFFER_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelBufferFB",
                             value->type, "VUID-XrRenderModelBufferFB-type-type", XR_TYPE_RENDER_MODEL_BUFFER_FB, "XR_TYPE_RENDER_MODEL_BUFFER_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelBufferFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelBufferFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelBufferFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelBufferFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelBufferFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelBufferFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->bufferCapacityInput is non-zero
    if (0 != value->bufferCapacityInput && nullptr == value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelBufferFB-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRenderModelBufferFB member bufferCapacityInput is NULL, but value->bufferCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrRenderModelBufferFB-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelLoadInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_LOAD_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelLoadInfoFB",
                             value->type, "VUID-XrRenderModelLoadInfoFB-type-type", XR_TYPE_RENDER_MODEL_LOAD_INFO_FB, "XR_TYPE_RENDER_MODEL_LOAD_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelLoadInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelLoadInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelLoadInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelLoadInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelLoadInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelLoadInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemRenderModelPropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemRenderModelPropertiesFB",
                             value->type, "VUID-XrSystemRenderModelPropertiesFB-type-type", XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB, "XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemRenderModelPropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemRenderModelPropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemRenderModelPropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemRenderModelPropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemRenderModelPropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemRenderModelPropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsRenderModelLoading" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelCapabilitiesRequestFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelCapabilitiesRequestFB",
                             value->type, "VUID-XrRenderModelCapabilitiesRequestFB-type-type", XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB, "XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelCapabilitiesRequestFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelCapabilitiesRequestFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelCapabilitiesRequestFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelCapabilitiesRequestFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelCapabilitiesRequestFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelCapabilitiesRequestFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult render_model_flags_fb_result = ValidateXrRenderModelFlagsFB(value->flags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == render_model_flags_fb_result) {
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelCapabilitiesRequestFB-flags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrRenderModelFlagsFB \"flags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != render_model_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrRenderModelCapabilitiesRequestFB invalid member XrRenderModelFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelCapabilitiesRequestFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrViewLocateFoveatedRenderingVARJO* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrViewLocateFoveatedRenderingVARJO",
                             value->type, "VUID-XrViewLocateFoveatedRenderingVARJO-type-type", XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO, "XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrViewLocateFoveatedRenderingVARJO-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrViewLocateFoveatedRenderingVARJO struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrViewLocateFoveatedRenderingVARJO : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewLocateFoveatedRenderingVARJO-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrViewLocateFoveatedRenderingVARJO : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrViewLocateFoveatedRenderingVARJO-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveatedViewConfigurationViewVARJO* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFoveatedViewConfigurationViewVARJO",
                             value->type, "VUID-XrFoveatedViewConfigurationViewVARJO-type-type", XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO, "XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFoveatedViewConfigurationViewVARJO-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFoveatedViewConfigurationViewVARJO struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFoveatedViewConfigurationViewVARJO : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveatedViewConfigurationViewVARJO-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFoveatedViewConfigurationViewVARJO : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveatedViewConfigurationViewVARJO-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFoveatedRenderingPropertiesVARJO* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemFoveatedRenderingPropertiesVARJO",
                             value->type, "VUID-XrSystemFoveatedRenderingPropertiesVARJO-type-type", XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO, "XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemFoveatedRenderingPropertiesVARJO-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemFoveatedRenderingPropertiesVARJO struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemFoveatedRenderingPropertiesVARJO : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFoveatedRenderingPropertiesVARJO-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemFoveatedRenderingPropertiesVARJO : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFoveatedRenderingPropertiesVARJO-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsFoveatedRendering" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerDepthTestVARJO* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerDepthTestVARJO",
                             value->type, "VUID-XrCompositionLayerDepthTestVARJO-type-type", XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO, "XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthTestVARJO-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerDepthTestVARJO struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerDepthTestVARJO : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthTestVARJO-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerDepthTestVARJO : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthTestVARJO-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemMarkerTrackingPropertiesVARJO* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemMarkerTrackingPropertiesVARJO",
                             value->type, "VUID-XrSystemMarkerTrackingPropertiesVARJO-type-type", XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO, "XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemMarkerTrackingPropertiesVARJO-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemMarkerTrackingPropertiesVARJO struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemMarkerTrackingPropertiesVARJO : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemMarkerTrackingPropertiesVARJO-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemMarkerTrackingPropertiesVARJO : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemMarkerTrackingPropertiesVARJO-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsMarkerTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataMarkerTrackingUpdateVARJO* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataMarkerTrackingUpdateVARJO",
                             value->type, "VUID-XrEventDataMarkerTrackingUpdateVARJO-type-type", XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO, "XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataMarkerTrackingUpdateVARJO-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataMarkerTrackingUpdateVARJO struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataMarkerTrackingUpdateVARJO : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataMarkerTrackingUpdateVARJO-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataMarkerTrackingUpdateVARJO : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataMarkerTrackingUpdateVARJO-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "markerId" because this struct is returned only.
    // Skip checking member "isActive" because this struct is returned only.
    // Skip checking member "isPredicted" because this struct is returned only.
    // Skip checking member "time" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerSpaceCreateInfoVARJO* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMarkerSpaceCreateInfoVARJO",
                             value->type, "VUID-XrMarkerSpaceCreateInfoVARJO-type-type", XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO, "XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMarkerSpaceCreateInfoVARJO-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMarkerSpaceCreateInfoVARJO struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMarkerSpaceCreateInfoVARJO : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerSpaceCreateInfoVARJO-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMarkerSpaceCreateInfoVARJO : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerSpaceCreateInfoVARJO-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameEndInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FRAME_END_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFrameEndInfoML",
                             value->type, "VUID-XrFrameEndInfoML-type-type", XR_TYPE_FRAME_END_INFO_ML, "XR_TYPE_FRAME_END_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFrameEndInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFrameEndInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFrameEndInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult frame_end_info_flags_ml_result = ValidateXrFrameEndInfoFlagsML(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == frame_end_info_flags_ml_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrFrameEndInfoML invalid member XrFrameEndInfoFlagsML \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrFrameEndInfoML-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrGlobalDimmerFrameEndInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrGlobalDimmerFrameEndInfoML",
                             value->type, "VUID-XrGlobalDimmerFrameEndInfoML-type-type", XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML, "XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrGlobalDimmerFrameEndInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrGlobalDimmerFrameEndInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrGlobalDimmerFrameEndInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGlobalDimmerFrameEndInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrGlobalDimmerFrameEndInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrGlobalDimmerFrameEndInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult global_dimmer_frame_end_info_flags_ml_result = ValidateXrGlobalDimmerFrameEndInfoFlagsML(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == global_dimmer_frame_end_info_flags_ml_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrGlobalDimmerFrameEndInfoML invalid member XrGlobalDimmerFrameEndInfoFlagsML \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrGlobalDimmerFrameEndInfoML-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_PLATFORM_ML)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCoordinateSpaceCreateInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCoordinateSpaceCreateInfoML",
                             value->type, "VUID-XrCoordinateSpaceCreateInfoML-type-type", XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML, "XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCoordinateSpaceCreateInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCoordinateSpaceCreateInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCoordinateSpaceCreateInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCoordinateSpaceCreateInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCoordinateSpaceCreateInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCoordinateSpaceCreateInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_ML)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemMarkerUnderstandingPropertiesML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_MARKER_UNDERSTANDING_PROPERTIES_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemMarkerUnderstandingPropertiesML",
                             value->type, "VUID-XrSystemMarkerUnderstandingPropertiesML-type-type", XR_TYPE_SYSTEM_MARKER_UNDERSTANDING_PROPERTIES_ML, "XR_TYPE_SYSTEM_MARKER_UNDERSTANDING_PROPERTIES_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemMarkerUnderstandingPropertiesML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemMarkerUnderstandingPropertiesML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemMarkerUnderstandingPropertiesML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemMarkerUnderstandingPropertiesML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemMarkerUnderstandingPropertiesML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemMarkerUnderstandingPropertiesML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsMarkerUnderstanding" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorCreateInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MARKER_DETECTOR_CREATE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMarkerDetectorCreateInfoML",
                             value->type, "VUID-XrMarkerDetectorCreateInfoML-type-type", XR_TYPE_MARKER_DETECTOR_CREATE_INFO_ML, "XR_TYPE_MARKER_DETECTOR_CREATE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_MARKER_DETECTOR_APRIL_TAG_INFO_ML);
        valid_ext_structs.insert(XR_TYPE_MARKER_DETECTOR_ARUCO_INFO_ML);
        valid_ext_structs.insert(XR_TYPE_MARKER_DETECTOR_CUSTOM_PROFILE_INFO_ML);
        valid_ext_structs.insert(XR_TYPE_MARKER_DETECTOR_SIZE_INFO_ML);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCreateInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMarkerDetectorCreateInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorCreateInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCreateInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorCreateInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCreateInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrMarkerDetectorProfileML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrMarkerDetectorCreateInfoML", "profile", objects_info, value->profile)) {
        std::ostringstream oss_enum;
        oss_enum << "XrMarkerDetectorCreateInfoML contains invalid XrMarkerDetectorProfileML \"profile\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->profile));
        CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCreateInfoML-profile-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrMarkerTypeML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrMarkerDetectorCreateInfoML", "markerType", objects_info, value->markerType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrMarkerDetectorCreateInfoML contains invalid XrMarkerTypeML \"markerType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->markerType));
        CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCreateInfoML-markerType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorArucoInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MARKER_DETECTOR_ARUCO_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMarkerDetectorArucoInfoML",
                             value->type, "VUID-XrMarkerDetectorArucoInfoML-type-type", XR_TYPE_MARKER_DETECTOR_ARUCO_INFO_ML, "XR_TYPE_MARKER_DETECTOR_ARUCO_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorArucoInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMarkerDetectorArucoInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorArucoInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorArucoInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorArucoInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorArucoInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrMarkerArucoDictML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrMarkerDetectorArucoInfoML", "arucoDict", objects_info, value->arucoDict)) {
        std::ostringstream oss_enum;
        oss_enum << "XrMarkerDetectorArucoInfoML contains invalid XrMarkerArucoDictML \"arucoDict\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->arucoDict));
        CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorArucoInfoML-arucoDict-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorSizeInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MARKER_DETECTOR_SIZE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMarkerDetectorSizeInfoML",
                             value->type, "VUID-XrMarkerDetectorSizeInfoML-type-type", XR_TYPE_MARKER_DETECTOR_SIZE_INFO_ML, "XR_TYPE_MARKER_DETECTOR_SIZE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorSizeInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMarkerDetectorSizeInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorSizeInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorSizeInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorSizeInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorSizeInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorAprilTagInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MARKER_DETECTOR_APRIL_TAG_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMarkerDetectorAprilTagInfoML",
                             value->type, "VUID-XrMarkerDetectorAprilTagInfoML-type-type", XR_TYPE_MARKER_DETECTOR_APRIL_TAG_INFO_ML, "XR_TYPE_MARKER_DETECTOR_APRIL_TAG_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorAprilTagInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMarkerDetectorAprilTagInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorAprilTagInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorAprilTagInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorAprilTagInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorAprilTagInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrMarkerAprilTagDictML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrMarkerDetectorAprilTagInfoML", "aprilTagDict", objects_info, value->aprilTagDict)) {
        std::ostringstream oss_enum;
        oss_enum << "XrMarkerDetectorAprilTagInfoML contains invalid XrMarkerAprilTagDictML \"aprilTagDict\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->aprilTagDict));
        CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorAprilTagInfoML-aprilTagDict-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorCustomProfileInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MARKER_DETECTOR_CUSTOM_PROFILE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMarkerDetectorCustomProfileInfoML",
                             value->type, "VUID-XrMarkerDetectorCustomProfileInfoML-type-type", XR_TYPE_MARKER_DETECTOR_CUSTOM_PROFILE_INFO_ML, "XR_TYPE_MARKER_DETECTOR_CUSTOM_PROFILE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCustomProfileInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMarkerDetectorCustomProfileInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorCustomProfileInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCustomProfileInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorCustomProfileInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCustomProfileInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrMarkerDetectorFpsML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrMarkerDetectorCustomProfileInfoML", "fpsHint", objects_info, value->fpsHint)) {
        std::ostringstream oss_enum;
        oss_enum << "XrMarkerDetectorCustomProfileInfoML contains invalid XrMarkerDetectorFpsML \"fpsHint\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->fpsHint));
        CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCustomProfileInfoML-fpsHint-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrMarkerDetectorResolutionML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrMarkerDetectorCustomProfileInfoML", "resolutionHint", objects_info, value->resolutionHint)) {
        std::ostringstream oss_enum;
        oss_enum << "XrMarkerDetectorCustomProfileInfoML contains invalid XrMarkerDetectorResolutionML \"resolutionHint\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->resolutionHint));
        CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCustomProfileInfoML-resolutionHint-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrMarkerDetectorCameraML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrMarkerDetectorCustomProfileInfoML", "cameraHint", objects_info, value->cameraHint)) {
        std::ostringstream oss_enum;
        oss_enum << "XrMarkerDetectorCustomProfileInfoML contains invalid XrMarkerDetectorCameraML \"cameraHint\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->cameraHint));
        CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCustomProfileInfoML-cameraHint-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrMarkerDetectorCornerRefineMethodML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrMarkerDetectorCustomProfileInfoML", "cornerRefineMethod", objects_info, value->cornerRefineMethod)) {
        std::ostringstream oss_enum;
        oss_enum << "XrMarkerDetectorCustomProfileInfoML contains invalid XrMarkerDetectorCornerRefineMethodML \"cornerRefineMethod\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->cornerRefineMethod));
        CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCustomProfileInfoML-cornerRefineMethod-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrMarkerDetectorFullAnalysisIntervalML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrMarkerDetectorCustomProfileInfoML", "fullAnalysisIntervalHint", objects_info, value->fullAnalysisIntervalHint)) {
        std::ostringstream oss_enum;
        oss_enum << "XrMarkerDetectorCustomProfileInfoML contains invalid XrMarkerDetectorFullAnalysisIntervalML \"fullAnalysisIntervalHint\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->fullAnalysisIntervalHint));
        CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorCustomProfileInfoML-fullAnalysisIntervalHint-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorSnapshotInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MARKER_DETECTOR_SNAPSHOT_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMarkerDetectorSnapshotInfoML",
                             value->type, "VUID-XrMarkerDetectorSnapshotInfoML-type-type", XR_TYPE_MARKER_DETECTOR_SNAPSHOT_INFO_ML, "XR_TYPE_MARKER_DETECTOR_SNAPSHOT_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorSnapshotInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMarkerDetectorSnapshotInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorSnapshotInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorSnapshotInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorSnapshotInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorSnapshotInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerDetectorStateML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MARKER_DETECTOR_STATE_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMarkerDetectorStateML",
                             value->type, "VUID-XrMarkerDetectorStateML-type-type", XR_TYPE_MARKER_DETECTOR_STATE_ML, "XR_TYPE_MARKER_DETECTOR_STATE_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorStateML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMarkerDetectorStateML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorStateML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorStateML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMarkerDetectorStateML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerDetectorStateML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "state" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMarkerSpaceCreateInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MARKER_SPACE_CREATE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMarkerSpaceCreateInfoML",
                             value->type, "VUID-XrMarkerSpaceCreateInfoML-type-type", XR_TYPE_MARKER_SPACE_CREATE_INFO_ML, "XR_TYPE_MARKER_SPACE_CREATE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMarkerSpaceCreateInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMarkerSpaceCreateInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMarkerSpaceCreateInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerSpaceCreateInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMarkerSpaceCreateInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerSpaceCreateInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrMarkerDetectorMLHandle(&value->markerDetector);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrMarkerDetectorML handle \"markerDetector\" ";
            oss << HandleToHexString(value->markerDetector);
            CoreValidLogMessage(instance_info, "VUID-XrMarkerSpaceCreateInfoML-markerDetector-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalizationMapML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LOCALIZATION_MAP_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLocalizationMapML",
                             value->type, "VUID-XrLocalizationMapML-type-type", XR_TYPE_LOCALIZATION_MAP_ML, "XR_TYPE_LOCALIZATION_MAP_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLocalizationMapML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLocalizationMapML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLocalizationMapML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLocalizationMapML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLocalizationMapML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLocalizationMapML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrLocalizationMapTypeML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrLocalizationMapML", "mapType", objects_info, value->mapType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrLocalizationMapML contains invalid XrLocalizationMapTypeML \"mapType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->mapType));
        CoreValidLogMessage(instance_info, "VUID-XrLocalizationMapML-mapType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataLocalizationChangedML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataLocalizationChangedML",
                             value->type, "VUID-XrEventDataLocalizationChangedML-type-type", XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML, "XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataLocalizationChangedML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataLocalizationChangedML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataLocalizationChangedML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataLocalizationChangedML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataLocalizationChangedML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataLocalizationChangedML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "session" because this struct is returned only.
    // Skip checking member "state" because this struct is returned only.
    // Skip checking member "map" because this struct is returned only.
    // Skip checking member "confidence" because this struct is returned only.
    // Skip checking member "errorFlags" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalizationMapQueryInfoBaseHeaderML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrLocalizationMapQueryInfoBaseHeaderML-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrLocalizationMapQueryInfoBaseHeaderML-next-next" because it is a base structure
    InvalidStructureType(instance_info, command_name, objects_info, "XrLocalizationMapQueryInfoBaseHeaderML",
                         value->type, "VUID-XrLocalizationMapQueryInfoBaseHeaderML-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrMapLocalizationRequestInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_MAP_LOCALIZATION_REQUEST_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrMapLocalizationRequestInfoML",
                             value->type, "VUID-XrMapLocalizationRequestInfoML-type-type", XR_TYPE_MAP_LOCALIZATION_REQUEST_INFO_ML, "XR_TYPE_MAP_LOCALIZATION_REQUEST_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrMapLocalizationRequestInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrMapLocalizationRequestInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrMapLocalizationRequestInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMapLocalizationRequestInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrMapLocalizationRequestInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrMapLocalizationRequestInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalizationMapImportInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LOCALIZATION_MAP_IMPORT_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLocalizationMapImportInfoML",
                             value->type, "VUID-XrLocalizationMapImportInfoML-type-type", XR_TYPE_LOCALIZATION_MAP_IMPORT_INFO_ML, "XR_TYPE_LOCALIZATION_MAP_IMPORT_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLocalizationMapImportInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLocalizationMapImportInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLocalizationMapImportInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLocalizationMapImportInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLocalizationMapImportInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLocalizationMapImportInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->size && nullptr != value->data) {
        CoreValidLogMessage(instance_info, "VUID-XrLocalizationMapImportInfoML-size-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrLocalizationMapImportInfoML member size is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->data && 0 != value->size) {
        CoreValidLogMessage(instance_info, "VUID-XrLocalizationMapImportInfoML-data-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrLocalizationMapImportInfoML contains invalid NULL for char \"data\" is which not "
                            "optional since \"size\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrLocalizationMapImportInfoML-data-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalizationEnableEventsInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LOCALIZATION_ENABLE_EVENTS_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLocalizationEnableEventsInfoML",
                             value->type, "VUID-XrLocalizationEnableEventsInfoML-type-type", XR_TYPE_LOCALIZATION_ENABLE_EVENTS_INFO_ML, "XR_TYPE_LOCALIZATION_ENABLE_EVENTS_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLocalizationEnableEventsInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLocalizationEnableEventsInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLocalizationEnableEventsInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLocalizationEnableEventsInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLocalizationEnableEventsInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLocalizationEnableEventsInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsCreateInfoBaseHeaderML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrSpatialAnchorsCreateInfoBaseHeaderML-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpatialAnchorsCreateInfoBaseHeaderML-next-next" because it is a base structure
    if (value->type == XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML) {
        const XrSpatialAnchorsCreateInfoFromPoseML* new_value = reinterpret_cast<const XrSpatialAnchorsCreateInfoFromPoseML*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors")) {
            std::string error_str = "XrSpatialAnchorsCreateInfoBaseHeaderML being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML\"";
            error_str += " which requires extension \"XR_ML_spatial_anchors\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoBaseHeaderML-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML) {
        const XrSpatialAnchorsCreateInfoFromUuidsML* new_value = reinterpret_cast<const XrSpatialAnchorsCreateInfoFromUuidsML*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
            std::string error_str = "XrSpatialAnchorsCreateInfoBaseHeaderML being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML\"";
            error_str += " which requires extension \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoBaseHeaderML-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsCreateInfoBaseHeaderML",
                         value->type, "VUID-XrSpatialAnchorsCreateInfoBaseHeaderML-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsCreateInfoFromPoseML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsCreateInfoFromPoseML",
                             value->type, "VUID-XrSpatialAnchorsCreateInfoFromPoseML-type-type", XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML, "XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromPoseML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsCreateInfoFromPoseML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsCreateInfoFromPoseML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromPoseML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsCreateInfoFromPoseML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromPoseML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromPoseML-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialAnchorsCompletionML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CREATE_SPATIAL_ANCHORS_COMPLETION_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCreateSpatialAnchorsCompletionML",
                             value->type, "VUID-XrCreateSpatialAnchorsCompletionML-type-type", XR_TYPE_CREATE_SPATIAL_ANCHORS_COMPLETION_ML, "XR_TYPE_CREATE_SPATIAL_ANCHORS_COMPLETION_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialAnchorsCompletionML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCreateSpatialAnchorsCompletionML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialAnchorsCompletionML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialAnchorsCompletionML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialAnchorsCompletionML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialAnchorsCompletionML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCreateSpatialAnchorsCompletionML", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCreateSpatialAnchorsCompletionML contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialAnchorsCompletionML-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->spaceCount is non-zero
    if (0 != value->spaceCount && nullptr == value->spaces) {
        CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialAnchorsCompletionML-spaces-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCreateSpatialAnchorsCompletionML member spaceCount is NULL, but value->spaceCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->spaces) {
        for (uint32_t value_spaces_inc = 0; value_spaces_inc < value->spaceCount; ++value_spaces_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->spaces[value_spaces_inc]);
                if (handle_result == VALIDATE_XR_HANDLE_INVALID) {
                    // Not a valid handle
                    std::ostringstream oss;
                    oss << "Invalid XrSpace handle \"spaces\" ";
                    oss << HandleToHexString(value->spaces[value_spaces_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialAnchorsCompletionML-spaces-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorStateML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_STATE_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorStateML",
                             value->type, "VUID-XrSpatialAnchorStateML-type-type", XR_TYPE_SPATIAL_ANCHOR_STATE_ML, "XR_TYPE_SPATIAL_ANCHOR_STATE_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorStateML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorStateML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorStateML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorStateML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorStateML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorStateML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialAnchorConfidenceML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAnchorStateML", "confidence", objects_info, value->confidence)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAnchorStateML contains invalid XrSpatialAnchorConfidenceML \"confidence\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->confidence));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorStateML-confidence-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsCreateStorageInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_CREATE_STORAGE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsCreateStorageInfoML",
                             value->type, "VUID-XrSpatialAnchorsCreateStorageInfoML-type-type", XR_TYPE_SPATIAL_ANCHORS_CREATE_STORAGE_INFO_ML, "XR_TYPE_SPATIAL_ANCHORS_CREATE_STORAGE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateStorageInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsCreateStorageInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsCreateStorageInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateStorageInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsCreateStorageInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateStorageInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsQueryInfoBaseHeaderML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrSpatialAnchorsQueryInfoBaseHeaderML-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpatialAnchorsQueryInfoBaseHeaderML-next-next" because it is a base structure
    if (value->type == XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML) {
        const XrSpatialAnchorsQueryInfoRadiusML* new_value = reinterpret_cast<const XrSpatialAnchorsQueryInfoRadiusML*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_spatial_anchors_storage")) {
            std::string error_str = "XrSpatialAnchorsQueryInfoBaseHeaderML being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML\"";
            error_str += " which requires extension \"XR_ML_spatial_anchors_storage\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryInfoBaseHeaderML-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsQueryInfoBaseHeaderML",
                         value->type, "VUID-XrSpatialAnchorsQueryInfoBaseHeaderML-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsQueryInfoRadiusML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsQueryInfoRadiusML",
                             value->type, "VUID-XrSpatialAnchorsQueryInfoRadiusML-type-type", XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML, "XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryInfoRadiusML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsQueryInfoRadiusML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsQueryInfoRadiusML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryInfoRadiusML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsQueryInfoRadiusML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryInfoRadiusML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryInfoRadiusML-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsQueryCompletionML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_QUERY_COMPLETION_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsQueryCompletionML",
                             value->type, "VUID-XrSpatialAnchorsQueryCompletionML-type-type", XR_TYPE_SPATIAL_ANCHORS_QUERY_COMPLETION_ML, "XR_TYPE_SPATIAL_ANCHORS_QUERY_COMPLETION_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryCompletionML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsQueryCompletionML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsQueryCompletionML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryCompletionML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsQueryCompletionML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryCompletionML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAnchorsQueryCompletionML", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAnchorsQueryCompletionML contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryCompletionML-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->uuidCapacityInput is non-zero
    if (0 != value->uuidCapacityInput && nullptr == value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsQueryCompletionML-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorsQueryCompletionML member uuidCapacityInput is NULL, but value->uuidCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialAnchorsQueryCompletionML-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsCreateInfoFromUuidsML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsCreateInfoFromUuidsML",
                             value->type, "VUID-XrSpatialAnchorsCreateInfoFromUuidsML-type-type", XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML, "XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromUuidsML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsCreateInfoFromUuidsML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsCreateInfoFromUuidsML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromUuidsML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsCreateInfoFromUuidsML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromUuidsML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&value->storage);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
            oss << HandleToHexString(value->storage);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromUuidsML-storage-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Non-optional array length must be non-zero
    if (0 >= value->uuidCount && nullptr != value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromUuidsML-uuidCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorsCreateInfoFromUuidsML member uuidCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->uuids && 0 != value->uuidCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsCreateInfoFromUuidsML-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialAnchorsCreateInfoFromUuidsML contains invalid NULL for XrUuidEXT \"uuids\" is which not "
                            "optional since \"uuidCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialAnchorsCreateInfoFromUuidsML-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsPublishInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_PUBLISH_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsPublishInfoML",
                             value->type, "VUID-XrSpatialAnchorsPublishInfoML-type-type", XR_TYPE_SPATIAL_ANCHORS_PUBLISH_INFO_ML, "XR_TYPE_SPATIAL_ANCHORS_PUBLISH_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsPublishInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsPublishInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsPublishInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->anchorCount && nullptr != value->anchors) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishInfoML-anchorCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorsPublishInfoML member anchorCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->anchors && 0 != value->anchorCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishInfoML-anchors-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialAnchorsPublishInfoML contains invalid NULL for XrSpace \"anchors\" is which not "
                            "optional since \"anchorCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->anchors) {
        for (uint32_t value_anchors_inc = 0; value_anchors_inc < value->anchorCount; ++value_anchors_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->anchors[value_anchors_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSpace handle \"anchors\" ";
                    oss << HandleToHexString(value->anchors[value_anchors_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishInfoML-anchors-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsPublishCompletionML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsPublishCompletionML",
                             value->type, "VUID-XrSpatialAnchorsPublishCompletionML-type-type", XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_ML, "XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_DETAILS_ML);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsPublishCompletionML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsPublishCompletionML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsPublishCompletionML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAnchorsPublishCompletionML", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAnchorsPublishCompletionML contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionML-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->uuidCount && nullptr != value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionML-uuidCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorsPublishCompletionML member uuidCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->uuids && 0 != value->uuidCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionML-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialAnchorsPublishCompletionML contains invalid NULL for XrUuidEXT \"uuids\" is which not "
                            "optional since \"uuidCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialAnchorsPublishCompletionML-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsDeleteInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_DELETE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsDeleteInfoML",
                             value->type, "VUID-XrSpatialAnchorsDeleteInfoML-type-type", XR_TYPE_SPATIAL_ANCHORS_DELETE_INFO_ML, "XR_TYPE_SPATIAL_ANCHORS_DELETE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsDeleteInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsDeleteInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsDeleteInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->uuidCount && nullptr != value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteInfoML-uuidCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorsDeleteInfoML member uuidCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->uuids && 0 != value->uuidCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteInfoML-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialAnchorsDeleteInfoML contains invalid NULL for XrUuidEXT \"uuids\" is which not "
                            "optional since \"uuidCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialAnchorsDeleteInfoML-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsDeleteCompletionML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsDeleteCompletionML",
                             value->type, "VUID-XrSpatialAnchorsDeleteCompletionML-type-type", XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_ML, "XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_DETAILS_ML);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsDeleteCompletionML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsDeleteCompletionML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsDeleteCompletionML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAnchorsDeleteCompletionML", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAnchorsDeleteCompletionML contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionML-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsUpdateExpirationInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsUpdateExpirationInfoML",
                             value->type, "VUID-XrSpatialAnchorsUpdateExpirationInfoML-type-type", XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_INFO_ML, "XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsUpdateExpirationInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsUpdateExpirationInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsUpdateExpirationInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->uuidCount && nullptr != value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationInfoML-uuidCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorsUpdateExpirationInfoML member uuidCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->uuids && 0 != value->uuidCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationInfoML-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialAnchorsUpdateExpirationInfoML contains invalid NULL for XrUuidEXT \"uuids\" is which not "
                            "optional since \"uuidCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialAnchorsUpdateExpirationInfoML-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsUpdateExpirationCompletionML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsUpdateExpirationCompletionML",
                             value->type, "VUID-XrSpatialAnchorsUpdateExpirationCompletionML-type-type", XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_ML, "XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_DETAILS_ML);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsUpdateExpirationCompletionML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsUpdateExpirationCompletionML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsUpdateExpirationCompletionML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAnchorsUpdateExpirationCompletionML", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAnchorsUpdateExpirationCompletionML contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionML-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCompletionResultML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAnchorCompletionResultML", "result", objects_info, value->result)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAnchorCompletionResultML contains invalid XrResult \"result\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->result));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCompletionResultML-result-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsPublishCompletionDetailsML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_DETAILS_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsPublishCompletionDetailsML",
                             value->type, "VUID-XrSpatialAnchorsPublishCompletionDetailsML-type-type", XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_DETAILS_ML, "XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_DETAILS_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionDetailsML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsPublishCompletionDetailsML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsPublishCompletionDetailsML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionDetailsML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsPublishCompletionDetailsML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionDetailsML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->resultCount && nullptr != value->results) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionDetailsML-resultCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorsPublishCompletionDetailsML member resultCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->results && 0 != value->resultCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionDetailsML-results-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialAnchorsPublishCompletionDetailsML contains invalid NULL for XrSpatialAnchorCompletionResultML \"results\" is which not "
                            "optional since \"resultCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->results) {
        for (uint32_t value_results_inc = 0; value_results_inc < value->resultCount; ++value_results_inc) {
            // Validate that the structure XrSpatialAnchorCompletionResultML is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->results[value_results_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsPublishCompletionDetailsML-results-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpatialAnchorsPublishCompletionDetailsML member results is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsDeleteCompletionDetailsML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_DETAILS_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsDeleteCompletionDetailsML",
                             value->type, "VUID-XrSpatialAnchorsDeleteCompletionDetailsML-type-type", XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_DETAILS_ML, "XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_DETAILS_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionDetailsML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsDeleteCompletionDetailsML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsDeleteCompletionDetailsML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionDetailsML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsDeleteCompletionDetailsML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionDetailsML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->resultCount && nullptr != value->results) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionDetailsML-resultCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorsDeleteCompletionDetailsML member resultCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->results && 0 != value->resultCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionDetailsML-results-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialAnchorsDeleteCompletionDetailsML contains invalid NULL for XrSpatialAnchorCompletionResultML \"results\" is which not "
                            "optional since \"resultCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->results) {
        for (uint32_t value_results_inc = 0; value_results_inc < value->resultCount; ++value_results_inc) {
            // Validate that the structure XrSpatialAnchorCompletionResultML is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->results[value_results_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsDeleteCompletionDetailsML-results-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpatialAnchorsDeleteCompletionDetailsML member results is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorsUpdateExpirationCompletionDetailsML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_DETAILS_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorsUpdateExpirationCompletionDetailsML",
                             value->type, "VUID-XrSpatialAnchorsUpdateExpirationCompletionDetailsML-type-type", XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_DETAILS_ML, "XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_DETAILS_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionDetailsML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorsUpdateExpirationCompletionDetailsML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsUpdateExpirationCompletionDetailsML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionDetailsML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorsUpdateExpirationCompletionDetailsML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionDetailsML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->resultCount && nullptr != value->results) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionDetailsML-resultCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorsUpdateExpirationCompletionDetailsML member resultCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->results && 0 != value->resultCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionDetailsML-results-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialAnchorsUpdateExpirationCompletionDetailsML contains invalid NULL for XrSpatialAnchorCompletionResultML \"results\" is which not "
                            "optional since \"resultCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->results) {
        for (uint32_t value_results_inc = 0; value_results_inc < value->resultCount; ++value_results_inc) {
            // Validate that the structure XrSpatialAnchorCompletionResultML is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->results[value_results_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorsUpdateExpirationCompletionDetailsML-results-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpatialAnchorsUpdateExpirationCompletionDetailsML member results is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorPersistenceNameMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorPersistenceInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorPersistenceInfoMSFT",
                             value->type, "VUID-XrSpatialAnchorPersistenceInfoMSFT-type-type", XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT, "XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistenceInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorPersistenceInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorPersistenceInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistenceInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorPersistenceInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistenceInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Validate that the structure XrSpatialAnchorPersistenceNameMSFT is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->spatialAnchorPersistenceName);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistenceInfoMSFT-spatialAnchorPersistenceName-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorPersistenceInfoMSFT member spatialAnchorPersistenceName is invalid");
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorMSFTHandle(&value->spatialAnchor);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpatialAnchorMSFT handle \"spatialAnchor\" ";
            oss << HandleToHexString(value->spatialAnchor);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistenceInfoMSFT-spatialAnchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT",
                             value->type, "VUID-XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT-type-type", XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT, "XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorStoreConnectionMSFTHandle(&value->spatialAnchorStore);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpatialAnchorStoreConnectionMSFT handle \"spatialAnchorStore\" ";
            oss << HandleToHexString(value->spatialAnchorStore);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT-spatialAnchorStore-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Validate that the structure XrSpatialAnchorPersistenceNameMSFT is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->spatialAnchorPersistenceName);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT-spatialAnchorPersistenceName-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT member spatialAnchorPersistenceName is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkerMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "markerType" because this struct is returned only.
    // Skip checking member "lastSeenTime" because this struct is returned only.
    // Skip checking member "center" because this struct is returned only.
    // Skip checking member "size" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkersMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MARKERS_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMarkersMSFT",
                             value->type, "VUID-XrSceneMarkersMSFT-type-type", XR_TYPE_SCENE_MARKERS_MSFT, "XR_TYPE_SCENE_MARKERS_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMarkersMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMarkersMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMarkersMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMarkersMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMarkersMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMarkersMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->sceneMarkerCapacityInput is non-zero
    if (0 != value->sceneMarkerCapacityInput && nullptr == value->sceneMarkers) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneMarkersMSFT-sceneMarkers-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneMarkersMSFT member sceneMarkerCapacityInput is NULL, but value->sceneMarkerCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->sceneMarkers) {
        for (uint32_t value_scenemarkers_inc = 0; value_scenemarkers_inc < value->sceneMarkerCapacityInput; ++value_scenemarkers_inc) {
            // Validate that the structure XrSceneMarkerMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->sceneMarkers[value_scenemarkers_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSceneMarkersMSFT-sceneMarkers-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSceneMarkersMSFT member sceneMarkers is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkerTypeFilterMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MARKER_TYPE_FILTER_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMarkerTypeFilterMSFT",
                             value->type, "VUID-XrSceneMarkerTypeFilterMSFT-type-type", XR_TYPE_SCENE_MARKER_TYPE_FILTER_MSFT, "XR_TYPE_SCENE_MARKER_TYPE_FILTER_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMarkerTypeFilterMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMarkerTypeFilterMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMarkerTypeFilterMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMarkerTypeFilterMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMarkerTypeFilterMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMarkerTypeFilterMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->markerTypeCount is non-zero
    if (0 != value->markerTypeCount && nullptr == value->markerTypes) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneMarkerTypeFilterMSFT-markerTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneMarkerTypeFilterMSFT member markerTypeCount is NULL, but value->markerTypeCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrSceneMarkerTypeFilterMSFT-markerTypes-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkerQRCodeMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "symbolType" because this struct is returned only.
    // Skip checking member "version" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMarkerQRCodesMSFT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MARKER_QR_CODES_MSFT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMarkerQRCodesMSFT",
                             value->type, "VUID-XrSceneMarkerQRCodesMSFT-type-type", XR_TYPE_SCENE_MARKER_QR_CODES_MSFT, "XR_TYPE_SCENE_MARKER_QR_CODES_MSFT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMarkerQRCodesMSFT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMarkerQRCodesMSFT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMarkerQRCodesMSFT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMarkerQRCodesMSFT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMarkerQRCodesMSFT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMarkerQRCodesMSFT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->qrCodeCapacityInput is non-zero
    if (0 != value->qrCodeCapacityInput && nullptr == value->qrCodes) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneMarkerQRCodesMSFT-qrCodes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneMarkerQRCodesMSFT member qrCodeCapacityInput is NULL, but value->qrCodeCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->qrCodes) {
        for (uint32_t value_qrcodes_inc = 0; value_qrcodes_inc < value->qrCodeCapacityInput; ++value_qrcodes_inc) {
            // Validate that the structure XrSceneMarkerQRCodeMSFT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->qrCodes[value_qrcodes_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSceneMarkerQRCodesMSFT-qrCodes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSceneMarkerQRCodesMSFT member qrCodes is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceQueryInfoBaseHeaderFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrSpaceQueryInfoBaseHeaderFB-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpaceQueryInfoBaseHeaderFB-next-next" because it is a base structure
    if (value->type == XR_TYPE_SPACE_QUERY_INFO_FB) {
        const XrSpaceQueryInfoFB* new_value = reinterpret_cast<const XrSpaceQueryInfoFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
            std::string error_str = "XrSpaceQueryInfoBaseHeaderFB being used with child struct type ";
            error_str += "\"XR_TYPE_SPACE_QUERY_INFO_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoBaseHeaderFB-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceQueryInfoBaseHeaderFB",
                         value->type, "VUID-XrSpaceQueryInfoBaseHeaderFB-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceFilterInfoBaseHeaderFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrSpaceFilterInfoBaseHeaderFB-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpaceFilterInfoBaseHeaderFB-next-next" because it is a base structure
    if (value->type == XR_TYPE_SPACE_UUID_FILTER_INFO_FB) {
        const XrSpaceUuidFilterInfoFB* new_value = reinterpret_cast<const XrSpaceUuidFilterInfoFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
            std::string error_str = "XrSpaceFilterInfoBaseHeaderFB being used with child struct type ";
            error_str += "\"XR_TYPE_SPACE_UUID_FILTER_INFO_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterInfoBaseHeaderFB-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) {
        const XrSpaceComponentFilterInfoFB* new_value = reinterpret_cast<const XrSpaceComponentFilterInfoFB*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_FB_spatial_entity_query")) {
            std::string error_str = "XrSpaceFilterInfoBaseHeaderFB being used with child struct type ";
            error_str += "\"XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB\"";
            error_str += " which requires extension \"XR_FB_spatial_entity_query\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterInfoBaseHeaderFB-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceFilterInfoBaseHeaderFB",
                         value->type, "VUID-XrSpaceFilterInfoBaseHeaderFB-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceQueryInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_QUERY_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceQueryInfoFB",
                             value->type, "VUID-XrSpaceQueryInfoFB-type-type", XR_TYPE_SPACE_QUERY_INFO_FB, "XR_TYPE_SPACE_QUERY_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPACE_GROUP_UUID_FILTER_INFO_META);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceQueryInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceQueryInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceQueryInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpaceQueryActionFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpaceQueryInfoFB", "queryAction", objects_info, value->queryAction)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceQueryInfoFB contains invalid XrSpaceQueryActionFB \"queryAction\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->queryAction));
        CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-queryAction-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Validate if XrSpaceFilterInfoBaseHeaderFB is a child structure of type XrSpaceUuidFilterInfoFB and it is valid
    {
        if (value->filter != nullptr) {
            const XrSpaceUuidFilterInfoFB* new_spaceuuidfilterinfofb_value = reinterpret_cast<const XrSpaceUuidFilterInfoFB*>(value->filter);
            if (new_spaceuuidfilterinfofb_value->type == XR_TYPE_SPACE_UUID_FILTER_INFO_FB) {
                if (nullptr != new_spaceuuidfilterinfofb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spaceuuidfilterinfofb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpaceQueryInfoFB member filter";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-filter-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrSpaceFilterInfoBaseHeaderFB is a child structure of type XrSpaceComponentFilterInfoFB and it is valid
    {
        if (value->filter != nullptr) {
            const XrSpaceComponentFilterInfoFB* new_spacecomponentfilterinfofb_value = reinterpret_cast<const XrSpaceComponentFilterInfoFB*>(value->filter);
            if (new_spacecomponentfilterinfofb_value->type == XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) {
                if (nullptr != new_spacecomponentfilterinfofb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spacecomponentfilterinfofb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpaceQueryInfoFB member filter";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-filter-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate that the base-structure XrSpaceFilterInfoBaseHeaderFB is valid
    if (nullptr != value->filter) {
        xr_result = ValidateXrStruct(instance_info, command_name,
                                                        objects_info, check_members, true, value->filter);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-filter-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrSpaceQueryInfoFB member filter is invalid");
            return xr_result;
        }
    }
    // Validate if XrSpaceFilterInfoBaseHeaderFB is a child structure of type XrSpaceUuidFilterInfoFB and it is valid
    {
        if (value->excludeFilter != nullptr) {
            const XrSpaceUuidFilterInfoFB* new_spaceuuidfilterinfofb_value = reinterpret_cast<const XrSpaceUuidFilterInfoFB*>(value->excludeFilter);
            if (new_spaceuuidfilterinfofb_value->type == XR_TYPE_SPACE_UUID_FILTER_INFO_FB) {
                if (nullptr != new_spaceuuidfilterinfofb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spaceuuidfilterinfofb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpaceQueryInfoFB member excludeFilter";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-excludeFilter-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate if XrSpaceFilterInfoBaseHeaderFB is a child structure of type XrSpaceComponentFilterInfoFB and it is valid
    {
        if (value->excludeFilter != nullptr) {
            const XrSpaceComponentFilterInfoFB* new_spacecomponentfilterinfofb_value = reinterpret_cast<const XrSpaceComponentFilterInfoFB*>(value->excludeFilter);
            if (new_spacecomponentfilterinfofb_value->type == XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) {
                if (nullptr != new_spacecomponentfilterinfofb_value) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spacecomponentfilterinfofb_value);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpaceQueryInfoFB member excludeFilter";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-excludeFilter-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        }
                    }
            }
        }
    }
    // Validate that the base-structure XrSpaceFilterInfoBaseHeaderFB is valid
    if (nullptr != value->excludeFilter) {
        xr_result = ValidateXrStruct(instance_info, command_name,
                                                        objects_info, check_members, true, value->excludeFilter);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryInfoFB-excludeFilter-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrSpaceQueryInfoFB member excludeFilter is invalid");
            return xr_result;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceStorageLocationFilterInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceStorageLocationFilterInfoFB",
                             value->type, "VUID-XrSpaceStorageLocationFilterInfoFB-type-type", XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB, "XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceStorageLocationFilterInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceStorageLocationFilterInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceStorageLocationFilterInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceStorageLocationFilterInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceStorageLocationFilterInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceStorageLocationFilterInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpaceStorageLocationFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpaceStorageLocationFilterInfoFB", "location", objects_info, value->location)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceStorageLocationFilterInfoFB contains invalid XrSpaceStorageLocationFB \"location\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->location));
        CoreValidLogMessage(instance_info, "VUID-XrSpaceStorageLocationFilterInfoFB-location-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceUuidFilterInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_UUID_FILTER_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceUuidFilterInfoFB",
                             value->type, "VUID-XrSpaceUuidFilterInfoFB-type-type", XR_TYPE_SPACE_UUID_FILTER_INFO_FB, "XR_TYPE_SPACE_UUID_FILTER_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceUuidFilterInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceUuidFilterInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceUuidFilterInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceUuidFilterInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceUuidFilterInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceUuidFilterInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->uuidCount && nullptr != value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceUuidFilterInfoFB-uuidCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceUuidFilterInfoFB member uuidCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->uuids && 0 != value->uuidCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceUuidFilterInfoFB-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpaceUuidFilterInfoFB contains invalid NULL for XrUuidEXT \"uuids\" is which not "
                            "optional since \"uuidCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpaceUuidFilterInfoFB-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceComponentFilterInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceComponentFilterInfoFB",
                             value->type, "VUID-XrSpaceComponentFilterInfoFB-type-type", XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB, "XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentFilterInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceComponentFilterInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceComponentFilterInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentFilterInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceComponentFilterInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentFilterInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpaceComponentTypeFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpaceComponentFilterInfoFB", "componentType", objects_info, value->componentType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceComponentFilterInfoFB contains invalid XrSpaceComponentTypeFB \"componentType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentType));
        CoreValidLogMessage(instance_info, "VUID-XrSpaceComponentFilterInfoFB-componentType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceQueryResultFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "space" because this struct is returned only.
    // Skip checking member "uuid" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceQueryResultsFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_QUERY_RESULTS_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceQueryResultsFB",
                             value->type, "VUID-XrSpaceQueryResultsFB-type-type", XR_TYPE_SPACE_QUERY_RESULTS_FB, "XR_TYPE_SPACE_QUERY_RESULTS_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryResultsFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceQueryResultsFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceQueryResultsFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryResultsFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceQueryResultsFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryResultsFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->resultCapacityInput is non-zero
    if (0 != value->resultCapacityInput && nullptr == value->results) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryResultsFB-results-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceQueryResultsFB member resultCapacityInput is NULL, but value->resultCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->results) {
        for (uint32_t value_results_inc = 0; value_results_inc < value->resultCapacityInput; ++value_results_inc) {
            // Validate that the structure XrSpaceQueryResultFB is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->results[value_results_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpaceQueryResultsFB-results-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpaceQueryResultsFB member results is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceQueryResultsAvailableFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpaceQueryResultsAvailableFB",
                             value->type, "VUID-XrEventDataSpaceQueryResultsAvailableFB-type-type", XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB, "XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceQueryResultsAvailableFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpaceQueryResultsAvailableFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceQueryResultsAvailableFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceQueryResultsAvailableFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceQueryResultsAvailableFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceQueryResultsAvailableFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceQueryCompleteFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpaceQueryCompleteFB",
                             value->type, "VUID-XrEventDataSpaceQueryCompleteFB-type-type", XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB, "XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceQueryCompleteFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpaceQueryCompleteFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceQueryCompleteFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceQueryCompleteFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceQueryCompleteFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceQueryCompleteFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceSaveInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_SAVE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceSaveInfoFB",
                             value->type, "VUID-XrSpaceSaveInfoFB-type-type", XR_TYPE_SPACE_SAVE_INFO_FB, "XR_TYPE_SPACE_SAVE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceSaveInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceSaveInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceSaveInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceSaveInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceSaveInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceSaveInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceSaveInfoFB-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Make sure the enum type XrSpaceStorageLocationFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpaceSaveInfoFB", "location", objects_info, value->location)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceSaveInfoFB contains invalid XrSpaceStorageLocationFB \"location\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->location));
        CoreValidLogMessage(instance_info, "VUID-XrSpaceSaveInfoFB-location-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrSpacePersistenceModeFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpaceSaveInfoFB", "persistenceMode", objects_info, value->persistenceMode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceSaveInfoFB contains invalid XrSpacePersistenceModeFB \"persistenceMode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->persistenceMode));
        CoreValidLogMessage(instance_info, "VUID-XrSpaceSaveInfoFB-persistenceMode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceEraseInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_ERASE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceEraseInfoFB",
                             value->type, "VUID-XrSpaceEraseInfoFB-type-type", XR_TYPE_SPACE_ERASE_INFO_FB, "XR_TYPE_SPACE_ERASE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceEraseInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceEraseInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceEraseInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceEraseInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceEraseInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceEraseInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceEraseInfoFB-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Make sure the enum type XrSpaceStorageLocationFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpaceEraseInfoFB", "location", objects_info, value->location)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceEraseInfoFB contains invalid XrSpaceStorageLocationFB \"location\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->location));
        CoreValidLogMessage(instance_info, "VUID-XrSpaceEraseInfoFB-location-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceSaveCompleteFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpaceSaveCompleteFB",
                             value->type, "VUID-XrEventDataSpaceSaveCompleteFB-type-type", XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB, "XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceSaveCompleteFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpaceSaveCompleteFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceSaveCompleteFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceSaveCompleteFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceSaveCompleteFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceSaveCompleteFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Skip checking member "space" because this struct is returned only.
    // Skip checking member "uuid" because this struct is returned only.
    // Skip checking member "location" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceEraseCompleteFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpaceEraseCompleteFB",
                             value->type, "VUID-XrEventDataSpaceEraseCompleteFB-type-type", XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB, "XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceEraseCompleteFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpaceEraseCompleteFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceEraseCompleteFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceEraseCompleteFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceEraseCompleteFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceEraseCompleteFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Skip checking member "space" because this struct is returned only.
    // Skip checking member "uuid" because this struct is returned only.
    // Skip checking member "location" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainImageFoveationVulkanFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainImageFoveationVulkanFB",
                             value->type, "VUID-XrSwapchainImageFoveationVulkanFB-type-type", XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB, "XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageFoveationVulkanFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainImageFoveationVulkanFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageFoveationVulkanFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageFoveationVulkanFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainImageFoveationVulkanFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainImageFoveationVulkanFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "image" because this struct is returned only.
    // Skip checking member "width" because this struct is returned only.
    // Skip checking member "height" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateAndroidSurfaceDimensionsFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainStateAndroidSurfaceDimensionsFB",
                             value->type, "VUID-XrSwapchainStateAndroidSurfaceDimensionsFB-type-type", XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB, "XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateAndroidSurfaceDimensionsFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainStateAndroidSurfaceDimensionsFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainStateAndroidSurfaceDimensionsFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateAndroidSurfaceDimensionsFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainStateAndroidSurfaceDimensionsFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateAndroidSurfaceDimensionsFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateSamplerOpenGLESFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainStateSamplerOpenGLESFB",
                             value->type, "VUID-XrSwapchainStateSamplerOpenGLESFB-type-type", XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB, "XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateSamplerOpenGLESFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainStateSamplerOpenGLESFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainStateSamplerOpenGLESFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateSamplerOpenGLESFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainStateSamplerOpenGLESFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateSamplerOpenGLESFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSwapchainStateSamplerVulkanFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSwapchainStateSamplerVulkanFB",
                             value->type, "VUID-XrSwapchainStateSamplerVulkanFB-type-type", XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB, "XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateSamplerVulkanFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSwapchainStateSamplerVulkanFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSwapchainStateSamplerVulkanFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateSamplerVulkanFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSwapchainStateSamplerVulkanFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSwapchainStateSamplerVulkanFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceShareInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_SHARE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceShareInfoFB",
                             value->type, "VUID-XrSpaceShareInfoFB-type-type", XR_TYPE_SPACE_SHARE_INFO_FB, "XR_TYPE_SPACE_SHARE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceShareInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceShareInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceShareInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceShareInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceShareInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceShareInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->spaceCount && nullptr != value->spaces) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceShareInfoFB-spaceCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceShareInfoFB member spaceCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->spaces && 0 != value->spaceCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceShareInfoFB-spaces-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpaceShareInfoFB contains invalid NULL for XrSpace \"spaces\" is which not "
                            "optional since \"spaceCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->spaces) {
        for (uint32_t value_spaces_inc = 0; value_spaces_inc < value->spaceCount; ++value_spaces_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->spaces[value_spaces_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSpace handle \"spaces\" ";
                    oss << HandleToHexString(value->spaces[value_spaces_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSpaceShareInfoFB-spaces-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Non-optional array length must be non-zero
    if (0 >= value->userCount && nullptr != value->users) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceShareInfoFB-userCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceShareInfoFB member userCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->users && 0 != value->userCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceShareInfoFB-users-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpaceShareInfoFB contains invalid NULL for XrSpaceUserFB \"users\" is which not "
                            "optional since \"userCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->users) {
        for (uint32_t value_users_inc = 0; value_users_inc < value->userCount; ++value_users_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpaceUserFBHandle(&value->users[value_users_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSpaceUserFB handle \"users\" ";
                    oss << HandleToHexString(value->users[value_users_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSpaceShareInfoFB-users-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceShareCompleteFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpaceShareCompleteFB",
                             value->type, "VUID-XrEventDataSpaceShareCompleteFB-type-type", XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB, "XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceShareCompleteFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpaceShareCompleteFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceShareCompleteFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceShareCompleteFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceShareCompleteFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceShareCompleteFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerSpaceWarpInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerSpaceWarpInfoFB",
                             value->type, "VUID-XrCompositionLayerSpaceWarpInfoFB-type-type", XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB, "XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSpaceWarpInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerSpaceWarpInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerSpaceWarpInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSpaceWarpInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerSpaceWarpInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSpaceWarpInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_space_warp_info_flags_fb_result = ValidateXrCompositionLayerSpaceWarpInfoFlagsFB(value->layerFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == composition_layer_space_warp_info_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerSpaceWarpInfoFB invalid member XrCompositionLayerSpaceWarpInfoFlagsFB \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSpaceWarpInfoFB-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->motionVectorSubImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSpaceWarpInfoFB-motionVectorSubImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerSpaceWarpInfoFB member motionVectorSubImage is invalid");
        return xr_result;
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->depthSubImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSpaceWarpInfoFB-depthSubImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerSpaceWarpInfoFB member depthSubImage is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpaceWarpPropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpaceWarpPropertiesFB",
                             value->type, "VUID-XrSystemSpaceWarpPropertiesFB-type-type", XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB, "XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpaceWarpPropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpaceWarpPropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpaceWarpPropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpaceWarpPropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpaceWarpPropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpaceWarpPropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "recommendedMotionVectorImageRectWidth" because this struct is returned only.
    // Skip checking member "recommendedMotionVectorImageRectHeight" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticAmplitudeEnvelopeVibrationFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHapticAmplitudeEnvelopeVibrationFB",
                             value->type, "VUID-XrHapticAmplitudeEnvelopeVibrationFB-type-type", XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB, "XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHapticAmplitudeEnvelopeVibrationFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHapticAmplitudeEnvelopeVibrationFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHapticAmplitudeEnvelopeVibrationFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticAmplitudeEnvelopeVibrationFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHapticAmplitudeEnvelopeVibrationFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticAmplitudeEnvelopeVibrationFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->amplitudeCount && nullptr != value->amplitudes) {
        CoreValidLogMessage(instance_info, "VUID-XrHapticAmplitudeEnvelopeVibrationFB-amplitudeCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHapticAmplitudeEnvelopeVibrationFB member amplitudeCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->amplitudes && 0 != value->amplitudeCount) {
        CoreValidLogMessage(instance_info, "VUID-XrHapticAmplitudeEnvelopeVibrationFB-amplitudes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrHapticAmplitudeEnvelopeVibrationFB contains invalid NULL for float \"amplitudes\" is which not "
                            "optional since \"amplitudeCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHapticAmplitudeEnvelopeVibrationFB-amplitudes-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrOffset3DfFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRect3DfFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSemanticLabelsFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SEMANTIC_LABELS_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSemanticLabelsFB",
                             value->type, "VUID-XrSemanticLabelsFB-type-type", XR_TYPE_SEMANTIC_LABELS_FB, "XR_TYPE_SEMANTIC_LABELS_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSemanticLabelsFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSemanticLabelsFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSemanticLabelsFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSemanticLabelsFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSemanticLabelsFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSemanticLabelsFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->bufferCapacityInput is non-zero
    if (0 != value->bufferCapacityInput && nullptr == value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrSemanticLabelsFB-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSemanticLabelsFB member bufferCapacityInput is NULL, but value->bufferCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSemanticLabelsFB-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRoomLayoutFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ROOM_LAYOUT_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRoomLayoutFB",
                             value->type, "VUID-XrRoomLayoutFB-type-type", XR_TYPE_ROOM_LAYOUT_FB, "XR_TYPE_ROOM_LAYOUT_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRoomLayoutFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRoomLayoutFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRoomLayoutFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRoomLayoutFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRoomLayoutFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRoomLayoutFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->wallUuidCapacityInput is non-zero
    if (0 != value->wallUuidCapacityInput && nullptr == value->wallUuids) {
        CoreValidLogMessage(instance_info, "VUID-XrRoomLayoutFB-wallUuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRoomLayoutFB member wallUuidCapacityInput is NULL, but value->wallUuidCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrRoomLayoutFB-wallUuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBoundary2DFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BOUNDARY_2D_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBoundary2DFB",
                             value->type, "VUID-XrBoundary2DFB-type-type", XR_TYPE_BOUNDARY_2D_FB, "XR_TYPE_BOUNDARY_2D_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBoundary2DFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBoundary2DFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBoundary2DFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBoundary2DFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBoundary2DFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBoundary2DFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrBoundary2DFB-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrBoundary2DFB member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrBoundary2DFB-vertices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSemanticLabelsSupportInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSemanticLabelsSupportInfoFB",
                             value->type, "VUID-XrSemanticLabelsSupportInfoFB-type-type", XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB, "XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSemanticLabelsSupportInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSemanticLabelsSupportInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSemanticLabelsSupportInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSemanticLabelsSupportInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSemanticLabelsSupportInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSemanticLabelsSupportInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult semantic_labels_support_flags_fb_result = ValidateXrSemanticLabelsSupportFlagsFB(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == semantic_labels_support_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSemanticLabelsSupportInfoFB invalid member XrSemanticLabelsSupportFlagsFB \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSemanticLabelsSupportInfoFB-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->recognizedLabels) {
        CoreValidLogMessage(instance_info, "VUID-XrSemanticLabelsSupportInfoFB-recognizedLabels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSemanticLabelsSupportInfoFB contains invalid NULL for char \"recognizedLabels\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSemanticLabelsSupportInfoFB-recognizedLabels-parameter" null-termination
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDigitalLensControlALMALENCE* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrDigitalLensControlALMALENCE",
                             value->type, "VUID-XrDigitalLensControlALMALENCE-type-type", XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE, "XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrDigitalLensControlALMALENCE-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrDigitalLensControlALMALENCE struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrDigitalLensControlALMALENCE : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDigitalLensControlALMALENCE-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrDigitalLensControlALMALENCE : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDigitalLensControlALMALENCE-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult digital_lens_control_flags_almalence_result = ValidateXrDigitalLensControlFlagsALMALENCE(value->flags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == digital_lens_control_flags_almalence_result) {
        CoreValidLogMessage(instance_info, "VUID-XrDigitalLensControlALMALENCE-flags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrDigitalLensControlFlagsALMALENCE \"flags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != digital_lens_control_flags_almalence_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrDigitalLensControlALMALENCE invalid member XrDigitalLensControlFlagsALMALENCE \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrDigitalLensControlALMALENCE-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSceneCaptureCompleteFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSceneCaptureCompleteFB",
                             value->type, "VUID-XrEventDataSceneCaptureCompleteFB-type-type", XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB, "XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSceneCaptureCompleteFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSceneCaptureCompleteFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSceneCaptureCompleteFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSceneCaptureCompleteFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSceneCaptureCompleteFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSceneCaptureCompleteFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneCaptureRequestInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneCaptureRequestInfoFB",
                             value->type, "VUID-XrSceneCaptureRequestInfoFB-type-type", XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB, "XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneCaptureRequestInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneCaptureRequestInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneCaptureRequestInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneCaptureRequestInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneCaptureRequestInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneCaptureRequestInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->requestByteCount is non-zero
    if (0 != value->requestByteCount && nullptr == value->request) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneCaptureRequestInfoFB-request-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneCaptureRequestInfoFB member requestByteCount is NULL, but value->requestByteCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneCaptureRequestInfoFB-request-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceContainerFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_CONTAINER_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceContainerFB",
                             value->type, "VUID-XrSpaceContainerFB-type-type", XR_TYPE_SPACE_CONTAINER_FB, "XR_TYPE_SPACE_CONTAINER_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceContainerFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceContainerFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceContainerFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceContainerFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceContainerFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceContainerFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->uuidCapacityInput is non-zero
    if (0 != value->uuidCapacityInput && nullptr == value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceContainerFB-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceContainerFB member uuidCapacityInput is NULL, but value->uuidCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpaceContainerFB-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationEyeTrackedProfileCreateInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFoveationEyeTrackedProfileCreateInfoMETA",
                             value->type, "VUID-XrFoveationEyeTrackedProfileCreateInfoMETA-type-type", XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META, "XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFoveationEyeTrackedProfileCreateInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFoveationEyeTrackedProfileCreateInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFoveationEyeTrackedProfileCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationEyeTrackedProfileCreateInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFoveationEyeTrackedProfileCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationEyeTrackedProfileCreateInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult foveation_eye_tracked_profile_create_flags_meta_result = ValidateXrFoveationEyeTrackedProfileCreateFlagsMETA(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == foveation_eye_tracked_profile_create_flags_meta_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrFoveationEyeTrackedProfileCreateInfoMETA invalid member XrFoveationEyeTrackedProfileCreateFlagsMETA \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrFoveationEyeTrackedProfileCreateInfoMETA-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationEyeTrackedStateMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFoveationEyeTrackedStateMETA",
                             value->type, "VUID-XrFoveationEyeTrackedStateMETA-type-type", XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META, "XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFoveationEyeTrackedStateMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFoveationEyeTrackedStateMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFoveationEyeTrackedStateMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationEyeTrackedStateMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFoveationEyeTrackedStateMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationEyeTrackedStateMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "foveationCenter" because this struct is returned only.
    // Skip checking member "flags" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFoveationEyeTrackedPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemFoveationEyeTrackedPropertiesMETA",
                             value->type, "VUID-XrSystemFoveationEyeTrackedPropertiesMETA-type-type", XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META, "XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemFoveationEyeTrackedPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemFoveationEyeTrackedPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemFoveationEyeTrackedPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFoveationEyeTrackedPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemFoveationEyeTrackedPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFoveationEyeTrackedPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsFoveationEyeTracked" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFaceTrackingPropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemFaceTrackingPropertiesFB",
                             value->type, "VUID-XrSystemFaceTrackingPropertiesFB-type-type", XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB, "XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingPropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemFaceTrackingPropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemFaceTrackingPropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingPropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemFaceTrackingPropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingPropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsFaceTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackerCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_TRACKER_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceTrackerCreateInfoFB",
                             value->type, "VUID-XrFaceTrackerCreateInfoFB-type-type", XR_TYPE_FACE_TRACKER_CREATE_INFO_FB, "XR_TYPE_FACE_TRACKER_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceTrackerCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackerCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackerCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrFaceExpressionSetFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFaceTrackerCreateInfoFB", "faceExpressionSet", objects_info, value->faceExpressionSet)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFaceTrackerCreateInfoFB contains invalid XrFaceExpressionSetFB \"faceExpressionSet\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->faceExpressionSet));
        CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoFB-faceExpressionSet-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_EXPRESSION_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceExpressionInfoFB",
                             value->type, "VUID-XrFaceExpressionInfoFB-type-type", XR_TYPE_FACE_EXPRESSION_INFO_FB, "XR_TYPE_FACE_EXPRESSION_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceExpressionInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceExpressionInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceExpressionInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionStatusFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionWeightsFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceExpressionWeightsFB",
                             value->type, "VUID-XrFaceExpressionWeightsFB-type-type", XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB, "XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeightsFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceExpressionWeightsFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceExpressionWeightsFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeightsFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceExpressionWeightsFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeightsFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->weightCount && nullptr != value->weights) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeightsFB-weightCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFaceExpressionWeightsFB member weightCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->weights && 0 != value->weightCount) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeightsFB-weights-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrFaceExpressionWeightsFB contains invalid NULL for float \"weights\" is which not "
                            "optional since \"weightCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrFaceExpressionWeightsFB-weights-parameter" type
    // Non-optional array length must be non-zero
    if (0 >= value->confidenceCount && nullptr != value->confidences) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeightsFB-confidenceCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFaceExpressionWeightsFB member confidenceCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->confidences && 0 != value->confidenceCount) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeightsFB-confidences-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrFaceExpressionWeightsFB contains invalid NULL for float \"confidences\" is which not "
                            "optional since \"confidenceCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrFaceExpressionWeightsFB-confidences-parameter" type
    // Validate that the structure XrFaceExpressionStatusFB is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->status);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeightsFB-status-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFaceExpressionWeightsFB member status is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeGazeFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeTrackerCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EYE_TRACKER_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEyeTrackerCreateInfoFB",
                             value->type, "VUID-XrEyeTrackerCreateInfoFB-type-type", XR_TYPE_EYE_TRACKER_CREATE_INFO_FB, "XR_TYPE_EYE_TRACKER_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEyeTrackerCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEyeTrackerCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEyeTrackerCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeTrackerCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEyeTrackerCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeTrackerCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeGazesInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EYE_GAZES_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEyeGazesInfoFB",
                             value->type, "VUID-XrEyeGazesInfoFB-type-type", XR_TYPE_EYE_GAZES_INFO_FB, "XR_TYPE_EYE_GAZES_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazesInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEyeGazesInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEyeGazesInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazesInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEyeGazesInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazesInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazesInfoFB-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEyeTrackingPropertiesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemEyeTrackingPropertiesFB",
                             value->type, "VUID-XrSystemEyeTrackingPropertiesFB-type-type", XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB, "XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemEyeTrackingPropertiesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemEyeTrackingPropertiesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemEyeTrackingPropertiesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEyeTrackingPropertiesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemEyeTrackingPropertiesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEyeTrackingPropertiesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsEyeTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeGazesFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EYE_GAZES_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEyeGazesFB",
                             value->type, "VUID-XrEyeGazesFB-type-type", XR_TYPE_EYE_GAZES_FB, "XR_TYPE_EYE_GAZES_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazesFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEyeGazesFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEyeGazesFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazesFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEyeGazesFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazesFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    for (uint32_t value_gaze_inc = 0; value_gaze_inc < XR_EYE_POSITION_COUNT_FB; ++value_gaze_inc) {
        // Validate that the structure XrEyeGazeFB is valid
        xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                         check_members, true, &value->gaze[value_gaze_inc]);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEyeGazesFB-gaze-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrEyeGazesFB member gaze is invalid");
            return xr_result;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughKeyboardHandsIntensityFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughKeyboardHandsIntensityFB",
                             value->type, "VUID-XrPassthroughKeyboardHandsIntensityFB-type-type", XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB, "XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughKeyboardHandsIntensityFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughKeyboardHandsIntensityFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughKeyboardHandsIntensityFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughKeyboardHandsIntensityFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughKeyboardHandsIntensityFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughKeyboardHandsIntensityFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerSettingsFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerSettingsFB",
                             value->type, "VUID-XrCompositionLayerSettingsFB-type-type", XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB, "XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSettingsFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerSettingsFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerSettingsFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSettingsFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerSettingsFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSettingsFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_settings_flags_fb_result = ValidateXrCompositionLayerSettingsFlagsFB(value->layerFlags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == composition_layer_settings_flags_fb_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSettingsFB-layerFlags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrCompositionLayerSettingsFlagsFB \"layerFlags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != composition_layer_settings_flags_fb_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerSettingsFB invalid member XrCompositionLayerSettingsFlagsFB \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerSettingsFB-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticPcmVibrationFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAPTIC_PCM_VIBRATION_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHapticPcmVibrationFB",
                             value->type, "VUID-XrHapticPcmVibrationFB-type-type", XR_TYPE_HAPTIC_PCM_VIBRATION_FB, "XR_TYPE_HAPTIC_PCM_VIBRATION_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHapticPcmVibrationFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHapticPcmVibrationFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHapticPcmVibrationFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticPcmVibrationFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHapticPcmVibrationFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticPcmVibrationFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->bufferSize && nullptr != value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrHapticPcmVibrationFB-bufferSize-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHapticPcmVibrationFB member bufferSize is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->buffer && 0 != value->bufferSize) {
        CoreValidLogMessage(instance_info, "VUID-XrHapticPcmVibrationFB-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrHapticPcmVibrationFB contains invalid NULL for float \"buffer\" is which not "
                            "optional since \"bufferSize\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHapticPcmVibrationFB-buffer-parameter" type
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->samplesConsumed) {
        CoreValidLogMessage(instance_info, "VUID-XrHapticPcmVibrationFB-samplesConsumed-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrHapticPcmVibrationFB contains invalid NULL for uint32_t \"samplesConsumed\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrHapticPcmVibrationFB-samplesConsumed-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDevicePcmSampleRateStateFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrDevicePcmSampleRateStateFB",
                             value->type, "VUID-XrDevicePcmSampleRateStateFB-type-type", XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB, "XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrDevicePcmSampleRateStateFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrDevicePcmSampleRateStateFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrDevicePcmSampleRateStateFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDevicePcmSampleRateStateFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrDevicePcmSampleRateStateFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDevicePcmSampleRateStateFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameSynthesisInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FRAME_SYNTHESIS_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFrameSynthesisInfoEXT",
                             value->type, "VUID-XrFrameSynthesisInfoEXT-type-type", XR_TYPE_FRAME_SYNTHESIS_INFO_EXT, "XR_TYPE_FRAME_SYNTHESIS_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFrameSynthesisInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFrameSynthesisInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFrameSynthesisInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameSynthesisInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFrameSynthesisInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameSynthesisInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult frame_synthesis_info_flags_ext_result = ValidateXrFrameSynthesisInfoFlagsEXT(value->layerFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == frame_synthesis_info_flags_ext_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrFrameSynthesisInfoEXT invalid member XrFrameSynthesisInfoFlagsEXT \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrFrameSynthesisInfoEXT-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->motionVectorSubImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrFrameSynthesisInfoEXT-motionVectorSubImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFrameSynthesisInfoEXT member motionVectorSubImage is invalid");
        return xr_result;
    }
    // Validate that the structure XrSwapchainSubImage is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->depthSubImage);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrFrameSynthesisInfoEXT-depthSubImage-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFrameSynthesisInfoEXT member depthSubImage is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFrameSynthesisConfigViewEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFrameSynthesisConfigViewEXT",
                             value->type, "VUID-XrFrameSynthesisConfigViewEXT-type-type", XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT, "XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFrameSynthesisConfigViewEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFrameSynthesisConfigViewEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFrameSynthesisConfigViewEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameSynthesisConfigViewEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFrameSynthesisConfigViewEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFrameSynthesisConfigViewEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerDepthTestFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerDepthTestFB",
                             value->type, "VUID-XrCompositionLayerDepthTestFB-type-type", XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB, "XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthTestFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerDepthTestFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerDepthTestFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthTestFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerDepthTestFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthTestFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrCompareOpFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCompositionLayerDepthTestFB", "compareOp", objects_info, value->compareOp)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerDepthTestFB contains invalid XrCompareOpFB \"compareOp\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->compareOp));
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerDepthTestFB-compareOp-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLocalDimmingFrameEndInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLocalDimmingFrameEndInfoMETA",
                             value->type, "VUID-XrLocalDimmingFrameEndInfoMETA-type-type", XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META, "XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLocalDimmingFrameEndInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLocalDimmingFrameEndInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLocalDimmingFrameEndInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLocalDimmingFrameEndInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLocalDimmingFrameEndInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLocalDimmingFrameEndInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrLocalDimmingModeMETA value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrLocalDimmingFrameEndInfoMETA", "localDimmingMode", objects_info, value->localDimmingMode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrLocalDimmingFrameEndInfoMETA contains invalid XrLocalDimmingModeMETA \"localDimmingMode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->localDimmingMode));
        CoreValidLogMessage(instance_info, "VUID-XrLocalDimmingFrameEndInfoMETA-localDimmingMode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughPreferencesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_PREFERENCES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughPreferencesMETA",
                             value->type, "VUID-XrPassthroughPreferencesMETA-type-type", XR_TYPE_PASSTHROUGH_PREFERENCES_META, "XR_TYPE_PASSTHROUGH_PREFERENCES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughPreferencesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughPreferencesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughPreferencesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughPreferencesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughPreferencesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughPreferencesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "flags" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemVirtualKeyboardPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemVirtualKeyboardPropertiesMETA",
                             value->type, "VUID-XrSystemVirtualKeyboardPropertiesMETA-type-type", XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META, "XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemVirtualKeyboardPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemVirtualKeyboardPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemVirtualKeyboardPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemVirtualKeyboardPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemVirtualKeyboardPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemVirtualKeyboardPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsVirtualKeyboard" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardCreateInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVirtualKeyboardCreateInfoMETA",
                             value->type, "VUID-XrVirtualKeyboardCreateInfoMETA-type-type", XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META, "XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardCreateInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVirtualKeyboardCreateInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardCreateInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardCreateInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardSpaceCreateInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVirtualKeyboardSpaceCreateInfoMETA",
                             value->type, "VUID-XrVirtualKeyboardSpaceCreateInfoMETA-type-type", XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META, "XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardSpaceCreateInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVirtualKeyboardSpaceCreateInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardSpaceCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardSpaceCreateInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardSpaceCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardSpaceCreateInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrVirtualKeyboardLocationTypeMETA value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrVirtualKeyboardSpaceCreateInfoMETA", "locationType", objects_info, value->locationType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrVirtualKeyboardSpaceCreateInfoMETA contains invalid XrVirtualKeyboardLocationTypeMETA \"locationType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->locationType));
        CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardSpaceCreateInfoMETA-locationType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardSpaceCreateInfoMETA-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardLocationInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVirtualKeyboardLocationInfoMETA",
                             value->type, "VUID-XrVirtualKeyboardLocationInfoMETA-type-type", XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META, "XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardLocationInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVirtualKeyboardLocationInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardLocationInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardLocationInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardLocationInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardLocationInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrVirtualKeyboardLocationTypeMETA value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrVirtualKeyboardLocationInfoMETA", "locationType", objects_info, value->locationType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrVirtualKeyboardLocationInfoMETA contains invalid XrVirtualKeyboardLocationTypeMETA \"locationType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->locationType));
        CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardLocationInfoMETA-locationType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardLocationInfoMETA-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardModelVisibilitySetInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVirtualKeyboardModelVisibilitySetInfoMETA",
                             value->type, "VUID-XrVirtualKeyboardModelVisibilitySetInfoMETA-type-type", XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META, "XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardModelVisibilitySetInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVirtualKeyboardModelVisibilitySetInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardModelVisibilitySetInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardModelVisibilitySetInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardModelVisibilitySetInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardModelVisibilitySetInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardAnimationStateMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVirtualKeyboardAnimationStateMETA",
                             value->type, "VUID-XrVirtualKeyboardAnimationStateMETA-type-type", XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META, "XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardAnimationStateMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVirtualKeyboardAnimationStateMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardAnimationStateMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardAnimationStateMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardAnimationStateMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardAnimationStateMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardModelAnimationStatesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVirtualKeyboardModelAnimationStatesMETA",
                             value->type, "VUID-XrVirtualKeyboardModelAnimationStatesMETA-type-type", XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META, "XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardModelAnimationStatesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVirtualKeyboardModelAnimationStatesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardModelAnimationStatesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardModelAnimationStatesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardModelAnimationStatesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardModelAnimationStatesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->stateCapacityInput is non-zero
    if (0 != value->stateCapacityInput && nullptr == value->states) {
        CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardModelAnimationStatesMETA-states-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrVirtualKeyboardModelAnimationStatesMETA member stateCapacityInput is NULL, but value->stateCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->states) {
        for (uint32_t value_states_inc = 0; value_states_inc < value->stateCapacityInput; ++value_states_inc) {
            // Validate that the structure XrVirtualKeyboardAnimationStateMETA is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->states[value_states_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardModelAnimationStatesMETA-states-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrVirtualKeyboardModelAnimationStatesMETA member states is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardTextureDataMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVirtualKeyboardTextureDataMETA",
                             value->type, "VUID-XrVirtualKeyboardTextureDataMETA-type-type", XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META, "XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardTextureDataMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVirtualKeyboardTextureDataMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardTextureDataMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardTextureDataMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardTextureDataMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardTextureDataMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->bufferCapacityInput is non-zero
    if (0 != value->bufferCapacityInput && nullptr == value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardTextureDataMETA-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrVirtualKeyboardTextureDataMETA member bufferCapacityInput is NULL, but value->bufferCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrVirtualKeyboardTextureDataMETA-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardInputInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVirtualKeyboardInputInfoMETA",
                             value->type, "VUID-XrVirtualKeyboardInputInfoMETA-type-type", XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META, "XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardInputInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVirtualKeyboardInputInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardInputInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardInputInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardInputInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardInputInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrVirtualKeyboardInputSourceMETA value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrVirtualKeyboardInputInfoMETA", "inputSource", objects_info, value->inputSource)) {
        std::ostringstream oss_enum;
        oss_enum << "XrVirtualKeyboardInputInfoMETA contains invalid XrVirtualKeyboardInputSourceMETA \"inputSource\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->inputSource));
        CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardInputInfoMETA-inputSource-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->inputSpace);
        if (handle_result == VALIDATE_XR_HANDLE_INVALID) {
            // Not a valid handle
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"inputSpace\" ";
            oss << HandleToHexString(value->inputSpace);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardInputInfoMETA-inputSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    ValidateXrFlagsResult virtual_keyboard_input_state_flags_meta_result = ValidateXrVirtualKeyboardInputStateFlagsMETA(value->inputState);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == virtual_keyboard_input_state_flags_meta_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrVirtualKeyboardInputInfoMETA invalid member XrVirtualKeyboardInputStateFlagsMETA \"inputState\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->inputState));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardInputInfoMETA-inputState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVirtualKeyboardTextContextChangeInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVirtualKeyboardTextContextChangeInfoMETA",
                             value->type, "VUID-XrVirtualKeyboardTextContextChangeInfoMETA-type-type", XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META, "XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardTextContextChangeInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVirtualKeyboardTextContextChangeInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardTextContextChangeInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardTextContextChangeInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVirtualKeyboardTextContextChangeInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardTextContextChangeInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->textContext) {
        CoreValidLogMessage(instance_info, "VUID-XrVirtualKeyboardTextContextChangeInfoMETA-textContext-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrVirtualKeyboardTextContextChangeInfoMETA contains invalid NULL for char \"textContext\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrVirtualKeyboardTextContextChangeInfoMETA-textContext-parameter" null-termination
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardCommitTextMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataVirtualKeyboardCommitTextMETA",
                             value->type, "VUID-XrEventDataVirtualKeyboardCommitTextMETA-type-type", XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META, "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardCommitTextMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataVirtualKeyboardCommitTextMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardCommitTextMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardCommitTextMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardCommitTextMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardCommitTextMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "keyboard" because this struct is returned only.
    // Skip checking member "text" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardBackspaceMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataVirtualKeyboardBackspaceMETA",
                             value->type, "VUID-XrEventDataVirtualKeyboardBackspaceMETA-type-type", XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META, "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardBackspaceMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataVirtualKeyboardBackspaceMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardBackspaceMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardBackspaceMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardBackspaceMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardBackspaceMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "keyboard" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardEnterMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataVirtualKeyboardEnterMETA",
                             value->type, "VUID-XrEventDataVirtualKeyboardEnterMETA-type-type", XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META, "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardEnterMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataVirtualKeyboardEnterMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardEnterMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardEnterMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardEnterMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardEnterMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "keyboard" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardShownMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataVirtualKeyboardShownMETA",
                             value->type, "VUID-XrEventDataVirtualKeyboardShownMETA-type-type", XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META, "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardShownMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataVirtualKeyboardShownMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardShownMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardShownMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardShownMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardShownMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "keyboard" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataVirtualKeyboardHiddenMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataVirtualKeyboardHiddenMETA",
                             value->type, "VUID-XrEventDataVirtualKeyboardHiddenMETA-type-type", XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META, "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardHiddenMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataVirtualKeyboardHiddenMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardHiddenMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardHiddenMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataVirtualKeyboardHiddenMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataVirtualKeyboardHiddenMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "keyboard" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExternalCameraIntrinsicsOCULUS* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExternalCameraExtrinsicsOCULUS* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult external_camera_status_flags_oculus_result = ValidateXrExternalCameraStatusFlagsOCULUS(value->cameraStatusFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == external_camera_status_flags_oculus_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrExternalCameraExtrinsicsOCULUS invalid member XrExternalCameraStatusFlagsOCULUS \"cameraStatusFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->cameraStatusFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrExternalCameraExtrinsicsOCULUS-cameraStatusFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Make sure the enum type XrExternalCameraAttachedToDeviceOCULUS value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrExternalCameraExtrinsicsOCULUS", "attachedToDevice", objects_info, value->attachedToDevice)) {
        std::ostringstream oss_enum;
        oss_enum << "XrExternalCameraExtrinsicsOCULUS contains invalid XrExternalCameraAttachedToDeviceOCULUS \"attachedToDevice\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->attachedToDevice));
        CoreValidLogMessage(instance_info, "VUID-XrExternalCameraExtrinsicsOCULUS-attachedToDevice-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExternalCameraOCULUS* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EXTERNAL_CAMERA_OCULUS) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrExternalCameraOCULUS",
                             value->type, "VUID-XrExternalCameraOCULUS-type-type", XR_TYPE_EXTERNAL_CAMERA_OCULUS, "XR_TYPE_EXTERNAL_CAMERA_OCULUS");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrExternalCameraOCULUS-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrExternalCameraOCULUS struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrExternalCameraOCULUS : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrExternalCameraOCULUS-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrExternalCameraOCULUS : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrExternalCameraOCULUS-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "name" because this struct is returned only.
    // Skip checking member "intrinsics" because this struct is returned only.
    // Skip checking member "extrinsics" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrVulkanSwapchainCreateInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrVulkanSwapchainCreateInfoMETA",
                             value->type, "VUID-XrVulkanSwapchainCreateInfoMETA-type-type", XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META, "XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrVulkanSwapchainCreateInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrVulkanSwapchainCreateInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrVulkanSwapchainCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanSwapchainCreateInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrVulkanSwapchainCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrVulkanSwapchainCreateInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPerformanceMetricsStateMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PERFORMANCE_METRICS_STATE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPerformanceMetricsStateMETA",
                             value->type, "VUID-XrPerformanceMetricsStateMETA-type-type", XR_TYPE_PERFORMANCE_METRICS_STATE_META, "XR_TYPE_PERFORMANCE_METRICS_STATE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsStateMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPerformanceMetricsStateMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPerformanceMetricsStateMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsStateMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPerformanceMetricsStateMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsStateMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPerformanceMetricsCounterMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PERFORMANCE_METRICS_COUNTER_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPerformanceMetricsCounterMETA",
                             value->type, "VUID-XrPerformanceMetricsCounterMETA-type-type", XR_TYPE_PERFORMANCE_METRICS_COUNTER_META, "XR_TYPE_PERFORMANCE_METRICS_COUNTER_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsCounterMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPerformanceMetricsCounterMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPerformanceMetricsCounterMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsCounterMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPerformanceMetricsCounterMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsCounterMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult performance_metrics_counter_flags_meta_result = ValidateXrPerformanceMetricsCounterFlagsMETA(value->counterFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == performance_metrics_counter_flags_meta_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrPerformanceMetricsCounterMETA invalid member XrPerformanceMetricsCounterFlagsMETA \"counterFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->counterFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsCounterMETA-counterFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Make sure the enum type XrPerformanceMetricsCounterUnitMETA value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrPerformanceMetricsCounterMETA", "counterUnit", objects_info, value->counterUnit)) {
        std::ostringstream oss_enum;
        oss_enum << "XrPerformanceMetricsCounterMETA contains invalid XrPerformanceMetricsCounterUnitMETA \"counterUnit\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->counterUnit));
        CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsCounterMETA-counterUnit-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceListSaveInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_LIST_SAVE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceListSaveInfoFB",
                             value->type, "VUID-XrSpaceListSaveInfoFB-type-type", XR_TYPE_SPACE_LIST_SAVE_INFO_FB, "XR_TYPE_SPACE_LIST_SAVE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceListSaveInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceListSaveInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceListSaveInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceListSaveInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceListSaveInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceListSaveInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->spaceCount && nullptr != value->spaces) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceListSaveInfoFB-spaceCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceListSaveInfoFB member spaceCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->spaces && 0 != value->spaceCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceListSaveInfoFB-spaces-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpaceListSaveInfoFB contains invalid NULL for XrSpace \"spaces\" is which not "
                            "optional since \"spaceCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->spaces) {
        for (uint32_t value_spaces_inc = 0; value_spaces_inc < value->spaceCount; ++value_spaces_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->spaces[value_spaces_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSpace handle \"spaces\" ";
                    oss << HandleToHexString(value->spaces[value_spaces_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSpaceListSaveInfoFB-spaces-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Make sure the enum type XrSpaceStorageLocationFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpaceListSaveInfoFB", "location", objects_info, value->location)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceListSaveInfoFB contains invalid XrSpaceStorageLocationFB \"location\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->location));
        CoreValidLogMessage(instance_info, "VUID-XrSpaceListSaveInfoFB-location-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceListSaveCompleteFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpaceListSaveCompleteFB",
                             value->type, "VUID-XrEventDataSpaceListSaveCompleteFB-type-type", XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB, "XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceListSaveCompleteFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpaceListSaveCompleteFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceListSaveCompleteFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceListSaveCompleteFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceListSaveCompleteFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceListSaveCompleteFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceUserCreateInfoFB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_USER_CREATE_INFO_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceUserCreateInfoFB",
                             value->type, "VUID-XrSpaceUserCreateInfoFB-type-type", XR_TYPE_SPACE_USER_CREATE_INFO_FB, "XR_TYPE_SPACE_USER_CREATE_INFO_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceUserCreateInfoFB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceUserCreateInfoFB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceUserCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceUserCreateInfoFB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceUserCreateInfoFB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceUserCreateInfoFB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemHeadsetIdPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemHeadsetIdPropertiesMETA",
                             value->type, "VUID-XrSystemHeadsetIdPropertiesMETA-type-type", XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META, "XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemHeadsetIdPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemHeadsetIdPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemHeadsetIdPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemHeadsetIdPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemHeadsetIdPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemHeadsetIdPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "id" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpaceDiscoveryPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPACE_DISCOVERY_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpaceDiscoveryPropertiesMETA",
                             value->type, "VUID-XrSystemSpaceDiscoveryPropertiesMETA-type-type", XR_TYPE_SYSTEM_SPACE_DISCOVERY_PROPERTIES_META, "XR_TYPE_SYSTEM_SPACE_DISCOVERY_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpaceDiscoveryPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpaceDiscoveryPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpaceDiscoveryPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpaceDiscoveryPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpaceDiscoveryPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpaceDiscoveryPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpaceDiscovery" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceFilterBaseHeaderMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrSpaceFilterBaseHeaderMETA-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpaceFilterBaseHeaderMETA-next-next" because it is a base structure
    if (value->type == XR_TYPE_SPACE_FILTER_UUID_META) {
        const XrSpaceFilterUuidMETA* new_value = reinterpret_cast<const XrSpaceFilterUuidMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
            std::string error_str = "XrSpaceFilterBaseHeaderMETA being used with child struct type ";
            error_str += "\"XR_TYPE_SPACE_FILTER_UUID_META\"";
            error_str += " which requires extension \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterBaseHeaderMETA-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPACE_FILTER_COMPONENT_META) {
        const XrSpaceFilterComponentMETA* new_value = reinterpret_cast<const XrSpaceFilterComponentMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_discovery")) {
            std::string error_str = "XrSpaceFilterBaseHeaderMETA being used with child struct type ";
            error_str += "\"XR_TYPE_SPACE_FILTER_COMPONENT_META\"";
            error_str += " which requires extension \"XR_META_spatial_entity_discovery\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterBaseHeaderMETA-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceFilterBaseHeaderMETA",
                         value->type, "VUID-XrSpaceFilterBaseHeaderMETA-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceDiscoveryInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_DISCOVERY_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceDiscoveryInfoMETA",
                             value->type, "VUID-XrSpaceDiscoveryInfoMETA-type-type", XR_TYPE_SPACE_DISCOVERY_INFO_META, "XR_TYPE_SPACE_DISCOVERY_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceDiscoveryInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceDiscoveryInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceDiscoveryInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->filterCount is non-zero
    if (0 != value->filterCount && nullptr == value->filters) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryInfoMETA-filters-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceDiscoveryInfoMETA member filterCount is NULL, but value->filterCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->filters) {
        for (uint32_t value_filters_inc = 0; value_filters_inc < value->filterCount; ++value_filters_inc) {
            if (value->filters[value_filters_inc] == nullptr) {
                std::string error_message = "Structure XrSpaceDiscoveryInfoMETA member filters";
                error_message += "[";
                error_message += std::to_string(value_filters_inc);
                error_message += "]";
                error_message += " is null";
                CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryInfoMETA-filters-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
            // Validate if XrSpaceFilterBaseHeaderMETA is a child structure of type XrSpaceFilterUuidMETA and it is valid
            {
                if (value->filters != nullptr) {
                    const XrSpaceFilterUuidMETA* const * new_spacefilteruuidmeta_value = reinterpret_cast<const XrSpaceFilterUuidMETA* const *>(value->filters);
                    if (new_spacefilteruuidmeta_value[value_filters_inc]->type == XR_TYPE_SPACE_FILTER_UUID_META) {
                        if (nullptr != new_spacefilteruuidmeta_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_spacefilteruuidmeta_value[value_filters_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrSpaceDiscoveryInfoMETA member filters";
                                error_message += "[";
                                error_message += std::to_string(value_filters_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryInfoMETA-filters-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate if XrSpaceFilterBaseHeaderMETA is a child structure of type XrSpaceFilterComponentMETA and it is valid
            {
                if (value->filters != nullptr) {
                    const XrSpaceFilterComponentMETA* const * new_spacefiltercomponentmeta_value = reinterpret_cast<const XrSpaceFilterComponentMETA* const *>(value->filters);
                    if (new_spacefiltercomponentmeta_value[value_filters_inc]->type == XR_TYPE_SPACE_FILTER_COMPONENT_META) {
                        if (nullptr != new_spacefiltercomponentmeta_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_spacefiltercomponentmeta_value[value_filters_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrSpaceDiscoveryInfoMETA member filters";
                                error_message += "[";
                                error_message += std::to_string(value_filters_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryInfoMETA-filters-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate that the base-structure XrSpaceFilterBaseHeaderMETA is valid
            if (nullptr != value->filters[value_filters_inc]) {
                xr_result = ValidateXrStruct(instance_info, command_name,
                                                                objects_info, check_members, true, value->filters[value_filters_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryInfoMETA-filters-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info,
                                        "Structure XrSpaceDiscoveryInfoMETA member filters is invalid");
                    return xr_result;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceFilterUuidMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_FILTER_UUID_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceFilterUuidMETA",
                             value->type, "VUID-XrSpaceFilterUuidMETA-type-type", XR_TYPE_SPACE_FILTER_UUID_META, "XR_TYPE_SPACE_FILTER_UUID_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterUuidMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceFilterUuidMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceFilterUuidMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterUuidMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceFilterUuidMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterUuidMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->uuidCount && nullptr != value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterUuidMETA-uuidCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceFilterUuidMETA member uuidCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->uuids && 0 != value->uuidCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterUuidMETA-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpaceFilterUuidMETA contains invalid NULL for XrUuidEXT \"uuids\" is which not "
                            "optional since \"uuidCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpaceFilterUuidMETA-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceFilterComponentMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_FILTER_COMPONENT_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceFilterComponentMETA",
                             value->type, "VUID-XrSpaceFilterComponentMETA-type-type", XR_TYPE_SPACE_FILTER_COMPONENT_META, "XR_TYPE_SPACE_FILTER_COMPONENT_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterComponentMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceFilterComponentMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceFilterComponentMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterComponentMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceFilterComponentMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterComponentMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpaceComponentTypeFB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpaceFilterComponentMETA", "componentType", objects_info, value->componentType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpaceFilterComponentMETA contains invalid XrSpaceComponentTypeFB \"componentType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentType));
        CoreValidLogMessage(instance_info, "VUID-XrSpaceFilterComponentMETA-componentType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceDiscoveryResultMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "space" because this struct is returned only.
    // Skip checking member "uuid" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceDiscoveryResultsMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_DISCOVERY_RESULTS_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceDiscoveryResultsMETA",
                             value->type, "VUID-XrSpaceDiscoveryResultsMETA-type-type", XR_TYPE_SPACE_DISCOVERY_RESULTS_META, "XR_TYPE_SPACE_DISCOVERY_RESULTS_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryResultsMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceDiscoveryResultsMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceDiscoveryResultsMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryResultsMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceDiscoveryResultsMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryResultsMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->resultCapacityInput is non-zero
    if (0 != value->resultCapacityInput && nullptr == value->results) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryResultsMETA-results-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceDiscoveryResultsMETA member resultCapacityInput is NULL, but value->resultCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->results) {
        for (uint32_t value_results_inc = 0; value_results_inc < value->resultCapacityInput; ++value_results_inc) {
            // Validate that the structure XrSpaceDiscoveryResultMETA is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->results[value_results_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpaceDiscoveryResultsMETA-results-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpaceDiscoveryResultsMETA member results is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceDiscoveryResultsAvailableMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_RESULTS_AVAILABLE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpaceDiscoveryResultsAvailableMETA",
                             value->type, "VUID-XrEventDataSpaceDiscoveryResultsAvailableMETA-type-type", XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_RESULTS_AVAILABLE_META, "XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_RESULTS_AVAILABLE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceDiscoveryResultsAvailableMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpaceDiscoveryResultsAvailableMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceDiscoveryResultsAvailableMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceDiscoveryResultsAvailableMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceDiscoveryResultsAvailableMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceDiscoveryResultsAvailableMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpaceDiscoveryCompleteMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_COMPLETE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpaceDiscoveryCompleteMETA",
                             value->type, "VUID-XrEventDataSpaceDiscoveryCompleteMETA-type-type", XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_COMPLETE_META, "XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_COMPLETE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceDiscoveryCompleteMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpaceDiscoveryCompleteMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceDiscoveryCompleteMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceDiscoveryCompleteMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpaceDiscoveryCompleteMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpaceDiscoveryCompleteMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRecommendedLayerResolutionMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRecommendedLayerResolutionMETA",
                             value->type, "VUID-XrRecommendedLayerResolutionMETA-type-type", XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_META, "XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRecommendedLayerResolutionMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRecommendedLayerResolutionMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRecommendedLayerResolutionMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "recommendedImageDimensions" because this struct is returned only.
    // Skip checking member "isValid" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRecommendedLayerResolutionGetInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_GET_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRecommendedLayerResolutionGetInfoMETA",
                             value->type, "VUID-XrRecommendedLayerResolutionGetInfoMETA-type-type", XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_GET_INFO_META, "XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_GET_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRecommendedLayerResolutionGetInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRecommendedLayerResolutionGetInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRecommendedLayerResolutionGetInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->layer) {
        CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrRecommendedLayerResolutionGetInfoMETA contains invalid NULL for XrCompositionLayerBaseHeader \"layer\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerProjection and it is valid
    {
        const XrCompositionLayerProjection* new_compositionlayerprojection_value = reinterpret_cast<const XrCompositionLayerProjection*>(value->layer);
        if (new_compositionlayerprojection_value->type == XR_TYPE_COMPOSITION_LAYER_PROJECTION) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_compositionlayerprojection_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrRecommendedLayerResolutionGetInfoMETA member layer";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerQuad and it is valid
    {
        const XrCompositionLayerQuad* new_compositionlayerquad_value = reinterpret_cast<const XrCompositionLayerQuad*>(value->layer);
        if (new_compositionlayerquad_value->type == XR_TYPE_COMPOSITION_LAYER_QUAD) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_compositionlayerquad_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrRecommendedLayerResolutionGetInfoMETA member layer";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerCubeKHR and it is valid
    {
        const XrCompositionLayerCubeKHR* new_compositionlayercubekhr_value = reinterpret_cast<const XrCompositionLayerCubeKHR*>(value->layer);
        if (new_compositionlayercubekhr_value->type == XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_compositionlayercubekhr_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrRecommendedLayerResolutionGetInfoMETA member layer";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerCylinderKHR and it is valid
    {
        const XrCompositionLayerCylinderKHR* new_compositionlayercylinderkhr_value = reinterpret_cast<const XrCompositionLayerCylinderKHR*>(value->layer);
        if (new_compositionlayercylinderkhr_value->type == XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_compositionlayercylinderkhr_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrRecommendedLayerResolutionGetInfoMETA member layer";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerEquirectKHR and it is valid
    {
        const XrCompositionLayerEquirectKHR* new_compositionlayerequirectkhr_value = reinterpret_cast<const XrCompositionLayerEquirectKHR*>(value->layer);
        if (new_compositionlayerequirectkhr_value->type == XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_compositionlayerequirectkhr_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrRecommendedLayerResolutionGetInfoMETA member layer";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerEquirect2KHR and it is valid
    {
        const XrCompositionLayerEquirect2KHR* new_compositionlayerequirect2khr_value = reinterpret_cast<const XrCompositionLayerEquirect2KHR*>(value->layer);
        if (new_compositionlayerequirect2khr_value->type == XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_compositionlayerequirect2khr_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrRecommendedLayerResolutionGetInfoMETA member layer";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerPassthroughFB and it is valid
    {
        const XrCompositionLayerPassthroughFB* new_compositionlayerpassthroughfb_value = reinterpret_cast<const XrCompositionLayerPassthroughFB*>(value->layer);
        if (new_compositionlayerpassthroughfb_value->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_compositionlayerpassthroughfb_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrRecommendedLayerResolutionGetInfoMETA member layer";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerPassthroughHTC and it is valid
    {
        const XrCompositionLayerPassthroughHTC* new_compositionlayerpassthroughhtc_value = reinterpret_cast<const XrCompositionLayerPassthroughHTC*>(value->layer);
        if (new_compositionlayerpassthroughhtc_value->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_compositionlayerpassthroughhtc_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrRecommendedLayerResolutionGetInfoMETA member layer";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate if XrCompositionLayerBaseHeader is a child structure of type XrCompositionLayerPassthroughANDROID and it is valid
    {
        const XrCompositionLayerPassthroughANDROID* new_compositionlayerpassthroughandroid_value = reinterpret_cast<const XrCompositionLayerPassthroughANDROID*>(value->layer);
        if (new_compositionlayerpassthroughandroid_value->type == XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_compositionlayerpassthroughandroid_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrRecommendedLayerResolutionGetInfoMETA member layer";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate that the base-structure XrCompositionLayerBaseHeader is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, value->layer);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrRecommendedLayerResolutionGetInfoMETA-layer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRecommendedLayerResolutionGetInfoMETA member layer is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpacePersistencePropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPACE_PERSISTENCE_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpacePersistencePropertiesMETA",
                             value->type, "VUID-XrSystemSpacePersistencePropertiesMETA-type-type", XR_TYPE_SYSTEM_SPACE_PERSISTENCE_PROPERTIES_META, "XR_TYPE_SYSTEM_SPACE_PERSISTENCE_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpacePersistencePropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpacePersistencePropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpacePersistencePropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpacePersistencePropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpacePersistencePropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpacePersistencePropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpacePersistence" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpacesSaveInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACES_SAVE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpacesSaveInfoMETA",
                             value->type, "VUID-XrSpacesSaveInfoMETA-type-type", XR_TYPE_SPACES_SAVE_INFO_META, "XR_TYPE_SPACES_SAVE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpacesSaveInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpacesSaveInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpacesSaveInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpacesSaveInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpacesSaveInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpacesSaveInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->spaceCount && nullptr != value->spaces) {
        CoreValidLogMessage(instance_info, "VUID-XrSpacesSaveInfoMETA-spaceCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpacesSaveInfoMETA member spaceCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->spaces && 0 != value->spaceCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpacesSaveInfoMETA-spaces-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpacesSaveInfoMETA contains invalid NULL for XrSpace \"spaces\" is which not "
                            "optional since \"spaceCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->spaces) {
        for (uint32_t value_spaces_inc = 0; value_spaces_inc < value->spaceCount; ++value_spaces_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->spaces[value_spaces_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSpace handle \"spaces\" ";
                    oss << HandleToHexString(value->spaces[value_spaces_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSpacesSaveInfoMETA-spaces-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpacesSaveResultMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACES_SAVE_RESULT_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpacesSaveResultMETA",
                             value->type, "VUID-XrEventDataSpacesSaveResultMETA-type-type", XR_TYPE_EVENT_DATA_SPACES_SAVE_RESULT_META, "XR_TYPE_EVENT_DATA_SPACES_SAVE_RESULT_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpacesSaveResultMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpacesSaveResultMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpacesSaveResultMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpacesSaveResultMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpacesSaveResultMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpacesSaveResultMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpacesEraseInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACES_ERASE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpacesEraseInfoMETA",
                             value->type, "VUID-XrSpacesEraseInfoMETA-type-type", XR_TYPE_SPACES_ERASE_INFO_META, "XR_TYPE_SPACES_ERASE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpacesEraseInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpacesEraseInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpacesEraseInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpacesEraseInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpacesEraseInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpacesEraseInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->spaceCount is non-zero
    if (0 != value->spaceCount && nullptr == value->spaces) {
        CoreValidLogMessage(instance_info, "VUID-XrSpacesEraseInfoMETA-spaces-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpacesEraseInfoMETA member spaceCount is NULL, but value->spaceCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->spaces) {
        for (uint32_t value_spaces_inc = 0; value_spaces_inc < value->spaceCount; ++value_spaces_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->spaces[value_spaces_inc]);
                if (handle_result == VALIDATE_XR_HANDLE_INVALID) {
                    // Not a valid handle
                    std::ostringstream oss;
                    oss << "Invalid XrSpace handle \"spaces\" ";
                    oss << HandleToHexString(value->spaces[value_spaces_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSpacesEraseInfoMETA-spaces-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Optional array must be non-NULL when value->uuidCount is non-zero
    if (0 != value->uuidCount && nullptr == value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpacesEraseInfoMETA-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpacesEraseInfoMETA member uuidCount is NULL, but value->uuidCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpacesEraseInfoMETA-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpacesEraseResultMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPACES_ERASE_RESULT_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpacesEraseResultMETA",
                             value->type, "VUID-XrEventDataSpacesEraseResultMETA-type-type", XR_TYPE_EVENT_DATA_SPACES_ERASE_RESULT_META, "XR_TYPE_EVENT_DATA_SPACES_ERASE_RESULT_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpacesEraseResultMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpacesEraseResultMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpacesEraseResultMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpacesEraseResultMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpacesEraseResultMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpacesEraseResultMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorLutDataMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->bufferSize && nullptr != value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutDataMETA-bufferSize-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPassthroughColorLutDataMETA member bufferSize is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->buffer && 0 != value->bufferSize) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutDataMETA-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrPassthroughColorLutDataMETA contains invalid NULL for uint8_t \"buffer\" is which not "
                            "optional since \"bufferSize\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrPassthroughColorLutDataMETA-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorLutCreateInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughColorLutCreateInfoMETA",
                             value->type, "VUID-XrPassthroughColorLutCreateInfoMETA-type-type", XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META, "XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutCreateInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughColorLutCreateInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorLutCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutCreateInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorLutCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutCreateInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrPassthroughColorLutChannelsMETA value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrPassthroughColorLutCreateInfoMETA", "channels", objects_info, value->channels)) {
        std::ostringstream oss_enum;
        oss_enum << "XrPassthroughColorLutCreateInfoMETA contains invalid XrPassthroughColorLutChannelsMETA \"channels\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->channels));
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutCreateInfoMETA-channels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Validate that the structure XrPassthroughColorLutDataMETA is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->data);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutCreateInfoMETA-data-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPassthroughColorLutCreateInfoMETA member data is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorLutUpdateInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughColorLutUpdateInfoMETA",
                             value->type, "VUID-XrPassthroughColorLutUpdateInfoMETA-type-type", XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META, "XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutUpdateInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughColorLutUpdateInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorLutUpdateInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutUpdateInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorLutUpdateInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutUpdateInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Validate that the structure XrPassthroughColorLutDataMETA is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->data);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorLutUpdateInfoMETA-data-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPassthroughColorLutUpdateInfoMETA member data is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorMapLutMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughColorMapLutMETA",
                             value->type, "VUID-XrPassthroughColorMapLutMETA-type-type", XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META, "XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapLutMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughColorMapLutMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorMapLutMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapLutMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorMapLutMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapLutMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrPassthroughColorLutMETAHandle(&value->colorLut);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrPassthroughColorLutMETA handle \"colorLut\" ";
            oss << HandleToHexString(value->colorLut);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapLutMETA-colorLut-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorMapInterpolatedLutMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughColorMapInterpolatedLutMETA",
                             value->type, "VUID-XrPassthroughColorMapInterpolatedLutMETA-type-type", XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META, "XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapInterpolatedLutMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughColorMapInterpolatedLutMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorMapInterpolatedLutMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapInterpolatedLutMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorMapInterpolatedLutMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapInterpolatedLutMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrPassthroughColorLutMETAHandle(&value->sourceColorLut);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrPassthroughColorLutMETA handle \"sourceColorLut\" ";
            oss << HandleToHexString(value->sourceColorLut);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapInterpolatedLutMETA-sourceColorLut-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrPassthroughColorLutMETAHandle(&value->targetColorLut);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrPassthroughColorLutMETA handle \"targetColorLut\" ";
            oss << HandleToHexString(value->targetColorLut);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorMapInterpolatedLutMETA-targetColorLut-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughColorLutPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemPassthroughColorLutPropertiesMETA",
                             value->type, "VUID-XrSystemPassthroughColorLutPropertiesMETA-type-type", XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META, "XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughColorLutPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemPassthroughColorLutPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughColorLutPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughColorLutPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughColorLutPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughColorLutPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "maxColorLutResolution" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceTriangleMeshGetInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_TRIANGLE_MESH_GET_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceTriangleMeshGetInfoMETA",
                             value->type, "VUID-XrSpaceTriangleMeshGetInfoMETA-type-type", XR_TYPE_SPACE_TRIANGLE_MESH_GET_INFO_META, "XR_TYPE_SPACE_TRIANGLE_MESH_GET_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceTriangleMeshGetInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceTriangleMeshGetInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceTriangleMeshGetInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceTriangleMeshGetInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceTriangleMeshGetInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceTriangleMeshGetInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceTriangleMeshMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_TRIANGLE_MESH_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceTriangleMeshMETA",
                             value->type, "VUID-XrSpaceTriangleMeshMETA-type-type", XR_TYPE_SPACE_TRIANGLE_MESH_META, "XR_TYPE_SPACE_TRIANGLE_MESH_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceTriangleMeshMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceTriangleMeshMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceTriangleMeshMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceTriangleMeshMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceTriangleMeshMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceTriangleMeshMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "vertexCapacityInput" because this struct is returned only.
    // Skip checking member "vertexCountOutput" because this struct is returned only.
    // Skip checking member "vertices" because this struct is returned only.
    // Skip checking member "indexCapacityInput" because this struct is returned only.
    // Skip checking member "indexCountOutput" because this struct is returned only.
    // Skip checking member "indices" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPropertiesBodyTrackingFullBodyMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FULL_BODY_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemPropertiesBodyTrackingFullBodyMETA",
                             value->type, "VUID-XrSystemPropertiesBodyTrackingFullBodyMETA-type-type", XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FULL_BODY_META, "XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FULL_BODY_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemPropertiesBodyTrackingFullBodyMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemPropertiesBodyTrackingFullBodyMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemPropertiesBodyTrackingFullBodyMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPropertiesBodyTrackingFullBodyMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemPropertiesBodyTrackingFullBodyMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPropertiesBodyTrackingFullBodyMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsFullBodyTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataPassthroughLayerResumedMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_PASSTHROUGH_LAYER_RESUMED_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataPassthroughLayerResumedMETA",
                             value->type, "VUID-XrEventDataPassthroughLayerResumedMETA-type-type", XR_TYPE_EVENT_DATA_PASSTHROUGH_LAYER_RESUMED_META, "XR_TYPE_EVENT_DATA_PASSTHROUGH_LAYER_RESUMED_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataPassthroughLayerResumedMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataPassthroughLayerResumedMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataPassthroughLayerResumedMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataPassthroughLayerResumedMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataPassthroughLayerResumedMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataPassthroughLayerResumedMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "layer" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackingCalibrationStatusMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_TRACKING_CALIBRATION_STATUS_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyTrackingCalibrationStatusMETA",
                             value->type, "VUID-XrBodyTrackingCalibrationStatusMETA-type-type", XR_TYPE_BODY_TRACKING_CALIBRATION_STATUS_META, "XR_TYPE_BODY_TRACKING_CALIBRATION_STATUS_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackingCalibrationStatusMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyTrackingCalibrationStatusMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackingCalibrationStatusMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackingCalibrationStatusMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackingCalibrationStatusMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackingCalibrationStatusMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "status" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackingCalibrationInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_TRACKING_CALIBRATION_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyTrackingCalibrationInfoMETA",
                             value->type, "VUID-XrBodyTrackingCalibrationInfoMETA-type-type", XR_TYPE_BODY_TRACKING_CALIBRATION_INFO_META, "XR_TYPE_BODY_TRACKING_CALIBRATION_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackingCalibrationInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyTrackingCalibrationInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackingCalibrationInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackingCalibrationInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackingCalibrationInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackingCalibrationInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPropertiesBodyTrackingCalibrationMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_CALIBRATION_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemPropertiesBodyTrackingCalibrationMETA",
                             value->type, "VUID-XrSystemPropertiesBodyTrackingCalibrationMETA-type-type", XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_CALIBRATION_META, "XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_CALIBRATION_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemPropertiesBodyTrackingCalibrationMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemPropertiesBodyTrackingCalibrationMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemPropertiesBodyTrackingCalibrationMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPropertiesBodyTrackingCalibrationMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemPropertiesBodyTrackingCalibrationMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPropertiesBodyTrackingCalibrationMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsHeightOverride" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPropertiesBodyTrackingFidelityMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FIDELITY_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemPropertiesBodyTrackingFidelityMETA",
                             value->type, "VUID-XrSystemPropertiesBodyTrackingFidelityMETA-type-type", XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FIDELITY_META, "XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FIDELITY_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemPropertiesBodyTrackingFidelityMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemPropertiesBodyTrackingFidelityMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemPropertiesBodyTrackingFidelityMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPropertiesBodyTrackingFidelityMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemPropertiesBodyTrackingFidelityMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPropertiesBodyTrackingFidelityMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsBodyTrackingFidelity" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackingFidelityStatusMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_TRACKING_FIDELITY_STATUS_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyTrackingFidelityStatusMETA",
                             value->type, "VUID-XrBodyTrackingFidelityStatusMETA-type-type", XR_TYPE_BODY_TRACKING_FIDELITY_STATUS_META, "XR_TYPE_BODY_TRACKING_FIDELITY_STATUS_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackingFidelityStatusMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyTrackingFidelityStatusMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackingFidelityStatusMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackingFidelityStatusMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackingFidelityStatusMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackingFidelityStatusMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "fidelity" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFaceTrackingProperties2FB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES2_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemFaceTrackingProperties2FB",
                             value->type, "VUID-XrSystemFaceTrackingProperties2FB-type-type", XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES2_FB, "XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES2_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingProperties2FB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemFaceTrackingProperties2FB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemFaceTrackingProperties2FB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingProperties2FB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemFaceTrackingProperties2FB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingProperties2FB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsVisualFaceTracking" because this struct is returned only.
    // Skip checking member "supportsAudioFaceTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackerCreateInfo2FB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_TRACKER_CREATE_INFO2_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceTrackerCreateInfo2FB",
                             value->type, "VUID-XrFaceTrackerCreateInfo2FB-type-type", XR_TYPE_FACE_TRACKER_CREATE_INFO2_FB, "XR_TYPE_FACE_TRACKER_CREATE_INFO2_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfo2FB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceTrackerCreateInfo2FB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackerCreateInfo2FB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfo2FB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackerCreateInfo2FB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfo2FB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrFaceExpressionSet2FB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFaceTrackerCreateInfo2FB", "faceExpressionSet", objects_info, value->faceExpressionSet)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFaceTrackerCreateInfo2FB contains invalid XrFaceExpressionSet2FB \"faceExpressionSet\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->faceExpressionSet));
        CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfo2FB-faceExpressionSet-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->requestedDataSourceCount is non-zero
    if (0 != value->requestedDataSourceCount && nullptr == value->requestedDataSources) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfo2FB-requestedDataSources-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFaceTrackerCreateInfo2FB member requestedDataSourceCount is NULL, but value->requestedDataSourceCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrFaceTrackerCreateInfo2FB-requestedDataSources-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionInfo2FB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_EXPRESSION_INFO2_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceExpressionInfo2FB",
                             value->type, "VUID-XrFaceExpressionInfo2FB-type-type", XR_TYPE_FACE_EXPRESSION_INFO2_FB, "XR_TYPE_FACE_EXPRESSION_INFO2_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionInfo2FB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceExpressionInfo2FB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceExpressionInfo2FB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionInfo2FB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceExpressionInfo2FB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionInfo2FB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceExpressionWeights2FB* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_EXPRESSION_WEIGHTS2_FB) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceExpressionWeights2FB",
                             value->type, "VUID-XrFaceExpressionWeights2FB-type-type", XR_TYPE_FACE_EXPRESSION_WEIGHTS2_FB, "XR_TYPE_FACE_EXPRESSION_WEIGHTS2_FB");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_FACE_TRACKING_VISEMES_META);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeights2FB-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceExpressionWeights2FB struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceExpressionWeights2FB : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeights2FB-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceExpressionWeights2FB : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeights2FB-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->weightCount && nullptr != value->weights) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeights2FB-weightCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFaceExpressionWeights2FB member weightCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->weights && 0 != value->weightCount) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeights2FB-weights-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrFaceExpressionWeights2FB contains invalid NULL for float \"weights\" is which not "
                            "optional since \"weightCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrFaceExpressionWeights2FB-weights-parameter" type
    // Non-optional array length must be non-zero
    if (0 >= value->confidenceCount && nullptr != value->confidences) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeights2FB-confidenceCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFaceExpressionWeights2FB member confidenceCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->confidences && 0 != value->confidenceCount) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeights2FB-confidences-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrFaceExpressionWeights2FB contains invalid NULL for float \"confidences\" is which not "
                            "optional since \"confidenceCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrFaceExpressionWeights2FB-confidences-parameter" type
    // Make sure the enum type XrFaceTrackingDataSource2FB value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFaceExpressionWeights2FB", "dataSource", objects_info, value->dataSource)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFaceExpressionWeights2FB contains invalid XrFaceTrackingDataSource2FB \"dataSource\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->dataSource));
        CoreValidLogMessage(instance_info, "VUID-XrFaceExpressionWeights2FB-dataSource-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialEntitySharingPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPATIAL_ENTITY_SHARING_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpatialEntitySharingPropertiesMETA",
                             value->type, "VUID-XrSystemSpatialEntitySharingPropertiesMETA-type-type", XR_TYPE_SYSTEM_SPATIAL_ENTITY_SHARING_PROPERTIES_META, "XR_TYPE_SYSTEM_SPATIAL_ENTITY_SHARING_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialEntitySharingPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpatialEntitySharingPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialEntitySharingPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialEntitySharingPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialEntitySharingPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialEntitySharingPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpatialEntitySharing" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrShareSpacesRecipientBaseHeaderMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrShareSpacesRecipientBaseHeaderMETA-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrShareSpacesRecipientBaseHeaderMETA-next-next" because it is a base structure
    if (value->type == XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META) {
        const XrShareSpacesRecipientGroupsMETA* new_value = reinterpret_cast<const XrShareSpacesRecipientGroupsMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_spatial_entity_group_sharing")) {
            std::string error_str = "XrShareSpacesRecipientBaseHeaderMETA being used with child struct type ";
            error_str += "\"XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META\"";
            error_str += " which requires extension \"XR_META_spatial_entity_group_sharing\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrShareSpacesRecipientBaseHeaderMETA-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrShareSpacesRecipientBaseHeaderMETA",
                         value->type, "VUID-XrShareSpacesRecipientBaseHeaderMETA-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrShareSpacesInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SHARE_SPACES_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrShareSpacesInfoMETA",
                             value->type, "VUID-XrShareSpacesInfoMETA-type-type", XR_TYPE_SHARE_SPACES_INFO_META, "XR_TYPE_SHARE_SPACES_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrShareSpacesInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrShareSpacesInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrShareSpacesInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrShareSpacesInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrShareSpacesInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrShareSpacesInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->spaceCount && nullptr != value->spaces) {
        CoreValidLogMessage(instance_info, "VUID-XrShareSpacesInfoMETA-spaceCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrShareSpacesInfoMETA member spaceCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->spaces && 0 != value->spaceCount) {
        CoreValidLogMessage(instance_info, "VUID-XrShareSpacesInfoMETA-spaces-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrShareSpacesInfoMETA contains invalid NULL for XrSpace \"spaces\" is which not "
                            "optional since \"spaceCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->spaces) {
        for (uint32_t value_spaces_inc = 0; value_spaces_inc < value->spaceCount; ++value_spaces_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->spaces[value_spaces_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSpace handle \"spaces\" ";
                    oss << HandleToHexString(value->spaces[value_spaces_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrShareSpacesInfoMETA-spaces-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->recipientInfo) {
        CoreValidLogMessage(instance_info, "VUID-XrShareSpacesInfoMETA-recipientInfo-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrShareSpacesInfoMETA contains invalid NULL for XrShareSpacesRecipientBaseHeaderMETA \"recipientInfo\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Validate if XrShareSpacesRecipientBaseHeaderMETA is a child structure of type XrShareSpacesRecipientGroupsMETA and it is valid
    {
        const XrShareSpacesRecipientGroupsMETA* new_sharespacesrecipientgroupsmeta_value = reinterpret_cast<const XrShareSpacesRecipientGroupsMETA*>(value->recipientInfo);
        if (new_sharespacesrecipientgroupsmeta_value->type == XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META) {
            xr_result = ValidateXrStruct(instance_info, command_name,
                                                            objects_info, check_members, true, new_sharespacesrecipientgroupsmeta_value);
            if (XR_SUCCESS != xr_result) {
                std::string error_message = "Structure XrShareSpacesInfoMETA member recipientInfo";
                error_message += " is invalid";
                CoreValidLogMessage(instance_info, "VUID-XrShareSpacesInfoMETA-recipientInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
        }
    }
    // Validate that the base-structure XrShareSpacesRecipientBaseHeaderMETA is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, value->recipientInfo);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrShareSpacesInfoMETA-recipientInfo-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrShareSpacesInfoMETA member recipientInfo is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataShareSpacesCompleteMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SHARE_SPACES_COMPLETE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataShareSpacesCompleteMETA",
                             value->type, "VUID-XrEventDataShareSpacesCompleteMETA-type-type", XR_TYPE_EVENT_DATA_SHARE_SPACES_COMPLETE_META, "XR_TYPE_EVENT_DATA_SHARE_SPACES_COMPLETE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataShareSpacesCompleteMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataShareSpacesCompleteMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataShareSpacesCompleteMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataShareSpacesCompleteMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataShareSpacesCompleteMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataShareSpacesCompleteMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthProviderCreateInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_DEPTH_PROVIDER_CREATE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentDepthProviderCreateInfoMETA",
                             value->type, "VUID-XrEnvironmentDepthProviderCreateInfoMETA-type-type", XR_TYPE_ENVIRONMENT_DEPTH_PROVIDER_CREATE_INFO_META, "XR_TYPE_ENVIRONMENT_DEPTH_PROVIDER_CREATE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthProviderCreateInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentDepthProviderCreateInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthProviderCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthProviderCreateInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthProviderCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthProviderCreateInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult environment_depth_provider_create_flags_meta_result = ValidateXrEnvironmentDepthProviderCreateFlagsMETA(value->createFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == environment_depth_provider_create_flags_meta_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrEnvironmentDepthProviderCreateInfoMETA invalid member XrEnvironmentDepthProviderCreateFlagsMETA \"createFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthProviderCreateInfoMETA-createFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthSwapchainCreateInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_CREATE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentDepthSwapchainCreateInfoMETA",
                             value->type, "VUID-XrEnvironmentDepthSwapchainCreateInfoMETA-type-type", XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_CREATE_INFO_META, "XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_CREATE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthSwapchainCreateInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentDepthSwapchainCreateInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthSwapchainCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthSwapchainCreateInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthSwapchainCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthSwapchainCreateInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult environment_depth_swapchain_create_flags_meta_result = ValidateXrEnvironmentDepthSwapchainCreateFlagsMETA(value->createFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == environment_depth_swapchain_create_flags_meta_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrEnvironmentDepthSwapchainCreateInfoMETA invalid member XrEnvironmentDepthSwapchainCreateFlagsMETA \"createFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthSwapchainCreateInfoMETA-createFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthSwapchainStateMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_STATE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentDepthSwapchainStateMETA",
                             value->type, "VUID-XrEnvironmentDepthSwapchainStateMETA-type-type", XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_STATE_META, "XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_STATE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthSwapchainStateMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentDepthSwapchainStateMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthSwapchainStateMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthSwapchainStateMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthSwapchainStateMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthSwapchainStateMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthImageAcquireInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_ACQUIRE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentDepthImageAcquireInfoMETA",
                             value->type, "VUID-XrEnvironmentDepthImageAcquireInfoMETA-type-type", XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_ACQUIRE_INFO_META, "XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_ACQUIRE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageAcquireInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentDepthImageAcquireInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthImageAcquireInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageAcquireInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthImageAcquireInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageAcquireInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageAcquireInfoMETA-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthImageViewMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_VIEW_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentDepthImageViewMETA",
                             value->type, "VUID-XrEnvironmentDepthImageViewMETA-type-type", XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_VIEW_META, "XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_VIEW_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageViewMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentDepthImageViewMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthImageViewMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageViewMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthImageViewMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageViewMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthImageMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentDepthImageMETA",
                             value->type, "VUID-XrEnvironmentDepthImageMETA-type-type", XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_META, "XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_TIMESTAMP_META);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentDepthImageMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthImageMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthImageMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    for (uint32_t value_views_inc = 0; value_views_inc < 2; ++value_views_inc) {
        // Validate that the structure XrEnvironmentDepthImageViewMETA is valid
        xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                         check_members, true, &value->views[value_views_inc]);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageMETA-views-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrEnvironmentDepthImageMETA member views is invalid");
            return xr_result;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthImageTimestampMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_TIMESTAMP_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentDepthImageTimestampMETA",
                             value->type, "VUID-XrEnvironmentDepthImageTimestampMETA-type-type", XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_TIMESTAMP_META, "XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_TIMESTAMP_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageTimestampMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentDepthImageTimestampMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthImageTimestampMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageTimestampMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthImageTimestampMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthImageTimestampMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentDepthHandRemovalSetInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_DEPTH_HAND_REMOVAL_SET_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentDepthHandRemovalSetInfoMETA",
                             value->type, "VUID-XrEnvironmentDepthHandRemovalSetInfoMETA-type-type", XR_TYPE_ENVIRONMENT_DEPTH_HAND_REMOVAL_SET_INFO_META, "XR_TYPE_ENVIRONMENT_DEPTH_HAND_REMOVAL_SET_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthHandRemovalSetInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentDepthHandRemovalSetInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthHandRemovalSetInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthHandRemovalSetInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentDepthHandRemovalSetInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentDepthHandRemovalSetInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEnvironmentDepthPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_ENVIRONMENT_DEPTH_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemEnvironmentDepthPropertiesMETA",
                             value->type, "VUID-XrSystemEnvironmentDepthPropertiesMETA-type-type", XR_TYPE_SYSTEM_ENVIRONMENT_DEPTH_PROPERTIES_META, "XR_TYPE_SYSTEM_ENVIRONMENT_DEPTH_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemEnvironmentDepthPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemEnvironmentDepthPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemEnvironmentDepthPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEnvironmentDepthPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemEnvironmentDepthPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEnvironmentDepthPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsEnvironmentDepth" because this struct is returned only.
    // Skip checking member "supportsHandRemoval" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelCreateInfoEXT",
                             value->type, "VUID-XrRenderModelCreateInfoEXT-type-type", XR_TYPE_RENDER_MODEL_CREATE_INFO_EXT, "XR_TYPE_RENDER_MODEL_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->gltfExtensionCount is non-zero
    if (0 != value->gltfExtensionCount && nullptr == value->gltfExtensions) {
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelCreateInfoEXT-gltfExtensions-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRenderModelCreateInfoEXT member gltfExtensionCount is NULL, but value->gltfExtensionCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrRenderModelCreateInfoEXT-gltfExtensions-parameter" null-termination
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelPropertiesGetInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_PROPERTIES_GET_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelPropertiesGetInfoEXT",
                             value->type, "VUID-XrRenderModelPropertiesGetInfoEXT-type-type", XR_TYPE_RENDER_MODEL_PROPERTIES_GET_INFO_EXT, "XR_TYPE_RENDER_MODEL_PROPERTIES_GET_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesGetInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelPropertiesGetInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelPropertiesGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesGetInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelPropertiesGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesGetInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelPropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_PROPERTIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelPropertiesEXT",
                             value->type, "VUID-XrRenderModelPropertiesEXT-type-type", XR_TYPE_RENDER_MODEL_PROPERTIES_EXT, "XR_TYPE_RENDER_MODEL_PROPERTIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelPropertiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelPropertiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "cacheId" because this struct is returned only.
    // Skip checking member "animatableNodeCount" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelSpaceCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_SPACE_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelSpaceCreateInfoEXT",
                             value->type, "VUID-XrRenderModelSpaceCreateInfoEXT-type-type", XR_TYPE_RENDER_MODEL_SPACE_CREATE_INFO_EXT, "XR_TYPE_RENDER_MODEL_SPACE_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelSpaceCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelSpaceCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelSpaceCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelSpaceCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelSpaceCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelSpaceCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrRenderModelEXTHandle(&value->renderModel);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrRenderModelEXT handle \"renderModel\" ";
            oss << HandleToHexString(value->renderModel);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelSpaceCreateInfoEXT-renderModel-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelStateGetInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_STATE_GET_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelStateGetInfoEXT",
                             value->type, "VUID-XrRenderModelStateGetInfoEXT-type-type", XR_TYPE_RENDER_MODEL_STATE_GET_INFO_EXT, "XR_TYPE_RENDER_MODEL_STATE_GET_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelStateGetInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelStateGetInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelStateGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelStateGetInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelStateGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelStateGetInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelNodeStateEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelStateEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_STATE_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelStateEXT",
                             value->type, "VUID-XrRenderModelStateEXT-type-type", XR_TYPE_RENDER_MODEL_STATE_EXT, "XR_TYPE_RENDER_MODEL_STATE_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelStateEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelStateEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelStateEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelStateEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelStateEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelStateEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->nodeStateCount is non-zero
    if (0 != value->nodeStateCount && nullptr == value->nodeStates) {
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelStateEXT-nodeStates-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRenderModelStateEXT member nodeStateCount is NULL, but value->nodeStateCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->nodeStates) {
        for (uint32_t value_nodestates_inc = 0; value_nodestates_inc < value->nodeStateCount; ++value_nodestates_inc) {
            // Validate that the structure XrRenderModelNodeStateEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->nodeStates[value_nodestates_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrRenderModelStateEXT-nodeStates-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrRenderModelStateEXT member nodeStates is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_ASSET_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelAssetCreateInfoEXT",
                             value->type, "VUID-XrRenderModelAssetCreateInfoEXT-type-type", XR_TYPE_RENDER_MODEL_ASSET_CREATE_INFO_EXT, "XR_TYPE_RENDER_MODEL_ASSET_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelAssetCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetDataGetInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_ASSET_DATA_GET_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelAssetDataGetInfoEXT",
                             value->type, "VUID-XrRenderModelAssetDataGetInfoEXT-type-type", XR_TYPE_RENDER_MODEL_ASSET_DATA_GET_INFO_EXT, "XR_TYPE_RENDER_MODEL_ASSET_DATA_GET_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetDataGetInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelAssetDataGetInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetDataGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetDataGetInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetDataGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetDataGetInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetDataEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_ASSET_DATA_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelAssetDataEXT",
                             value->type, "VUID-XrRenderModelAssetDataEXT-type-type", XR_TYPE_RENDER_MODEL_ASSET_DATA_EXT, "XR_TYPE_RENDER_MODEL_ASSET_DATA_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetDataEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelAssetDataEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetDataEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetDataEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetDataEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetDataEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->bufferCapacityInput is non-zero
    if (0 != value->bufferCapacityInput && nullptr == value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetDataEXT-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRenderModelAssetDataEXT member bufferCapacityInput is NULL, but value->bufferCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrRenderModelAssetDataEXT-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetPropertiesGetInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_GET_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelAssetPropertiesGetInfoEXT",
                             value->type, "VUID-XrRenderModelAssetPropertiesGetInfoEXT-type-type", XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_GET_INFO_EXT, "XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_GET_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetPropertiesGetInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelAssetPropertiesGetInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetPropertiesGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetPropertiesGetInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetPropertiesGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetPropertiesGetInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetNodePropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRenderModelAssetPropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRenderModelAssetPropertiesEXT",
                             value->type, "VUID-XrRenderModelAssetPropertiesEXT-type-type", XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_EXT, "XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetPropertiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRenderModelAssetPropertiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetPropertiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRenderModelAssetPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetPropertiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->nodePropertyCount && nullptr != value->nodeProperties) {
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetPropertiesEXT-nodePropertyCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRenderModelAssetPropertiesEXT member nodePropertyCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->nodeProperties && 0 != value->nodePropertyCount) {
        CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetPropertiesEXT-nodeProperties-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrRenderModelAssetPropertiesEXT contains invalid NULL for XrRenderModelAssetNodePropertiesEXT \"nodeProperties\" is which not "
                            "optional since \"nodePropertyCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->nodeProperties) {
        for (uint32_t value_nodeproperties_inc = 0; value_nodeproperties_inc < value->nodePropertyCount; ++value_nodeproperties_inc) {
            // Validate that the structure XrRenderModelAssetNodePropertiesEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->nodeProperties[value_nodeproperties_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrRenderModelAssetPropertiesEXT-nodeProperties-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrRenderModelAssetPropertiesEXT member nodeProperties is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionRenderModelIdsEnumerateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INTERACTION_RENDER_MODEL_IDS_ENUMERATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInteractionRenderModelIdsEnumerateInfoEXT",
                             value->type, "VUID-XrInteractionRenderModelIdsEnumerateInfoEXT-type-type", XR_TYPE_INTERACTION_RENDER_MODEL_IDS_ENUMERATE_INFO_EXT, "XR_TYPE_INTERACTION_RENDER_MODEL_IDS_ENUMERATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelIdsEnumerateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInteractionRenderModelIdsEnumerateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInteractionRenderModelIdsEnumerateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelIdsEnumerateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInteractionRenderModelIdsEnumerateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelIdsEnumerateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionRenderModelSubactionPathInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INTERACTION_RENDER_MODEL_SUBACTION_PATH_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInteractionRenderModelSubactionPathInfoEXT",
                             value->type, "VUID-XrInteractionRenderModelSubactionPathInfoEXT-type-type", XR_TYPE_INTERACTION_RENDER_MODEL_SUBACTION_PATH_INFO_EXT, "XR_TYPE_INTERACTION_RENDER_MODEL_SUBACTION_PATH_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelSubactionPathInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInteractionRenderModelSubactionPathInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInteractionRenderModelSubactionPathInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelSubactionPathInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInteractionRenderModelSubactionPathInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelSubactionPathInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrInteractionRenderModelTopLevelUserPathGetInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_INTERACTION_RENDER_MODEL_TOP_LEVEL_USER_PATH_GET_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrInteractionRenderModelTopLevelUserPathGetInfoEXT",
                             value->type, "VUID-XrInteractionRenderModelTopLevelUserPathGetInfoEXT-type-type", XR_TYPE_INTERACTION_RENDER_MODEL_TOP_LEVEL_USER_PATH_GET_INFO_EXT, "XR_TYPE_INTERACTION_RENDER_MODEL_TOP_LEVEL_USER_PATH_GET_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelTopLevelUserPathGetInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrInteractionRenderModelTopLevelUserPathGetInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrInteractionRenderModelTopLevelUserPathGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelTopLevelUserPathGetInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrInteractionRenderModelTopLevelUserPathGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelTopLevelUserPathGetInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->topLevelUserPathCount && nullptr != value->topLevelUserPaths) {
        CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelTopLevelUserPathGetInfoEXT-topLevelUserPathCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrInteractionRenderModelTopLevelUserPathGetInfoEXT member topLevelUserPathCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->topLevelUserPaths && 0 != value->topLevelUserPathCount) {
        CoreValidLogMessage(instance_info, "VUID-XrInteractionRenderModelTopLevelUserPathGetInfoEXT-topLevelUserPaths-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrInteractionRenderModelTopLevelUserPathGetInfoEXT contains invalid NULL for XrPath \"topLevelUserPaths\" is which not "
                            "optional since \"topLevelUserPathCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrInteractionRenderModelTopLevelUserPathGetInfoEXT-topLevelUserPaths-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataInteractionRenderModelsChangedEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_INTERACTION_RENDER_MODELS_CHANGED_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataInteractionRenderModelsChangedEXT",
                             value->type, "VUID-XrEventDataInteractionRenderModelsChangedEXT-type-type", XR_TYPE_EVENT_DATA_INTERACTION_RENDER_MODELS_CHANGED_EXT, "XR_TYPE_EVENT_DATA_INTERACTION_RENDER_MODELS_CHANGED_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataInteractionRenderModelsChangedEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataInteractionRenderModelsChangedEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataInteractionRenderModelsChangedEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataInteractionRenderModelsChangedEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataInteractionRenderModelsChangedEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataInteractionRenderModelsChangedEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandGestureQCOM* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrHandGestureTypeQCOM value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrHandGestureQCOM", "gesture", objects_info, value->gesture)) {
        std::ostringstream oss_enum;
        oss_enum << "XrHandGestureQCOM contains invalid XrHandGestureTypeQCOM \"gesture\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->gesture));
        CoreValidLogMessage(instance_info, "VUID-XrHandGestureQCOM-gesture-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughCreateInfoHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughCreateInfoHTC",
                             value->type, "VUID-XrPassthroughCreateInfoHTC-type-type", XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC, "XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughCreateInfoHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughCreateInfoHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughCreateInfoHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughCreateInfoHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughCreateInfoHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughCreateInfoHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrPassthroughFormHTC value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrPassthroughCreateInfoHTC", "form", objects_info, value->form)) {
        std::ostringstream oss_enum;
        oss_enum << "XrPassthroughCreateInfoHTC contains invalid XrPassthroughFormHTC \"form\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->form));
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughCreateInfoHTC-form-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughColorHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_COLOR_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughColorHTC",
                             value->type, "VUID-XrPassthroughColorHTC-type-type", XR_TYPE_PASSTHROUGH_COLOR_HTC, "XR_TYPE_PASSTHROUGH_COLOR_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughColorHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughColorHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughColorHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughMeshTransformInfoHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughMeshTransformInfoHTC",
                             value->type, "VUID-XrPassthroughMeshTransformInfoHTC-type-type", XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC, "XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughMeshTransformInfoHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughMeshTransformInfoHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughMeshTransformInfoHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughMeshTransformInfoHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughMeshTransformInfoHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughMeshTransformInfoHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->vertexCount && nullptr != value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughMeshTransformInfoHTC-vertexCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPassthroughMeshTransformInfoHTC member vertexCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->vertices && 0 != value->vertexCount) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughMeshTransformInfoHTC-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrPassthroughMeshTransformInfoHTC contains invalid NULL for XrVector3f \"vertices\" is which not "
                            "optional since \"vertexCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrPassthroughMeshTransformInfoHTC-vertices-parameter" type
    // Non-optional array length must be non-zero
    if (0 >= value->indexCount && nullptr != value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughMeshTransformInfoHTC-indexCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPassthroughMeshTransformInfoHTC member indexCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->indices && 0 != value->indexCount) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughMeshTransformInfoHTC-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrPassthroughMeshTransformInfoHTC contains invalid NULL for uint32_t \"indices\" is which not "
                            "optional since \"indexCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrPassthroughMeshTransformInfoHTC-indices-parameter" type
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughMeshTransformInfoHTC-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerPassthroughHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerPassthroughHTC",
                             value->type, "VUID-XrCompositionLayerPassthroughHTC-type-type", XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC, "XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerPassthroughHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerPassthroughHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerPassthroughHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_flags_result = ValidateXrCompositionLayerFlags(value->layerFlags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == composition_layer_flags_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughHTC-layerFlags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrCompositionLayerFlags \"layerFlags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != composition_layer_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerPassthroughHTC invalid member XrCompositionLayerFlags \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughHTC-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughHTC-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrPassthroughHTCHandle(&value->passthrough);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrPassthroughHTC handle \"passthrough\" ";
            oss << HandleToHexString(value->passthrough);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughHTC-passthrough-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Validate that the structure XrPassthroughColorHTC is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->color);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughHTC-color-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrCompositionLayerPassthroughHTC member color is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationApplyInfoHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FOVEATION_APPLY_INFO_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFoveationApplyInfoHTC",
                             value->type, "VUID-XrFoveationApplyInfoHTC-type-type", XR_TYPE_FOVEATION_APPLY_INFO_HTC, "XR_TYPE_FOVEATION_APPLY_INFO_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC);
        valid_ext_structs.insert(XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFoveationApplyInfoHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFoveationApplyInfoHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFoveationApplyInfoHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationApplyInfoHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFoveationApplyInfoHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationApplyInfoHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrFoveationModeHTC value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFoveationApplyInfoHTC", "mode", objects_info, value->mode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFoveationApplyInfoHTC contains invalid XrFoveationModeHTC \"mode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->mode));
        CoreValidLogMessage(instance_info, "VUID-XrFoveationApplyInfoHTC-mode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->subImageCount && nullptr != value->subImages) {
        CoreValidLogMessage(instance_info, "VUID-XrFoveationApplyInfoHTC-subImageCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFoveationApplyInfoHTC member subImageCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->subImages && 0 != value->subImageCount) {
        CoreValidLogMessage(instance_info, "VUID-XrFoveationApplyInfoHTC-subImages-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrFoveationApplyInfoHTC contains invalid NULL for XrSwapchainSubImage \"subImages\" is which not "
                            "optional since \"subImageCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->subImages) {
        for (uint32_t value_subimages_inc = 0; value_subimages_inc < value->subImageCount; ++value_subimages_inc) {
            // Validate that the structure XrSwapchainSubImage is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->subImages[value_subimages_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrFoveationApplyInfoHTC-subImages-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrFoveationApplyInfoHTC member subImages is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationConfigurationHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrFoveationLevelHTC value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFoveationConfigurationHTC", "level", objects_info, value->level)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFoveationConfigurationHTC contains invalid XrFoveationLevelHTC \"level\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->level));
        CoreValidLogMessage(instance_info, "VUID-XrFoveationConfigurationHTC-level-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationDynamicModeInfoHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFoveationDynamicModeInfoHTC",
                             value->type, "VUID-XrFoveationDynamicModeInfoHTC-type-type", XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC, "XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFoveationDynamicModeInfoHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFoveationDynamicModeInfoHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFoveationDynamicModeInfoHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationDynamicModeInfoHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFoveationDynamicModeInfoHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationDynamicModeInfoHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult foveation_dynamic_flags_htc_result = ValidateXrFoveationDynamicFlagsHTC(value->dynamicFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == foveation_dynamic_flags_htc_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrFoveationDynamicModeInfoHTC invalid member XrFoveationDynamicFlagsHTC \"dynamicFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->dynamicFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrFoveationDynamicModeInfoHTC-dynamicFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFoveationCustomModeInfoHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFoveationCustomModeInfoHTC",
                             value->type, "VUID-XrFoveationCustomModeInfoHTC-type-type", XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC, "XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFoveationCustomModeInfoHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFoveationCustomModeInfoHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFoveationCustomModeInfoHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationCustomModeInfoHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFoveationCustomModeInfoHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFoveationCustomModeInfoHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->configCount && nullptr != value->configs) {
        CoreValidLogMessage(instance_info, "VUID-XrFoveationCustomModeInfoHTC-configCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFoveationCustomModeInfoHTC member configCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->configs && 0 != value->configCount) {
        CoreValidLogMessage(instance_info, "VUID-XrFoveationCustomModeInfoHTC-configs-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrFoveationCustomModeInfoHTC contains invalid NULL for XrFoveationConfigurationHTC \"configs\" is which not "
                            "optional since \"configCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->configs) {
        for (uint32_t value_configs_inc = 0; value_configs_inc < value->configCount; ++value_configs_inc) {
            // Validate that the structure XrFoveationConfigurationHTC is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->configs[value_configs_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrFoveationCustomModeInfoHTC-configs-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrFoveationCustomModeInfoHTC member configs is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemAnchorPropertiesHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemAnchorPropertiesHTC",
                             value->type, "VUID-XrSystemAnchorPropertiesHTC-type-type", XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC, "XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemAnchorPropertiesHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemAnchorPropertiesHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemAnchorPropertiesHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemAnchorPropertiesHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemAnchorPropertiesHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemAnchorPropertiesHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsAnchor" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorNameHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorCreateInfoHTC",
                             value->type, "VUID-XrSpatialAnchorCreateInfoHTC-type-type", XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_HTC, "XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorCreateInfoHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoHTC-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Validate that the structure XrSpatialAnchorNameHTC is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->name);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoHTC-name-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialAnchorCreateInfoHTC member name is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemBodyTrackingPropertiesHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemBodyTrackingPropertiesHTC",
                             value->type, "VUID-XrSystemBodyTrackingPropertiesHTC-type-type", XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_HTC, "XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemBodyTrackingPropertiesHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemBodyTrackingPropertiesHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemBodyTrackingPropertiesHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemBodyTrackingPropertiesHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemBodyTrackingPropertiesHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemBodyTrackingPropertiesHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsBodyTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackerCreateInfoHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_TRACKER_CREATE_INFO_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyTrackerCreateInfoHTC",
                             value->type, "VUID-XrBodyTrackerCreateInfoHTC-type-type", XR_TYPE_BODY_TRACKER_CREATE_INFO_HTC, "XR_TYPE_BODY_TRACKER_CREATE_INFO_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyTrackerCreateInfoHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackerCreateInfoHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackerCreateInfoHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrBodyJointSetHTC value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrBodyTrackerCreateInfoHTC", "bodyJointSet", objects_info, value->bodyJointSet)) {
        std::ostringstream oss_enum;
        oss_enum << "XrBodyTrackerCreateInfoHTC contains invalid XrBodyJointSetHTC \"bodyJointSet\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->bodyJointSet));
        CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoHTC-bodyJointSet-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointsLocateInfoHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_JOINTS_LOCATE_INFO_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyJointsLocateInfoHTC",
                             value->type, "VUID-XrBodyJointsLocateInfoHTC-type-type", XR_TYPE_BODY_JOINTS_LOCATE_INFO_HTC, "XR_TYPE_BODY_JOINTS_LOCATE_INFO_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyJointsLocateInfoHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyJointsLocateInfoHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyJointsLocateInfoHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoHTC-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "locationFlags" because this struct is returned only.
    // Skip checking member "pose" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationsHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_JOINT_LOCATIONS_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyJointLocationsHTC",
                             value->type, "VUID-XrBodyJointLocationsHTC-type-type", XR_TYPE_BODY_JOINT_LOCATIONS_HTC, "XR_TYPE_BODY_JOINT_LOCATIONS_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyJointLocationsHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyJointLocationsHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyJointLocationsHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult space_location_flags_result = ValidateXrSpaceLocationFlags(value->combinedLocationFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == space_location_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrBodyJointLocationsHTC invalid member XrSpaceLocationFlags \"combinedLocationFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->combinedLocationFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsHTC-combinedLocationFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Make sure the enum type XrBodyJointConfidenceHTC value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrBodyJointLocationsHTC", "confidenceLevel", objects_info, value->confidenceLevel)) {
        std::ostringstream oss_enum;
        oss_enum << "XrBodyJointLocationsHTC contains invalid XrBodyJointConfidenceHTC \"confidenceLevel\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->confidenceLevel));
        CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsHTC-confidenceLevel-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->jointLocationCount && nullptr != value->jointLocations) {
        CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsHTC-jointLocationCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrBodyJointLocationsHTC member jointLocationCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->jointLocations && 0 != value->jointLocationCount) {
        CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsHTC-jointLocations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrBodyJointLocationsHTC contains invalid NULL for XrBodyJointLocationHTC \"jointLocations\" is which not "
                            "optional since \"jointLocationCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->jointLocations) {
        for (uint32_t value_jointlocations_inc = 0; value_jointlocations_inc < value->jointLocationCount; ++value_jointlocations_inc) {
            // Validate that the structure XrBodyJointLocationHTC is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->jointLocations[value_jointlocations_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsHTC-jointLocations-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrBodyJointLocationsHTC member jointLocations is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodySkeletonJointHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodySkeletonHTC* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_SKELETON_HTC) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodySkeletonHTC",
                             value->type, "VUID-XrBodySkeletonHTC-type-type", XR_TYPE_BODY_SKELETON_HTC, "XR_TYPE_BODY_SKELETON_HTC");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonHTC-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodySkeletonHTC struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodySkeletonHTC : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonHTC-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodySkeletonHTC : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonHTC-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->jointCount && nullptr != value->joints) {
        CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonHTC-jointCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrBodySkeletonHTC member jointCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->joints && 0 != value->jointCount) {
        CoreValidLogMessage(instance_info, "VUID-XrBodySkeletonHTC-joints-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrBodySkeletonHTC contains invalid NULL for XrBodySkeletonJointHTC \"joints\" is which not "
                            "optional since \"jointCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrBodySkeletonHTC-joints-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActiveActionSetPriorityEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrActionSetHandle(&value->actionSet);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrActionSet handle \"actionSet\" ";
            oss << HandleToHexString(value->actionSet);
            CoreValidLogMessage(instance_info, "VUID-XrActiveActionSetPriorityEXT-actionSet-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrActiveActionSetPrioritiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrActiveActionSetPrioritiesEXT",
                             value->type, "VUID-XrActiveActionSetPrioritiesEXT-type-type", XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT, "XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrActiveActionSetPrioritiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrActiveActionSetPrioritiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrActiveActionSetPrioritiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActiveActionSetPrioritiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrActiveActionSetPrioritiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrActiveActionSetPrioritiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->actionSetPriorityCount && nullptr != value->actionSetPriorities) {
        CoreValidLogMessage(instance_info, "VUID-XrActiveActionSetPrioritiesEXT-actionSetPriorityCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrActiveActionSetPrioritiesEXT member actionSetPriorityCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->actionSetPriorities && 0 != value->actionSetPriorityCount) {
        CoreValidLogMessage(instance_info, "VUID-XrActiveActionSetPrioritiesEXT-actionSetPriorities-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrActiveActionSetPrioritiesEXT contains invalid NULL for XrActiveActionSetPriorityEXT \"actionSetPriorities\" is which not "
                            "optional since \"actionSetPriorityCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->actionSetPriorities) {
        for (uint32_t value_actionsetpriorities_inc = 0; value_actionsetpriorities_inc < value->actionSetPriorityCount; ++value_actionsetpriorities_inc) {
            // Validate that the structure XrActiveActionSetPriorityEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->actionSetPriorities[value_actionsetpriorities_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrActiveActionSetPrioritiesEXT-actionSetPriorities-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrActiveActionSetPrioritiesEXT member actionSetPriorities is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemForceFeedbackCurlPropertiesMNDX* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemForceFeedbackCurlPropertiesMNDX",
                             value->type, "VUID-XrSystemForceFeedbackCurlPropertiesMNDX-type-type", XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX, "XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemForceFeedbackCurlPropertiesMNDX-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemForceFeedbackCurlPropertiesMNDX struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemForceFeedbackCurlPropertiesMNDX : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemForceFeedbackCurlPropertiesMNDX-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemForceFeedbackCurlPropertiesMNDX : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemForceFeedbackCurlPropertiesMNDX-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsForceFeedbackCurl" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrForceFeedbackCurlApplyLocationMNDX* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrForceFeedbackCurlLocationMNDX value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrForceFeedbackCurlApplyLocationMNDX", "location", objects_info, value->location)) {
        std::ostringstream oss_enum;
        oss_enum << "XrForceFeedbackCurlApplyLocationMNDX contains invalid XrForceFeedbackCurlLocationMNDX \"location\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->location));
        CoreValidLogMessage(instance_info, "VUID-XrForceFeedbackCurlApplyLocationMNDX-location-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrForceFeedbackCurlApplyLocationsMNDX* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrForceFeedbackCurlApplyLocationsMNDX",
                             value->type, "VUID-XrForceFeedbackCurlApplyLocationsMNDX-type-type", XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX, "XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrForceFeedbackCurlApplyLocationsMNDX-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrForceFeedbackCurlApplyLocationsMNDX struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrForceFeedbackCurlApplyLocationsMNDX : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrForceFeedbackCurlApplyLocationsMNDX-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrForceFeedbackCurlApplyLocationsMNDX : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrForceFeedbackCurlApplyLocationsMNDX-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->locationCount && nullptr != value->locations) {
        CoreValidLogMessage(instance_info, "VUID-XrForceFeedbackCurlApplyLocationsMNDX-locationCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrForceFeedbackCurlApplyLocationsMNDX member locationCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->locations && 0 != value->locationCount) {
        CoreValidLogMessage(instance_info, "VUID-XrForceFeedbackCurlApplyLocationsMNDX-locations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrForceFeedbackCurlApplyLocationsMNDX contains invalid NULL for XrForceFeedbackCurlApplyLocationMNDX \"locations\" is which not "
                            "optional since \"locationCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->locations) {
        for (uint32_t value_locations_inc = 0; value_locations_inc < value->locationCount; ++value_locations_inc) {
            // Validate that the structure XrForceFeedbackCurlApplyLocationMNDX is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->locations[value_locations_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrForceFeedbackCurlApplyLocationsMNDX-locations-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrForceFeedbackCurlApplyLocationsMNDX member locations is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemBodyTrackingPropertiesBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemBodyTrackingPropertiesBD",
                             value->type, "VUID-XrSystemBodyTrackingPropertiesBD-type-type", XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_BD, "XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemBodyTrackingPropertiesBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemBodyTrackingPropertiesBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemBodyTrackingPropertiesBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemBodyTrackingPropertiesBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemBodyTrackingPropertiesBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemBodyTrackingPropertiesBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsBodyTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyTrackerCreateInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_TRACKER_CREATE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyTrackerCreateInfoBD",
                             value->type, "VUID-XrBodyTrackerCreateInfoBD-type-type", XR_TYPE_BODY_TRACKER_CREATE_INFO_BD, "XR_TYPE_BODY_TRACKER_CREATE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyTrackerCreateInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackerCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyTrackerCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrBodyJointSetBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrBodyTrackerCreateInfoBD", "jointSet", objects_info, value->jointSet)) {
        std::ostringstream oss_enum;
        oss_enum << "XrBodyTrackerCreateInfoBD contains invalid XrBodyJointSetBD \"jointSet\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->jointSet));
        CoreValidLogMessage(instance_info, "VUID-XrBodyTrackerCreateInfoBD-jointSet-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointsLocateInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_JOINTS_LOCATE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyJointsLocateInfoBD",
                             value->type, "VUID-XrBodyJointsLocateInfoBD-type-type", XR_TYPE_BODY_JOINTS_LOCATE_INFO_BD, "XR_TYPE_BODY_JOINTS_LOCATE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyJointsLocateInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyJointsLocateInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyJointsLocateInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointsLocateInfoBD-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult space_location_flags_result = ValidateXrSpaceLocationFlags(value->locationFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == space_location_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrBodyJointLocationBD invalid member XrSpaceLocationFlags \"locationFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->locationFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationBD-locationFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBodyJointLocationsBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BODY_JOINT_LOCATIONS_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBodyJointLocationsBD",
                             value->type, "VUID-XrBodyJointLocationsBD-type-type", XR_TYPE_BODY_JOINT_LOCATIONS_BD, "XR_TYPE_BODY_JOINT_LOCATIONS_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBodyJointLocationsBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBodyJointLocationsBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBodyJointLocationsBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->jointLocationCount && nullptr != value->jointLocations) {
        CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsBD-jointLocationCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrBodyJointLocationsBD member jointLocationCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->jointLocations && 0 != value->jointLocationCount) {
        CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsBD-jointLocations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrBodyJointLocationsBD contains invalid NULL for XrBodyJointLocationBD \"jointLocations\" is which not "
                            "optional since \"jointLocationCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->jointLocations) {
        for (uint32_t value_jointlocations_inc = 0; value_jointlocations_inc < value->jointLocationCount; ++value_jointlocations_inc) {
            // Validate that the structure XrBodyJointLocationBD is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->jointLocations[value_jointlocations_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrBodyJointLocationsBD-jointLocations-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrBodyJointLocationsBD member jointLocations is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFacialSimulationPropertiesBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FACIAL_SIMULATION_PROPERTIES_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemFacialSimulationPropertiesBD",
                             value->type, "VUID-XrSystemFacialSimulationPropertiesBD-type-type", XR_TYPE_SYSTEM_FACIAL_SIMULATION_PROPERTIES_BD, "XR_TYPE_SYSTEM_FACIAL_SIMULATION_PROPERTIES_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemFacialSimulationPropertiesBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemFacialSimulationPropertiesBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemFacialSimulationPropertiesBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFacialSimulationPropertiesBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemFacialSimulationPropertiesBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFacialSimulationPropertiesBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsFaceTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackerCreateInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_TRACKER_CREATE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceTrackerCreateInfoBD",
                             value->type, "VUID-XrFaceTrackerCreateInfoBD-type-type", XR_TYPE_FACE_TRACKER_CREATE_INFO_BD, "XR_TYPE_FACE_TRACKER_CREATE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceTrackerCreateInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackerCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackerCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrFacialSimulationModeBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFaceTrackerCreateInfoBD", "mode", objects_info, value->mode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFaceTrackerCreateInfoBD contains invalid XrFacialSimulationModeBD \"mode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->mode));
        CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoBD-mode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialSimulationDataGetInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACIAL_SIMULATION_DATA_GET_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFacialSimulationDataGetInfoBD",
                             value->type, "VUID-XrFacialSimulationDataGetInfoBD-type-type", XR_TYPE_FACIAL_SIMULATION_DATA_GET_INFO_BD, "XR_TYPE_FACIAL_SIMULATION_DATA_GET_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFacialSimulationDataGetInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFacialSimulationDataGetInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFacialSimulationDataGetInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialSimulationDataGetInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFacialSimulationDataGetInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialSimulationDataGetInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialSimulationDataBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACIAL_SIMULATION_DATA_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFacialSimulationDataBD",
                             value->type, "VUID-XrFacialSimulationDataBD-type-type", XR_TYPE_FACIAL_SIMULATION_DATA_BD, "XR_TYPE_FACIAL_SIMULATION_DATA_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_LIP_EXPRESSION_DATA_BD);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFacialSimulationDataBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFacialSimulationDataBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFacialSimulationDataBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialSimulationDataBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFacialSimulationDataBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialSimulationDataBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->faceExpressionWeightCount && nullptr != value->faceExpressionWeights) {
        CoreValidLogMessage(instance_info, "VUID-XrFacialSimulationDataBD-faceExpressionWeightCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFacialSimulationDataBD member faceExpressionWeightCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->faceExpressionWeights && 0 != value->faceExpressionWeightCount) {
        CoreValidLogMessage(instance_info, "VUID-XrFacialSimulationDataBD-faceExpressionWeights-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrFacialSimulationDataBD contains invalid NULL for float \"faceExpressionWeights\" is which not "
                            "optional since \"faceExpressionWeightCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrFacialSimulationDataBD-faceExpressionWeights-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLipExpressionDataBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LIP_EXPRESSION_DATA_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLipExpressionDataBD",
                             value->type, "VUID-XrLipExpressionDataBD-type-type", XR_TYPE_LIP_EXPRESSION_DATA_BD, "XR_TYPE_LIP_EXPRESSION_DATA_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLipExpressionDataBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLipExpressionDataBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLipExpressionDataBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLipExpressionDataBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLipExpressionDataBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLipExpressionDataBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->lipsyncExpressionWeightCount && nullptr != value->lipsyncExpressionWeights) {
        CoreValidLogMessage(instance_info, "VUID-XrLipExpressionDataBD-lipsyncExpressionWeightCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrLipExpressionDataBD member lipsyncExpressionWeightCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->lipsyncExpressionWeights && 0 != value->lipsyncExpressionWeightCount) {
        CoreValidLogMessage(instance_info, "VUID-XrLipExpressionDataBD-lipsyncExpressionWeights-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrLipExpressionDataBD contains invalid NULL for float \"lipsyncExpressionWeights\" is which not "
                            "optional since \"lipsyncExpressionWeightCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrLipExpressionDataBD-lipsyncExpressionWeights-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialSensingPropertiesBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPATIAL_SENSING_PROPERTIES_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpatialSensingPropertiesBD",
                             value->type, "VUID-XrSystemSpatialSensingPropertiesBD-type-type", XR_TYPE_SYSTEM_SPATIAL_SENSING_PROPERTIES_BD, "XR_TYPE_SYSTEM_SPATIAL_SENSING_PROPERTIES_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialSensingPropertiesBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpatialSensingPropertiesBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialSensingPropertiesBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialSensingPropertiesBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialSensingPropertiesBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialSensingPropertiesBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpatialSensing" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentGetInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_COMPONENT_GET_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityComponentGetInfoBD",
                             value->type, "VUID-XrSpatialEntityComponentGetInfoBD-type-type", XR_TYPE_SPATIAL_ENTITY_COMPONENT_GET_INFO_BD, "XR_TYPE_SPATIAL_ENTITY_COMPONENT_GET_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_ENTITY_LOCATION_GET_INFO_BD);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentGetInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityComponentGetInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentGetInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentGetInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentGetInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentGetInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialEntityComponentTypeBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialEntityComponentGetInfoBD", "componentType", objects_info, value->componentType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialEntityComponentGetInfoBD contains invalid XrSpatialEntityComponentTypeBD \"componentType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentType));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentGetInfoBD-componentType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataBaseHeaderBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrSpatialEntityComponentDataBaseHeaderBD-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpatialEntityComponentDataBaseHeaderBD-next-next" because it is a base structure
    InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityComponentDataBaseHeaderBD",
                         value->type, "VUID-XrSpatialEntityComponentDataBaseHeaderBD-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityLocationGetInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_LOCATION_GET_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityLocationGetInfoBD",
                             value->type, "VUID-XrSpatialEntityLocationGetInfoBD-type-type", XR_TYPE_SPATIAL_ENTITY_LOCATION_GET_INFO_BD, "XR_TYPE_SPATIAL_ENTITY_LOCATION_GET_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityLocationGetInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityLocationGetInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityLocationGetInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityLocationGetInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityLocationGetInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityLocationGetInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityLocationGetInfoBD-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataLocationBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_LOCATION_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityComponentDataLocationBD",
                             value->type, "VUID-XrSpatialEntityComponentDataLocationBD-type-type", XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_LOCATION_BD, "XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_LOCATION_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataLocationBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityComponentDataLocationBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataLocationBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataLocationBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataLocationBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataLocationBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Validate that the structure XrSpaceLocation is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->location);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataLocationBD-location-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialEntityComponentDataLocationBD member location is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataSemanticBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_SEMANTIC_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityComponentDataSemanticBD",
                             value->type, "VUID-XrSpatialEntityComponentDataSemanticBD-type-type", XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_SEMANTIC_BD, "XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_SEMANTIC_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataSemanticBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityComponentDataSemanticBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataSemanticBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataSemanticBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataSemanticBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataSemanticBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->labelCapacityInput is non-zero
    if (0 != value->labelCapacityInput && nullptr == value->labels) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataSemanticBD-labels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialEntityComponentDataSemanticBD member labelCapacityInput is NULL, but value->labelCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrSpatialEntityComponentDataSemanticBD-labels-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataBoundingBox2DBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_2D_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityComponentDataBoundingBox2DBD",
                             value->type, "VUID-XrSpatialEntityComponentDataBoundingBox2DBD-type-type", XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_2D_BD, "XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_2D_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataBoundingBox2DBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityComponentDataBoundingBox2DBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataBoundingBox2DBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataBoundingBox2DBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataBoundingBox2DBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataBoundingBox2DBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataPolygonBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_POLYGON_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityComponentDataPolygonBD",
                             value->type, "VUID-XrSpatialEntityComponentDataPolygonBD-type-type", XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_POLYGON_BD, "XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_POLYGON_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataPolygonBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityComponentDataPolygonBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataPolygonBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataPolygonBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataPolygonBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataPolygonBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataPolygonBD-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialEntityComponentDataPolygonBD member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialEntityComponentDataPolygonBD-vertices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataBoundingBox3DBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_3D_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityComponentDataBoundingBox3DBD",
                             value->type, "VUID-XrSpatialEntityComponentDataBoundingBox3DBD-type-type", XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_3D_BD, "XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_3D_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataBoundingBox3DBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityComponentDataBoundingBox3DBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataBoundingBox3DBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataBoundingBox3DBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataBoundingBox3DBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataBoundingBox3DBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataTriangleMeshBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_TRIANGLE_MESH_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityComponentDataTriangleMeshBD",
                             value->type, "VUID-XrSpatialEntityComponentDataTriangleMeshBD-type-type", XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_TRIANGLE_MESH_BD, "XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_TRIANGLE_MESH_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataTriangleMeshBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityComponentDataTriangleMeshBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataTriangleMeshBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataTriangleMeshBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataTriangleMeshBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataTriangleMeshBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataTriangleMeshBD-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialEntityComponentDataTriangleMeshBD member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialEntityComponentDataTriangleMeshBD-vertices-parameter" type
    // Optional array must be non-NULL when value->indexCapacityInput is non-zero
    if (0 != value->indexCapacityInput && nullptr == value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataTriangleMeshBD-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialEntityComponentDataTriangleMeshBD member indexCapacityInput is NULL, but value->indexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialEntityComponentDataTriangleMeshBD-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataProviderCreateInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSenseDataProviderCreateInfoBD",
                             value->type, "VUID-XrSenseDataProviderCreateInfoBD-type-type", XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_BD, "XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_SPATIAL_MESH_BD);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderCreateInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSenseDataProviderCreateInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSenseDataProviderCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderCreateInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSenseDataProviderCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderCreateInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSenseDataProviderTypeBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSenseDataProviderCreateInfoBD", "providerType", objects_info, value->providerType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSenseDataProviderCreateInfoBD contains invalid XrSenseDataProviderTypeBD \"providerType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->providerType));
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderCreateInfoBD-providerType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataProviderStartInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SENSE_DATA_PROVIDER_START_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSenseDataProviderStartInfoBD",
                             value->type, "VUID-XrSenseDataProviderStartInfoBD-type-type", XR_TYPE_SENSE_DATA_PROVIDER_START_INFO_BD, "XR_TYPE_SENSE_DATA_PROVIDER_START_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderStartInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSenseDataProviderStartInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSenseDataProviderStartInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderStartInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSenseDataProviderStartInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderStartInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSenseDataProviderStateChangedBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SENSE_DATA_PROVIDER_STATE_CHANGED_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSenseDataProviderStateChangedBD",
                             value->type, "VUID-XrEventDataSenseDataProviderStateChangedBD-type-type", XR_TYPE_EVENT_DATA_SENSE_DATA_PROVIDER_STATE_CHANGED_BD, "XR_TYPE_EVENT_DATA_SENSE_DATA_PROVIDER_STATE_CHANGED_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSenseDataProviderStateChangedBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSenseDataProviderStateChangedBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSenseDataProviderStateChangedBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSenseDataProviderStateChangedBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSenseDataProviderStateChangedBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSenseDataProviderStateChangedBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "provider" because this struct is returned only.
    // Skip checking member "newState" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSenseDataUpdatedBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SENSE_DATA_UPDATED_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSenseDataUpdatedBD",
                             value->type, "VUID-XrEventDataSenseDataUpdatedBD-type-type", XR_TYPE_EVENT_DATA_SENSE_DATA_UPDATED_BD, "XR_TYPE_EVENT_DATA_SENSE_DATA_UPDATED_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSenseDataUpdatedBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSenseDataUpdatedBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSenseDataUpdatedBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSenseDataUpdatedBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSenseDataUpdatedBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSenseDataUpdatedBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "provider" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataQueryInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SENSE_DATA_QUERY_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSenseDataQueryInfoBD",
                             value->type, "VUID-XrSenseDataQueryInfoBD-type-type", XR_TYPE_SENSE_DATA_QUERY_INFO_BD, "XR_TYPE_SENSE_DATA_QUERY_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SENSE_DATA_FILTER_PLANE_ORIENTATION_BD);
        valid_ext_structs.insert(XR_TYPE_SENSE_DATA_FILTER_SEMANTIC_BD);
        valid_ext_structs.insert(XR_TYPE_SENSE_DATA_FILTER_UUID_BD);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataQueryInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSenseDataQueryInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSenseDataQueryInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataQueryInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSenseDataQueryInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataQueryInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataQueryCompletionBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SENSE_DATA_QUERY_COMPLETION_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSenseDataQueryCompletionBD",
                             value->type, "VUID-XrSenseDataQueryCompletionBD-type-type", XR_TYPE_SENSE_DATA_QUERY_COMPLETION_BD, "XR_TYPE_SENSE_DATA_QUERY_COMPLETION_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataQueryCompletionBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSenseDataQueryCompletionBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSenseDataQueryCompletionBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataQueryCompletionBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSenseDataQueryCompletionBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataQueryCompletionBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSenseDataQueryCompletionBD", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSenseDataQueryCompletionBD contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataQueryCompletionBD-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSenseDataSnapshotBDHandle(&value->snapshot);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSenseDataSnapshotBD handle \"snapshot\" ";
            oss << HandleToHexString(value->snapshot);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataQueryCompletionBD-snapshot-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrQueriedSenseDataGetInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_QUERIED_SENSE_DATA_GET_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrQueriedSenseDataGetInfoBD",
                             value->type, "VUID-XrQueriedSenseDataGetInfoBD-type-type", XR_TYPE_QUERIED_SENSE_DATA_GET_INFO_BD, "XR_TYPE_QUERIED_SENSE_DATA_GET_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrQueriedSenseDataGetInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrQueriedSenseDataGetInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrQueriedSenseDataGetInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrQueriedSenseDataGetInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrQueriedSenseDataGetInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrQueriedSenseDataGetInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityStateBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_STATE_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityStateBD",
                             value->type, "VUID-XrSpatialEntityStateBD-type-type", XR_TYPE_SPATIAL_ENTITY_STATE_BD, "XR_TYPE_SPATIAL_ENTITY_STATE_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityStateBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityStateBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityStateBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityStateBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityStateBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityStateBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrQueriedSenseDataBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_QUERIED_SENSE_DATA_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrQueriedSenseDataBD",
                             value->type, "VUID-XrQueriedSenseDataBD-type-type", XR_TYPE_QUERIED_SENSE_DATA_BD, "XR_TYPE_QUERIED_SENSE_DATA_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrQueriedSenseDataBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrQueriedSenseDataBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrQueriedSenseDataBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrQueriedSenseDataBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrQueriedSenseDataBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrQueriedSenseDataBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->stateCapacityInput is non-zero
    if (0 != value->stateCapacityInput && nullptr == value->states) {
        CoreValidLogMessage(instance_info, "VUID-XrQueriedSenseDataBD-states-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrQueriedSenseDataBD member stateCapacityInput is NULL, but value->stateCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->states) {
        for (uint32_t value_states_inc = 0; value_states_inc < value->stateCapacityInput; ++value_states_inc) {
            // Validate that the structure XrSpatialEntityStateBD is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->states[value_states_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrQueriedSenseDataBD-states-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrQueriedSenseDataBD member states is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataFilterUuidBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SENSE_DATA_FILTER_UUID_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSenseDataFilterUuidBD",
                             value->type, "VUID-XrSenseDataFilterUuidBD-type-type", XR_TYPE_SENSE_DATA_FILTER_UUID_BD, "XR_TYPE_SENSE_DATA_FILTER_UUID_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterUuidBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSenseDataFilterUuidBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSenseDataFilterUuidBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterUuidBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSenseDataFilterUuidBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterUuidBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->uuidCount && nullptr != value->uuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterUuidBD-uuidCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSenseDataFilterUuidBD member uuidCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->uuids && 0 != value->uuidCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterUuidBD-uuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSenseDataFilterUuidBD contains invalid NULL for XrUuidEXT \"uuids\" is which not "
                            "optional since \"uuidCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSenseDataFilterUuidBD-uuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataFilterSemanticBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SENSE_DATA_FILTER_SEMANTIC_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSenseDataFilterSemanticBD",
                             value->type, "VUID-XrSenseDataFilterSemanticBD-type-type", XR_TYPE_SENSE_DATA_FILTER_SEMANTIC_BD, "XR_TYPE_SENSE_DATA_FILTER_SEMANTIC_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterSemanticBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSenseDataFilterSemanticBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSenseDataFilterSemanticBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterSemanticBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSenseDataFilterSemanticBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterSemanticBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->labelCount && nullptr != value->labels) {
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterSemanticBD-labelCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSenseDataFilterSemanticBD member labelCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->labels && 0 != value->labelCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterSemanticBD-labels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSenseDataFilterSemanticBD contains invalid NULL for XrSemanticLabelBD \"labels\" is which not "
                            "optional since \"labelCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->labels) {
        for (uint32_t value_labels_inc = 0; value_labels_inc < value->labelCount; ++value_labels_inc) {
            // Make sure the enum type XrSemanticLabelBD value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSenseDataFilterSemanticBD", "labels", objects_info, value->labels[value_labels_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSenseDataFilterSemanticBD contains invalid XrSemanticLabelBD \"labels\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->labels[value_labels_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterSemanticBD-labels-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityAnchorCreateInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_ANCHOR_CREATE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityAnchorCreateInfoBD",
                             value->type, "VUID-XrSpatialEntityAnchorCreateInfoBD-type-type", XR_TYPE_SPATIAL_ENTITY_ANCHOR_CREATE_INFO_BD, "XR_TYPE_SPATIAL_ENTITY_ANCHOR_CREATE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityAnchorCreateInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityAnchorCreateInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityAnchorCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityAnchorCreateInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityAnchorCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityAnchorCreateInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSenseDataSnapshotBDHandle(&value->snapshot);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSenseDataSnapshotBD handle \"snapshot\" ";
            oss << HandleToHexString(value->snapshot);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityAnchorCreateInfoBD-snapshot-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAnchorSpaceCreateInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ANCHOR_SPACE_CREATE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrAnchorSpaceCreateInfoBD",
                             value->type, "VUID-XrAnchorSpaceCreateInfoBD-type-type", XR_TYPE_ANCHOR_SPACE_CREATE_INFO_BD, "XR_TYPE_ANCHOR_SPACE_CREATE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSpaceCreateInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrAnchorSpaceCreateInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrAnchorSpaceCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSpaceCreateInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrAnchorSpaceCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSpaceCreateInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrAnchorBDHandle(&value->anchor);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAnchorBD handle \"anchor\" ";
            oss << HandleToHexString(value->anchor);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSpaceCreateInfoBD-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFutureCompletionEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FUTURE_COMPLETION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFutureCompletionEXT",
                             value->type, "VUID-XrFutureCompletionEXT-type-type", XR_TYPE_FUTURE_COMPLETION_EXT, "XR_TYPE_FUTURE_COMPLETION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFutureCompletionEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFutureCompletionEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFutureCompletionEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFutureCompletionEXT", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFutureCompletionEXT contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionEXT-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialAnchorPropertiesBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPATIAL_ANCHOR_PROPERTIES_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpatialAnchorPropertiesBD",
                             value->type, "VUID-XrSystemSpatialAnchorPropertiesBD-type-type", XR_TYPE_SYSTEM_SPATIAL_ANCHOR_PROPERTIES_BD, "XR_TYPE_SYSTEM_SPATIAL_ANCHOR_PROPERTIES_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialAnchorPropertiesBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpatialAnchorPropertiesBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialAnchorPropertiesBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialAnchorPropertiesBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialAnchorPropertiesBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialAnchorPropertiesBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpatialAnchor" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorCreateInfoBD",
                             value->type, "VUID-XrSpatialAnchorCreateInfoBD-type-type", XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_BD, "XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorCreateInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoBD-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateCompletionBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_CREATE_COMPLETION_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorCreateCompletionBD",
                             value->type, "VUID-XrSpatialAnchorCreateCompletionBD-type-type", XR_TYPE_SPATIAL_ANCHOR_CREATE_COMPLETION_BD, "XR_TYPE_SPATIAL_ANCHOR_CREATE_COMPLETION_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateCompletionBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorCreateCompletionBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateCompletionBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateCompletionBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateCompletionBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateCompletionBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAnchorCreateCompletionBD", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAnchorCreateCompletionBD contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateCompletionBD-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrAnchorBDHandle(&value->anchor);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAnchorBD handle \"anchor\" ";
            oss << HandleToHexString(value->anchor);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateCompletionBD-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorPersistInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_PERSIST_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorPersistInfoBD",
                             value->type, "VUID-XrSpatialAnchorPersistInfoBD-type-type", XR_TYPE_SPATIAL_ANCHOR_PERSIST_INFO_BD, "XR_TYPE_SPATIAL_ANCHOR_PERSIST_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorPersistInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorPersistInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorPersistInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrPersistenceLocationBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAnchorPersistInfoBD", "location", objects_info, value->location)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAnchorPersistInfoBD contains invalid XrPersistenceLocationBD \"location\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->location));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistInfoBD-location-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrAnchorBDHandle(&value->anchor);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAnchorBD handle \"anchor\" ";
            oss << HandleToHexString(value->anchor);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorPersistInfoBD-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorUnpersistInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_UNPERSIST_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorUnpersistInfoBD",
                             value->type, "VUID-XrSpatialAnchorUnpersistInfoBD-type-type", XR_TYPE_SPATIAL_ANCHOR_UNPERSIST_INFO_BD, "XR_TYPE_SPATIAL_ANCHOR_UNPERSIST_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorUnpersistInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorUnpersistInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorUnpersistInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorUnpersistInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorUnpersistInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorUnpersistInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrPersistenceLocationBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAnchorUnpersistInfoBD", "location", objects_info, value->location)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAnchorUnpersistInfoBD contains invalid XrPersistenceLocationBD \"location\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->location));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorUnpersistInfoBD-location-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrAnchorBDHandle(&value->anchor);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAnchorBD handle \"anchor\" ";
            oss << HandleToHexString(value->anchor);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorUnpersistInfoBD-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialAnchorSharingPropertiesBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPATIAL_ANCHOR_SHARING_PROPERTIES_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpatialAnchorSharingPropertiesBD",
                             value->type, "VUID-XrSystemSpatialAnchorSharingPropertiesBD-type-type", XR_TYPE_SYSTEM_SPATIAL_ANCHOR_SHARING_PROPERTIES_BD, "XR_TYPE_SYSTEM_SPATIAL_ANCHOR_SHARING_PROPERTIES_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialAnchorSharingPropertiesBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpatialAnchorSharingPropertiesBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialAnchorSharingPropertiesBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialAnchorSharingPropertiesBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialAnchorSharingPropertiesBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialAnchorSharingPropertiesBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpatialAnchorSharing" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorShareInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_SHARE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorShareInfoBD",
                             value->type, "VUID-XrSpatialAnchorShareInfoBD-type-type", XR_TYPE_SPATIAL_ANCHOR_SHARE_INFO_BD, "XR_TYPE_SPATIAL_ANCHOR_SHARE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorShareInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorShareInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorShareInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorShareInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorShareInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorShareInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrAnchorBDHandle(&value->anchor);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrAnchorBD handle \"anchor\" ";
            oss << HandleToHexString(value->anchor);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorShareInfoBD-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSharedSpatialAnchorDownloadInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SHARED_SPATIAL_ANCHOR_DOWNLOAD_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSharedSpatialAnchorDownloadInfoBD",
                             value->type, "VUID-XrSharedSpatialAnchorDownloadInfoBD-type-type", XR_TYPE_SHARED_SPATIAL_ANCHOR_DOWNLOAD_INFO_BD, "XR_TYPE_SHARED_SPATIAL_ANCHOR_DOWNLOAD_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSharedSpatialAnchorDownloadInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSharedSpatialAnchorDownloadInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSharedSpatialAnchorDownloadInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSharedSpatialAnchorDownloadInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSharedSpatialAnchorDownloadInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSharedSpatialAnchorDownloadInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialScenePropertiesBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPATIAL_SCENE_PROPERTIES_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpatialScenePropertiesBD",
                             value->type, "VUID-XrSystemSpatialScenePropertiesBD-type-type", XR_TYPE_SYSTEM_SPATIAL_SCENE_PROPERTIES_BD, "XR_TYPE_SYSTEM_SPATIAL_SCENE_PROPERTIES_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialScenePropertiesBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpatialScenePropertiesBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialScenePropertiesBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialScenePropertiesBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialScenePropertiesBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialScenePropertiesBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpatialScene" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneCaptureInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_CAPTURE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneCaptureInfoBD",
                             value->type, "VUID-XrSceneCaptureInfoBD-type-type", XR_TYPE_SCENE_CAPTURE_INFO_BD, "XR_TYPE_SCENE_CAPTURE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneCaptureInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneCaptureInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneCaptureInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneCaptureInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneCaptureInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneCaptureInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialMeshPropertiesBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPATIAL_MESH_PROPERTIES_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpatialMeshPropertiesBD",
                             value->type, "VUID-XrSystemSpatialMeshPropertiesBD-type-type", XR_TYPE_SYSTEM_SPATIAL_MESH_PROPERTIES_BD, "XR_TYPE_SYSTEM_SPATIAL_MESH_PROPERTIES_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialMeshPropertiesBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpatialMeshPropertiesBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialMeshPropertiesBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialMeshPropertiesBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialMeshPropertiesBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialMeshPropertiesBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpatialMesh" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataProviderCreateInfoSpatialMeshBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_SPATIAL_MESH_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSenseDataProviderCreateInfoSpatialMeshBD",
                             value->type, "VUID-XrSenseDataProviderCreateInfoSpatialMeshBD-type-type", XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_SPATIAL_MESH_BD, "XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_SPATIAL_MESH_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderCreateInfoSpatialMeshBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSenseDataProviderCreateInfoSpatialMeshBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSenseDataProviderCreateInfoSpatialMeshBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderCreateInfoSpatialMeshBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSenseDataProviderCreateInfoSpatialMeshBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderCreateInfoSpatialMeshBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult spatial_mesh_config_flags_bd_result = ValidateXrSpatialMeshConfigFlagsBD(value->configFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == spatial_mesh_config_flags_bd_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrSenseDataProviderCreateInfoSpatialMeshBD invalid member XrSpatialMeshConfigFlagsBD \"configFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->configFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderCreateInfoSpatialMeshBD-configFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Make sure the enum type XrSpatialMeshLodBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSenseDataProviderCreateInfoSpatialMeshBD", "lod", objects_info, value->lod)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSenseDataProviderCreateInfoSpatialMeshBD contains invalid XrSpatialMeshLodBD \"lod\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->lod));
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataProviderCreateInfoSpatialMeshBD-lod-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFuturePollResultProgressBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FUTURE_POLL_RESULT_PROGRESS_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFuturePollResultProgressBD",
                             value->type, "VUID-XrFuturePollResultProgressBD-type-type", XR_TYPE_FUTURE_POLL_RESULT_PROGRESS_BD, "XR_TYPE_FUTURE_POLL_RESULT_PROGRESS_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFuturePollResultProgressBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFuturePollResultProgressBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFuturePollResultProgressBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFuturePollResultProgressBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFuturePollResultProgressBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFuturePollResultProgressBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "isSupported" because this struct is returned only.
    // Skip checking member "progressPercentage" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialPlanePropertiesBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPATIAL_PLANE_PROPERTIES_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpatialPlanePropertiesBD",
                             value->type, "VUID-XrSystemSpatialPlanePropertiesBD-type-type", XR_TYPE_SYSTEM_SPATIAL_PLANE_PROPERTIES_BD, "XR_TYPE_SYSTEM_SPATIAL_PLANE_PROPERTIES_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialPlanePropertiesBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpatialPlanePropertiesBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialPlanePropertiesBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialPlanePropertiesBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialPlanePropertiesBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialPlanePropertiesBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpatialPlane" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityComponentDataPlaneOrientationBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_PLANE_ORIENTATION_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityComponentDataPlaneOrientationBD",
                             value->type, "VUID-XrSpatialEntityComponentDataPlaneOrientationBD-type-type", XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_PLANE_ORIENTATION_BD, "XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_PLANE_ORIENTATION_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataPlaneOrientationBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityComponentDataPlaneOrientationBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataPlaneOrientationBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataPlaneOrientationBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityComponentDataPlaneOrientationBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataPlaneOrientationBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrPlaneOrientationBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialEntityComponentDataPlaneOrientationBD", "orientation", objects_info, value->orientation)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialEntityComponentDataPlaneOrientationBD contains invalid XrPlaneOrientationBD \"orientation\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->orientation));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityComponentDataPlaneOrientationBD-orientation-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSenseDataFilterPlaneOrientationBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SENSE_DATA_FILTER_PLANE_ORIENTATION_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSenseDataFilterPlaneOrientationBD",
                             value->type, "VUID-XrSenseDataFilterPlaneOrientationBD-type-type", XR_TYPE_SENSE_DATA_FILTER_PLANE_ORIENTATION_BD, "XR_TYPE_SENSE_DATA_FILTER_PLANE_ORIENTATION_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterPlaneOrientationBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSenseDataFilterPlaneOrientationBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSenseDataFilterPlaneOrientationBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterPlaneOrientationBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSenseDataFilterPlaneOrientationBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterPlaneOrientationBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->orientationCount && nullptr != value->orientations) {
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterPlaneOrientationBD-orientationCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSenseDataFilterPlaneOrientationBD member orientationCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->orientations && 0 != value->orientationCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSenseDataFilterPlaneOrientationBD-orientations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSenseDataFilterPlaneOrientationBD contains invalid NULL for XrPlaneOrientationBD \"orientations\" is which not "
                            "optional since \"orientationCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrSenseDataFilterPlaneOrientationBD-orientations-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAudioRendererCreateInfoBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_AUDIO_RENDERER_CREATE_INFO_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAudioRendererCreateInfoBD",
                             value->type, "VUID-XrSpatialAudioRendererCreateInfoBD-type-type", XR_TYPE_SPATIAL_AUDIO_RENDERER_CREATE_INFO_BD, "XR_TYPE_SPATIAL_AUDIO_RENDERER_CREATE_INFO_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAudioRendererCreateInfoBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAudioRendererCreateInfoBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAudioRendererCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAudioRendererCreateInfoBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAudioRendererCreateInfoBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAudioRendererCreateInfoBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrAudioSampleRateBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialAudioRendererCreateInfoBD", "sampleRate", objects_info, value->sampleRate)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialAudioRendererCreateInfoBD contains invalid XrAudioSampleRateBD \"sampleRate\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->sampleRate));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialAudioRendererCreateInfoBD-sampleRate-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAudioBufferBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_AUDIO_BUFFER_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrAudioBufferBD",
                             value->type, "VUID-XrAudioBufferBD-type-type", XR_TYPE_AUDIO_BUFFER_BD, "XR_TYPE_AUDIO_BUFFER_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrAudioBufferBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrAudioBufferBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrAudioBufferBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAudioBufferBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrAudioBufferBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAudioBufferBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrAudioBufferChannelLayoutBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrAudioBufferBD", "channelLayout", objects_info, value->channelLayout)) {
        std::ostringstream oss_enum;
        oss_enum << "XrAudioBufferBD contains invalid XrAudioBufferChannelLayoutBD \"channelLayout\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->channelLayout));
        CoreValidLogMessage(instance_info, "VUID-XrAudioBufferBD-channelLayout-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->bufferLength && nullptr != value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrAudioBufferBD-bufferLength-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrAudioBufferBD member bufferLength is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->buffer && 0 != value->bufferLength) {
        CoreValidLogMessage(instance_info, "VUID-XrAudioBufferBD-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrAudioBufferBD contains invalid NULL for float \"buffer\" is which not "
                            "optional since \"bufferLength\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrAudioBufferBD-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectDirectivityCardioidBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_OBJECT_DIRECTIVITY_CARDIOID_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundObjectDirectivityCardioidBD",
                             value->type, "VUID-XrSoundObjectDirectivityCardioidBD-type-type", XR_TYPE_SOUND_OBJECT_DIRECTIVITY_CARDIOID_BD, "XR_TYPE_SOUND_OBJECT_DIRECTIVITY_CARDIOID_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDirectivityCardioidBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundObjectDirectivityCardioidBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectDirectivityCardioidBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDirectivityCardioidBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectDirectivityCardioidBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDirectivityCardioidBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectShapeSphereBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_OBJECT_SHAPE_SPHERE_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundObjectShapeSphereBD",
                             value->type, "VUID-XrSoundObjectShapeSphereBD-type-type", XR_TYPE_SOUND_OBJECT_SHAPE_SPHERE_BD, "XR_TYPE_SOUND_OBJECT_SHAPE_SPHERE_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectShapeSphereBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundObjectShapeSphereBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectShapeSphereBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectShapeSphereBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectShapeSphereBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectShapeSphereBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAttenuationCurvePointBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectDistanceAttenuationCurveBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_CURVE_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundObjectDistanceAttenuationCurveBD",
                             value->type, "VUID-XrSoundObjectDistanceAttenuationCurveBD-type-type", XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_CURVE_BD, "XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_CURVE_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationCurveBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundObjectDistanceAttenuationCurveBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectDistanceAttenuationCurveBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationCurveBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectDistanceAttenuationCurveBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationCurveBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->curvePointCount && nullptr != value->curvePoints) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationCurveBD-curvePointCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSoundObjectDistanceAttenuationCurveBD member curvePointCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->curvePoints && 0 != value->curvePointCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationCurveBD-curvePoints-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundObjectDistanceAttenuationCurveBD contains invalid NULL for XrAttenuationCurvePointBD \"curvePoints\" is which not "
                            "optional since \"curvePointCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSoundObjectDistanceAttenuationCurveBD-curvePoints-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectDistanceAttenuationBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundObjectDistanceAttenuationBD",
                             value->type, "VUID-XrSoundObjectDistanceAttenuationBD-type-type", XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_BD, "XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundObjectDistanceAttenuationBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectDistanceAttenuationBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectDistanceAttenuationBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSoundObjectDistanceAttenuationTypeBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSoundObjectDistanceAttenuationBD", "distanceAttenuationType", objects_info, value->distanceAttenuationType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSoundObjectDistanceAttenuationBD contains invalid XrSoundObjectDistanceAttenuationTypeBD \"distanceAttenuationType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->distanceAttenuationType));
        CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationBD-distanceAttenuationType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Validate that the structure XrSoundObjectDistanceAttenuationCurveBD is valid
    if (nullptr != value->customDistanceAttenuationCurve) {
        xr_result = ValidateXrStruct(instance_info, command_name,
                                                        objects_info, check_members, true, value->customDistanceAttenuationCurve);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectDistanceAttenuationBD-customDistanceAttenuationCurve-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrSoundObjectDistanceAttenuationBD member customDistanceAttenuationCurve is invalid");
            return xr_result;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObjectConfigBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_OBJECT_CONFIG_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundObjectConfigBD",
                             value->type, "VUID-XrSoundObjectConfigBD-type-type", XR_TYPE_SOUND_OBJECT_CONFIG_BD, "XR_TYPE_SOUND_OBJECT_CONFIG_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SOUND_OBJECT_DIRECTIVITY_CARDIOID_BD);
        valid_ext_structs.insert(XR_TYPE_SOUND_OBJECT_SHAPE_SPHERE_BD);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectConfigBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundObjectConfigBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectConfigBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectConfigBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundObjectConfigBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectConfigBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObjectConfigBD-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->directSoundAttenuation) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObjectConfigBD-directSoundAttenuation-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundObjectConfigBD contains invalid NULL for XrSoundObjectDistanceAttenuationBD \"directSoundAttenuation\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Validate that the structure XrSoundObjectDistanceAttenuationBD is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, value->directSoundAttenuation);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObjectConfigBD-directSoundAttenuation-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSoundObjectConfigBD member directSoundAttenuation is invalid");
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->indirectSoundAttenuation) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObjectConfigBD-indirectSoundAttenuation-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundObjectConfigBD contains invalid NULL for XrSoundObjectDistanceAttenuationBD \"indirectSoundAttenuation\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Validate that the structure XrSoundObjectDistanceAttenuationBD is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, value->indirectSoundAttenuation);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObjectConfigBD-indirectSoundAttenuation-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSoundObjectConfigBD member indirectSoundAttenuation is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundFieldConfigBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_FIELD_CONFIG_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundFieldConfigBD",
                             value->type, "VUID-XrSoundFieldConfigBD-type-type", XR_TYPE_SOUND_FIELD_CONFIG_BD, "XR_TYPE_SOUND_FIELD_CONFIG_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_AMBIX_BD);
        valid_ext_structs.insert(XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_FUMA_BD);
        valid_ext_structs.insert(XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_SURROUND_BD);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldConfigBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundFieldConfigBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundFieldConfigBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldConfigBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundFieldConfigBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldConfigBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldConfigBD-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundFieldChannelDefinitionSurroundBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_SURROUND_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundFieldChannelDefinitionSurroundBD",
                             value->type, "VUID-XrSoundFieldChannelDefinitionSurroundBD-type-type", XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_SURROUND_BD, "XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_SURROUND_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionSurroundBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundFieldChannelDefinitionSurroundBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundFieldChannelDefinitionSurroundBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionSurroundBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundFieldChannelDefinitionSurroundBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionSurroundBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSoundFieldChannelMaskSurroundBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSoundFieldChannelDefinitionSurroundBD", "channelMask", objects_info, value->channelMask)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSoundFieldChannelDefinitionSurroundBD contains invalid XrSoundFieldChannelMaskSurroundBD \"channelMask\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->channelMask));
        CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionSurroundBD-channelMask-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundFieldChannelDefinitionAmbixBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_AMBIX_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundFieldChannelDefinitionAmbixBD",
                             value->type, "VUID-XrSoundFieldChannelDefinitionAmbixBD-type-type", XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_AMBIX_BD, "XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_AMBIX_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionAmbixBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundFieldChannelDefinitionAmbixBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundFieldChannelDefinitionAmbixBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionAmbixBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundFieldChannelDefinitionAmbixBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionAmbixBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSoundFieldChannelMaskAmbixBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSoundFieldChannelDefinitionAmbixBD", "channelMask", objects_info, value->channelMask)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSoundFieldChannelDefinitionAmbixBD contains invalid XrSoundFieldChannelMaskAmbixBD \"channelMask\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->channelMask));
        CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionAmbixBD-channelMask-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundFieldChannelDefinitionFumaBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_FUMA_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundFieldChannelDefinitionFumaBD",
                             value->type, "VUID-XrSoundFieldChannelDefinitionFumaBD-type-type", XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_FUMA_BD, "XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_FUMA_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionFumaBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundFieldChannelDefinitionFumaBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundFieldChannelDefinitionFumaBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionFumaBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundFieldChannelDefinitionFumaBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionFumaBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSoundFieldChannelMaskFumaBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSoundFieldChannelDefinitionFumaBD", "channelMask", objects_info, value->channelMask)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSoundFieldChannelDefinitionFumaBD contains invalid XrSoundFieldChannelMaskFumaBD \"channelMask\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->channelMask));
        CoreValidLogMessage(instance_info, "VUID-XrSoundFieldChannelDefinitionFumaBD-channelMask-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundTriangleMeshBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_TRIANGLE_MESH_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundTriangleMeshBD",
                             value->type, "VUID-XrSoundTriangleMeshBD-type-type", XR_TYPE_SOUND_TRIANGLE_MESH_BD, "XR_TYPE_SOUND_TRIANGLE_MESH_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundTriangleMeshBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundTriangleMeshBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundTriangleMeshBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundTriangleMeshBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundTriangleMeshBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundTriangleMeshBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->vertexCount && nullptr != value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundTriangleMeshBD-vertexCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSoundTriangleMeshBD member vertexCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->vertices && 0 != value->vertexCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundTriangleMeshBD-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundTriangleMeshBD contains invalid NULL for XrVector3f \"vertices\" is which not "
                            "optional since \"vertexCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSoundTriangleMeshBD-vertices-parameter" type
    // Non-optional array length must be non-zero
    if (0 >= value->indexCount && nullptr != value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundTriangleMeshBD-indexCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSoundTriangleMeshBD member indexCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->indices && 0 != value->indexCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundTriangleMeshBD-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundTriangleMeshBD contains invalid NULL for uint32_t \"indices\" is which not "
                            "optional since \"indexCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSoundTriangleMeshBD-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObstacleConfigBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_OBSTACLE_CONFIG_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundObstacleConfigBD",
                             value->type, "VUID-XrSoundObstacleConfigBD-type-type", XR_TYPE_SOUND_OBSTACLE_CONFIG_BD, "XR_TYPE_SOUND_OBSTACLE_CONFIG_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleConfigBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundObstacleConfigBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundObstacleConfigBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleConfigBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundObstacleConfigBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleConfigBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleConfigBD-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Non-optional array length must be non-zero
    if (0 >= value->materialCount && nullptr != value->materials) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleConfigBD-materialCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSoundObstacleConfigBD member materialCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->materials && 0 != value->materialCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleConfigBD-materials-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundObstacleConfigBD contains invalid NULL for XrSoundObstacleMaterialBD \"materials\" is which not "
                            "optional since \"materialCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->materials) {
        for (uint32_t value_materials_inc = 0; value_materials_inc < value->materialCount; ++value_materials_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSoundObstacleMaterialBDHandle(&value->materials[value_materials_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSoundObstacleMaterialBD handle \"materials\" ";
                    oss << HandleToHexString(value->materials[value_materials_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleConfigBD-materials-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSoundObstacleMaterialConfigBD* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SOUND_OBSTACLE_MATERIAL_CONFIG_BD) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSoundObstacleMaterialConfigBD",
                             value->type, "VUID-XrSoundObstacleMaterialConfigBD-type-type", XR_TYPE_SOUND_OBSTACLE_MATERIAL_CONFIG_BD, "XR_TYPE_SOUND_OBSTACLE_MATERIAL_CONFIG_BD");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleMaterialConfigBD-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSoundObstacleMaterialConfigBD struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSoundObstacleMaterialConfigBD : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleMaterialConfigBD-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSoundObstacleMaterialConfigBD : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleMaterialConfigBD-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSoundObstacleMaterialTypeBD value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSoundObstacleMaterialConfigBD", "materialType", objects_info, value->materialType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSoundObstacleMaterialConfigBD contains invalid XrSoundObstacleMaterialTypeBD \"materialType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->materialType));
        CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleMaterialConfigBD-materialType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->bandCount && nullptr != value->bandTransmissions) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleMaterialConfigBD-bandCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSoundObstacleMaterialConfigBD member bandCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->bandFrequencies && 0 != value->bandCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleMaterialConfigBD-bandFrequencies-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundObstacleMaterialConfigBD contains invalid NULL for float \"bandFrequencies\" is which not "
                            "optional since \"bandCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSoundObstacleMaterialConfigBD-bandFrequencies-parameter" type
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->bandAbsorptions && 0 != value->bandCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleMaterialConfigBD-bandAbsorptions-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundObstacleMaterialConfigBD contains invalid NULL for float \"bandAbsorptions\" is which not "
                            "optional since \"bandCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSoundObstacleMaterialConfigBD-bandAbsorptions-parameter" type
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->bandScatterings && 0 != value->bandCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleMaterialConfigBD-bandScatterings-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundObstacleMaterialConfigBD contains invalid NULL for float \"bandScatterings\" is which not "
                            "optional since \"bandCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSoundObstacleMaterialConfigBD-bandScatterings-parameter" type
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->bandTransmissions && 0 != value->bandCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSoundObstacleMaterialConfigBD-bandTransmissions-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSoundObstacleMaterialConfigBD contains invalid NULL for float \"bandTransmissions\" is which not "
                            "optional since \"bandCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSoundObstacleMaterialConfigBD-bandTransmissions-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingDataSourceInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandTrackingDataSourceInfoEXT",
                             value->type, "VUID-XrHandTrackingDataSourceInfoEXT-type-type", XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT, "XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingDataSourceInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandTrackingDataSourceInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingDataSourceInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingDataSourceInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingDataSourceInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingDataSourceInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->requestedDataSourceCount is non-zero
    if (0 != value->requestedDataSourceCount && nullptr == value->requestedDataSources) {
        CoreValidLogMessage(instance_info, "VUID-XrHandTrackingDataSourceInfoEXT-requestedDataSources-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHandTrackingDataSourceInfoEXT member requestedDataSourceCount is NULL, but value->requestedDataSourceCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->requestedDataSources && 0 != value->requestedDataSourceCount) {
        CoreValidLogMessage(instance_info, "VUID-XrHandTrackingDataSourceInfoEXT-requestedDataSources-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrHandTrackingDataSourceInfoEXT contains invalid NULL for XrHandTrackingDataSourceEXT \"requestedDataSources\" is which not "
                            "optional since \"requestedDataSourceCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrHandTrackingDataSourceInfoEXT-requestedDataSources-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHandTrackingDataSourceStateEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHandTrackingDataSourceStateEXT",
                             value->type, "VUID-XrHandTrackingDataSourceStateEXT-type-type", XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT, "XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingDataSourceStateEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHandTrackingDataSourceStateEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingDataSourceStateEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingDataSourceStateEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHandTrackingDataSourceStateEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHandTrackingDataSourceStateEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "isActive" because this struct is returned only.
    // Skip checking member "dataSource" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPlaneDetectionPropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemPlaneDetectionPropertiesEXT",
                             value->type, "VUID-XrSystemPlaneDetectionPropertiesEXT-type-type", XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT, "XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemPlaneDetectionPropertiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemPlaneDetectionPropertiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemPlaneDetectionPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPlaneDetectionPropertiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemPlaneDetectionPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPlaneDetectionPropertiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportedFeatures" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPlaneDetectorCreateInfoEXT",
                             value->type, "VUID-XrPlaneDetectorCreateInfoEXT-type-type", XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT, "XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPlaneDetectorCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult plane_detector_flags_ext_result = ValidateXrPlaneDetectorFlagsEXT(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == plane_detector_flags_ext_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrPlaneDetectorCreateInfoEXT invalid member XrPlaneDetectorFlagsEXT \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorCreateInfoEXT-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorBeginInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPlaneDetectorBeginInfoEXT",
                             value->type, "VUID-XrPlaneDetectorBeginInfoEXT-type-type", XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT, "XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorBeginInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPlaneDetectorBeginInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorBeginInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorBeginInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorBeginInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorBeginInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorBeginInfoEXT-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Optional array must be non-NULL when value->orientationCount is non-zero
    if (0 != value->orientationCount && nullptr == value->orientations) {
        CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorBeginInfoEXT-orientations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPlaneDetectorBeginInfoEXT member orientationCount is NULL, but value->orientationCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->orientations) {
        for (uint32_t value_orientations_inc = 0; value_orientations_inc < value->orientationCount; ++value_orientations_inc) {
            // Make sure the enum type XrPlaneDetectorOrientationEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrPlaneDetectorBeginInfoEXT", "orientations", objects_info, value->orientations[value_orientations_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrPlaneDetectorBeginInfoEXT contains invalid XrPlaneDetectorOrientationEXT \"orientations\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->orientations[value_orientations_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorBeginInfoEXT-orientations-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Optional array must be non-NULL when value->semanticTypeCount is non-zero
    if (0 != value->semanticTypeCount && nullptr == value->semanticTypes) {
        CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorBeginInfoEXT-semanticTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPlaneDetectorBeginInfoEXT member semanticTypeCount is NULL, but value->semanticTypeCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->semanticTypes) {
        for (uint32_t value_semantictypes_inc = 0; value_semantictypes_inc < value->semanticTypeCount; ++value_semantictypes_inc) {
            // Make sure the enum type XrPlaneDetectorSemanticTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrPlaneDetectorBeginInfoEXT", "semanticTypes", objects_info, value->semanticTypes[value_semantictypes_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrPlaneDetectorBeginInfoEXT contains invalid XrPlaneDetectorSemanticTypeEXT \"semanticTypes\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->semanticTypes[value_semantictypes_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorBeginInfoEXT-semanticTypes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorGetInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPlaneDetectorGetInfoEXT",
                             value->type, "VUID-XrPlaneDetectorGetInfoEXT-type-type", XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT, "XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorGetInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPlaneDetectorGetInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorGetInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorGetInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorGetInfoEXT-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorLocationEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PLANE_DETECTOR_LOCATION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPlaneDetectorLocationEXT",
                             value->type, "VUID-XrPlaneDetectorLocationEXT-type-type", XR_TYPE_PLANE_DETECTOR_LOCATION_EXT, "XR_TYPE_PLANE_DETECTOR_LOCATION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPlaneDetectorLocationEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorLocationEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorLocationEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult space_location_flags_result = ValidateXrSpaceLocationFlags(value->locationFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == space_location_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrPlaneDetectorLocationEXT invalid member XrSpaceLocationFlags \"locationFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->locationFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationEXT-locationFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Make sure the enum type XrPlaneDetectorOrientationEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrPlaneDetectorLocationEXT", "orientation", objects_info, value->orientation)) {
        std::ostringstream oss_enum;
        oss_enum << "XrPlaneDetectorLocationEXT contains invalid XrPlaneDetectorOrientationEXT \"orientation\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->orientation));
        CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationEXT-orientation-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrPlaneDetectorSemanticTypeEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrPlaneDetectorLocationEXT", "semanticType", objects_info, value->semanticType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrPlaneDetectorLocationEXT contains invalid XrPlaneDetectorSemanticTypeEXT \"semanticType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->semanticType));
        CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationEXT-semanticType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorLocationsEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPlaneDetectorLocationsEXT",
                             value->type, "VUID-XrPlaneDetectorLocationsEXT-type-type", XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT, "XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationsEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPlaneDetectorLocationsEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorLocationsEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationsEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorLocationsEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationsEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->planeLocationCapacityInput is non-zero
    if (0 != value->planeLocationCapacityInput && nullptr == value->planeLocations) {
        CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationsEXT-planeLocations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPlaneDetectorLocationsEXT member planeLocationCapacityInput is NULL, but value->planeLocationCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->planeLocations) {
        for (uint32_t value_planelocations_inc = 0; value_planelocations_inc < value->planeLocationCapacityInput; ++value_planelocations_inc) {
            // Validate that the structure XrPlaneDetectorLocationEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->planeLocations[value_planelocations_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorLocationsEXT-planeLocations-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrPlaneDetectorLocationsEXT member planeLocations is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPlaneDetectorPolygonBufferEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPlaneDetectorPolygonBufferEXT",
                             value->type, "VUID-XrPlaneDetectorPolygonBufferEXT-type-type", XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT, "XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorPolygonBufferEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPlaneDetectorPolygonBufferEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorPolygonBufferEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorPolygonBufferEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPlaneDetectorPolygonBufferEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorPolygonBufferEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrPlaneDetectorPolygonBufferEXT-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPlaneDetectorPolygonBufferEXT member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrPlaneDetectorPolygonBufferEXT-vertices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableTrackerCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableTrackerCreateInfoANDROID",
                             value->type, "VUID-XrTrackableTrackerCreateInfoANDROID-type-type", XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID, "XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID);
        valid_ext_structs.insert(XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID);
        valid_ext_structs.insert(XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableTrackerCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableTrackerCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableTrackerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableTrackerCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableTrackerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableTrackerCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrTrackableTypeANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableTrackerCreateInfoANDROID", "trackableType", objects_info, value->trackableType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableTrackerCreateInfoANDROID contains invalid XrTrackableTypeANDROID \"trackableType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackableType));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableTrackerCreateInfoANDROID-trackableType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableGetInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_GET_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableGetInfoANDROID",
                             value->type, "VUID-XrTrackableGetInfoANDROID-type-type", XR_TYPE_TRACKABLE_GET_INFO_ANDROID, "XR_TYPE_TRACKABLE_GET_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableGetInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableGetInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableGetInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableGetInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableGetInfoANDROID-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackablePlaneANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_PLANE_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackablePlaneANDROID",
                             value->type, "VUID-XrTrackablePlaneANDROID-type-type", XR_TYPE_TRACKABLE_PLANE_ANDROID, "XR_TYPE_TRACKABLE_PLANE_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackablePlaneANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackablePlaneANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackablePlaneANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackablePlaneANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackablePlaneANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackablePlaneANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrTrackingStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackablePlaneANDROID", "trackingState", objects_info, value->trackingState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackablePlaneANDROID contains invalid XrTrackingStateANDROID \"trackingState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingState));
        CoreValidLogMessage(instance_info, "VUID-XrTrackablePlaneANDROID-trackingState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrPlaneTypeANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackablePlaneANDROID", "planeType", objects_info, value->planeType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackablePlaneANDROID contains invalid XrPlaneTypeANDROID \"planeType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->planeType));
        CoreValidLogMessage(instance_info, "VUID-XrTrackablePlaneANDROID-planeType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrPlaneLabelANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackablePlaneANDROID", "planeLabel", objects_info, value->planeLabel)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackablePlaneANDROID contains invalid XrPlaneLabelANDROID \"planeLabel\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->planeLabel));
        CoreValidLogMessage(instance_info, "VUID-XrTrackablePlaneANDROID-planeLabel-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackablePlaneANDROID-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrTrackablePlaneANDROID member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrTrackablePlaneANDROID-vertexCountOutput-parameter" type
    // NOTE: Can't validate "VUID-XrTrackablePlaneANDROID-vertices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAnchorSpaceCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrAnchorSpaceCreateInfoANDROID",
                             value->type, "VUID-XrAnchorSpaceCreateInfoANDROID-type-type", XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID, "XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSpaceCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrAnchorSpaceCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrAnchorSpaceCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSpaceCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrAnchorSpaceCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSpaceCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSpaceCreateInfoANDROID-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemTrackablesPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_TRACKABLES_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemTrackablesPropertiesANDROID",
                             value->type, "VUID-XrSystemTrackablesPropertiesANDROID-type-type", XR_TYPE_SYSTEM_TRACKABLES_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_TRACKABLES_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemTrackablesPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemTrackablesPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemTrackablesPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemTrackablesPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemTrackablesPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemTrackablesPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsAnchor" because this struct is returned only.
    // Skip checking member "maxAnchors" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEyeTrackingPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemEyeTrackingPropertiesANDROID",
                             value->type, "VUID-XrSystemEyeTrackingPropertiesANDROID-type-type", XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemEyeTrackingPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemEyeTrackingPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemEyeTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEyeTrackingPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemEyeTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEyeTrackingPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsEyeTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrEyeStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrEyeANDROID", "eyeState", objects_info, value->eyeState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrEyeANDROID contains invalid XrEyeStateANDROID \"eyeState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->eyeState));
        CoreValidLogMessage(instance_info, "VUID-XrEyeANDROID-eyeState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EYES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEyesANDROID",
                             value->type, "VUID-XrEyesANDROID-type-type", XR_TYPE_EYES_ANDROID, "XR_TYPE_EYES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEyesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEyesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEyesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEyesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    for (uint32_t value_eyes_inc = 0; value_eyes_inc < XR_EYE_MAX_ANDROID; ++value_eyes_inc) {
        // Validate that the structure XrEyeANDROID is valid
        xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                         check_members, true, &value->eyes[value_eyes_inc]);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEyesANDROID-eyes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info,
                                "Structure XrEyesANDROID member eyes is invalid");
            return xr_result;
        }
    }
    // Make sure the enum type XrEyeTrackingModeANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrEyesANDROID", "mode", objects_info, value->mode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrEyesANDROID contains invalid XrEyeTrackingModeANDROID \"mode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->mode));
        CoreValidLogMessage(instance_info, "VUID-XrEyesANDROID-mode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyesGetInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EYES_GET_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEyesGetInfoANDROID",
                             value->type, "VUID-XrEyesGetInfoANDROID-type-type", XR_TYPE_EYES_GET_INFO_ANDROID, "XR_TYPE_EYES_GET_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEyesGetInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEyesGetInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEyesGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyesGetInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEyesGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyesGetInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrEyesGetInfoANDROID-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEyeTrackerCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEyeTrackerCreateInfoANDROID",
                             value->type, "VUID-XrEyeTrackerCreateInfoANDROID-type-type", XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID, "XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEyeTrackerCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEyeTrackerCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEyeTrackerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeTrackerCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEyeTrackerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEyeTrackerCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDeviceAnchorPersistenceCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrDeviceAnchorPersistenceCreateInfoANDROID",
                             value->type, "VUID-XrDeviceAnchorPersistenceCreateInfoANDROID-type-type", XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID, "XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrDeviceAnchorPersistenceCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrDeviceAnchorPersistenceCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrDeviceAnchorPersistenceCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDeviceAnchorPersistenceCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrDeviceAnchorPersistenceCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDeviceAnchorPersistenceCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPersistedAnchorSpaceCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPersistedAnchorSpaceCreateInfoANDROID",
                             value->type, "VUID-XrPersistedAnchorSpaceCreateInfoANDROID-type-type", XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID, "XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPersistedAnchorSpaceCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPersistedAnchorSpaceCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPersistedAnchorSpaceCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPersistedAnchorSpaceCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPersistedAnchorSpaceCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPersistedAnchorSpaceCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPersistedAnchorSpaceInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPersistedAnchorSpaceInfoANDROID",
                             value->type, "VUID-XrPersistedAnchorSpaceInfoANDROID-type-type", XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID, "XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPersistedAnchorSpaceInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPersistedAnchorSpaceInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPersistedAnchorSpaceInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPersistedAnchorSpaceInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPersistedAnchorSpaceInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPersistedAnchorSpaceInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->anchor);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"anchor\" ";
            oss << HandleToHexString(value->anchor);
            CoreValidLogMessage(instance_info, "VUID-XrPersistedAnchorSpaceInfoANDROID-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemDeviceAnchorPersistencePropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemDeviceAnchorPersistencePropertiesANDROID",
                             value->type, "VUID-XrSystemDeviceAnchorPersistencePropertiesANDROID-type-type", XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemDeviceAnchorPersistencePropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemDeviceAnchorPersistencePropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemDeviceAnchorPersistencePropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemDeviceAnchorPersistencePropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemDeviceAnchorPersistencePropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemDeviceAnchorPersistencePropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsAnchorPersistence" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackerCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceTrackerCreateInfoANDROID",
                             value->type, "VUID-XrFaceTrackerCreateInfoANDROID-type-type", XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID, "XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceTrackerCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackerCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceStateGetInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_STATE_GET_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceStateGetInfoANDROID",
                             value->type, "VUID-XrFaceStateGetInfoANDROID-type-type", XR_TYPE_FACE_STATE_GET_INFO_ANDROID, "XR_TYPE_FACE_STATE_GET_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceStateGetInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceStateGetInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceStateGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceStateGetInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceStateGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceStateGetInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceStateANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_STATE_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceStateANDROID",
                             value->type, "VUID-XrFaceStateANDROID-type-type", XR_TYPE_FACE_STATE_ANDROID, "XR_TYPE_FACE_STATE_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceStateANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceStateANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceStateANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceStateANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceStateANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceStateANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->parametersCapacityInput is non-zero
    if (0 != value->parametersCapacityInput && nullptr == value->parameters) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceStateANDROID-parameters-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFaceStateANDROID member parametersCapacityInput is NULL, but value->parametersCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrFaceStateANDROID-parameters-parameter" type
    // Make sure the enum type XrFaceTrackingStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFaceStateANDROID", "faceTrackingState", objects_info, value->faceTrackingState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFaceStateANDROID contains invalid XrFaceTrackingStateANDROID \"faceTrackingState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->faceTrackingState));
        CoreValidLogMessage(instance_info, "VUID-XrFaceStateANDROID-faceTrackingState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->regionConfidencesCapacityInput is non-zero
    if (0 != value->regionConfidencesCapacityInput && nullptr == value->regionConfidences) {
        CoreValidLogMessage(instance_info, "VUID-XrFaceStateANDROID-regionConfidences-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFaceStateANDROID member regionConfidencesCapacityInput is NULL, but value->regionConfidencesCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrFaceStateANDROID-regionConfidences-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFaceTrackingPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemFaceTrackingPropertiesANDROID",
                             value->type, "VUID-XrSystemFaceTrackingPropertiesANDROID-type-type", XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemFaceTrackingPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemFaceTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemFaceTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsFaceTracking" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughCameraStatePropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PASSTHROUGH_CAMERA_STATE_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemPassthroughCameraStatePropertiesANDROID",
                             value->type, "VUID-XrSystemPassthroughCameraStatePropertiesANDROID-type-type", XR_TYPE_SYSTEM_PASSTHROUGH_CAMERA_STATE_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_PASSTHROUGH_CAMERA_STATE_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughCameraStatePropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemPassthroughCameraStatePropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughCameraStatePropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughCameraStatePropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughCameraStatePropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughCameraStatePropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsPassthroughCameraState" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughCameraStateGetInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_CAMERA_STATE_GET_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughCameraStateGetInfoANDROID",
                             value->type, "VUID-XrPassthroughCameraStateGetInfoANDROID-type-type", XR_TYPE_PASSTHROUGH_CAMERA_STATE_GET_INFO_ANDROID, "XR_TYPE_PASSTHROUGH_CAMERA_STATE_GET_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughCameraStateGetInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughCameraStateGetInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughCameraStateGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughCameraStateGetInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughCameraStateGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughCameraStateGetInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataRecommendedResolutionChangedANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_RECOMMENDED_RESOLUTION_CHANGED_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataRecommendedResolutionChangedANDROID",
                             value->type, "VUID-XrEventDataRecommendedResolutionChangedANDROID-type-type", XR_TYPE_EVENT_DATA_RECOMMENDED_RESOLUTION_CHANGED_ANDROID, "XR_TYPE_EVENT_DATA_RECOMMENDED_RESOLUTION_CHANGED_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataRecommendedResolutionChangedANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataRecommendedResolutionChangedANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataRecommendedResolutionChangedANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataRecommendedResolutionChangedANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataRecommendedResolutionChangedANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataRecommendedResolutionChangedANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughLayerCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughLayerCreateInfoANDROID",
                             value->type, "VUID-XrPassthroughLayerCreateInfoANDROID-type-type", XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID, "XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughLayerCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughLayerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughLayerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPassthroughLayerMeshANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPassthroughLayerMeshANDROID",
                             value->type, "VUID-XrPassthroughLayerMeshANDROID-type-type", XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID, "XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerMeshANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPassthroughLayerMeshANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPassthroughLayerMeshANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerMeshANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPassthroughLayerMeshANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerMeshANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrWindingOrderANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrPassthroughLayerMeshANDROID", "windingOrder", objects_info, value->windingOrder)) {
        std::ostringstream oss_enum;
        oss_enum << "XrPassthroughLayerMeshANDROID contains invalid XrWindingOrderANDROID \"windingOrder\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->windingOrder));
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerMeshANDROID-windingOrder-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->vertexCount is non-zero
    if (0 != value->vertexCount && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerMeshANDROID-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPassthroughLayerMeshANDROID member vertexCount is NULL, but value->vertexCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->vertices && 0 != value->vertexCount) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerMeshANDROID-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrPassthroughLayerMeshANDROID contains invalid NULL for XrVector3f \"vertices\" is which not "
                            "optional since \"vertexCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrPassthroughLayerMeshANDROID-vertices-parameter" type
    // Optional array must be non-NULL when value->indexCount is non-zero
    if (0 != value->indexCount && nullptr == value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerMeshANDROID-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrPassthroughLayerMeshANDROID member indexCount is NULL, but value->indexCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->indices && 0 != value->indexCount) {
        CoreValidLogMessage(instance_info, "VUID-XrPassthroughLayerMeshANDROID-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrPassthroughLayerMeshANDROID contains invalid NULL for uint16_t \"indices\" is which not "
                            "optional since \"indexCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrPassthroughLayerMeshANDROID-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCompositionLayerPassthroughANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCompositionLayerPassthroughANDROID",
                             value->type, "VUID-XrCompositionLayerPassthroughANDROID-type-type", XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID, "XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB);
        valid_ext_structs.insert(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCompositionLayerPassthroughANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerPassthroughANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCompositionLayerPassthroughANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult composition_layer_flags_result = ValidateXrCompositionLayerFlags(value->layerFlags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == composition_layer_flags_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrCompositionLayerPassthroughANDROID invalid member XrCompositionLayerFlags \"layerFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->layerFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughANDROID-layerFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughANDROID-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerANDROIDHandle(&value->layer);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrPassthroughLayerANDROID handle \"layer\" ";
            oss << HandleToHexString(value->layer);
            CoreValidLogMessage(instance_info, "VUID-XrCompositionLayerPassthroughANDROID-layer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemPassthroughLayerPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemPassthroughLayerPropertiesANDROID",
                             value->type, "VUID-XrSystemPassthroughLayerPropertiesANDROID-type-type", XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughLayerPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemPassthroughLayerPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughLayerPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughLayerPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemPassthroughLayerPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemPassthroughLayerPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsPassthroughLayer" because this struct is returned only.
    // Skip checking member "maxMeshIndexCount" because this struct is returned only.
    // Skip checking member "maxMeshVertexCount" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRaycastInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RAYCAST_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRaycastInfoANDROID",
                             value->type, "VUID-XrRaycastInfoANDROID-type-type", XR_TYPE_RAYCAST_INFO_ANDROID, "XR_TYPE_RAYCAST_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRaycastInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRaycastInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRaycastInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRaycastInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRaycastInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRaycastInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->trackerCount && nullptr != value->trackers) {
        CoreValidLogMessage(instance_info, "VUID-XrRaycastInfoANDROID-trackerCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRaycastInfoANDROID member trackerCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->trackers && 0 != value->trackerCount) {
        CoreValidLogMessage(instance_info, "VUID-XrRaycastInfoANDROID-trackers-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrRaycastInfoANDROID contains invalid NULL for XrTrackableTrackerANDROID \"trackers\" is which not "
                            "optional since \"trackerCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->trackers) {
        for (uint32_t value_trackers_inc = 0; value_trackers_inc < value->trackerCount; ++value_trackers_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&value->trackers[value_trackers_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrTrackableTrackerANDROID handle \"trackers\" ";
                    oss << HandleToHexString(value->trackers[value_trackers_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrRaycastInfoANDROID-trackers-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrRaycastInfoANDROID-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRaycastHitResultANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Skip checking member "trackable" because this struct is returned only.
    // Skip checking member "pose" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRaycastHitResultsANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRaycastHitResultsANDROID",
                             value->type, "VUID-XrRaycastHitResultsANDROID-type-type", XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID, "XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRaycastHitResultsANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRaycastHitResultsANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRaycastHitResultsANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRaycastHitResultsANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRaycastHitResultsANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRaycastHitResultsANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->resultsCapacityInput is non-zero
    if (0 != value->resultsCapacityInput && nullptr == value->results) {
        CoreValidLogMessage(instance_info, "VUID-XrRaycastHitResultsANDROID-results-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRaycastHitResultsANDROID member resultsCapacityInput is NULL, but value->resultsCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->results) {
        for (uint32_t value_results_inc = 0; value_results_inc < value->resultsCapacityInput; ++value_results_inc) {
            // Validate that the structure XrRaycastHitResultANDROID is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->results[value_results_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrRaycastHitResultsANDROID-results-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrRaycastHitResultsANDROID member results is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPerformanceMetricsStateANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPerformanceMetricsStateANDROID",
                             value->type, "VUID-XrPerformanceMetricsStateANDROID-type-type", XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID, "XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsStateANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPerformanceMetricsStateANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPerformanceMetricsStateANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsStateANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPerformanceMetricsStateANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsStateANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPerformanceMetricsCounterANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPerformanceMetricsCounterANDROID",
                             value->type, "VUID-XrPerformanceMetricsCounterANDROID-type-type", XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID, "XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsCounterANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPerformanceMetricsCounterANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPerformanceMetricsCounterANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsCounterANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPerformanceMetricsCounterANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPerformanceMetricsCounterANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "counterFlags" because this struct is returned only.
    // Skip checking member "counterUnit" because this struct is returned only.
    // Skip checking member "uintValue" because this struct is returned only.
    // Skip checking member "floatValue" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableObjectANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_OBJECT_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableObjectANDROID",
                             value->type, "VUID-XrTrackableObjectANDROID-type-type", XR_TYPE_TRACKABLE_OBJECT_ANDROID, "XR_TYPE_TRACKABLE_OBJECT_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableObjectANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableObjectANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableObjectANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrTrackingStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableObjectANDROID", "trackingState", objects_info, value->trackingState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableObjectANDROID contains invalid XrTrackingStateANDROID \"trackingState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingState));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectANDROID-trackingState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrObjectLabelANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableObjectANDROID", "objectLabel", objects_info, value->objectLabel)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableObjectANDROID contains invalid XrObjectLabelANDROID \"objectLabel\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->objectLabel));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectANDROID-objectLabel-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableObjectConfigurationANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableObjectConfigurationANDROID",
                             value->type, "VUID-XrTrackableObjectConfigurationANDROID-type-type", XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID, "XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectConfigurationANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableObjectConfigurationANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableObjectConfigurationANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectConfigurationANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableObjectConfigurationANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectConfigurationANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->labelCount && nullptr != value->activeLabels) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectConfigurationANDROID-labelCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrTrackableObjectConfigurationANDROID member labelCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->activeLabels && 0 != value->labelCount) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectConfigurationANDROID-activeLabels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrTrackableObjectConfigurationANDROID contains invalid NULL for XrObjectLabelANDROID \"activeLabels\" is which not "
                            "optional since \"labelCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->activeLabels) {
        for (uint32_t value_activelabels_inc = 0; value_activelabels_inc < value->labelCount; ++value_activelabels_inc) {
            // Make sure the enum type XrObjectLabelANDROID value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrTrackableObjectConfigurationANDROID", "activeLabels", objects_info, value->activeLabels[value_activelabels_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrTrackableObjectConfigurationANDROID contains invalid XrObjectLabelANDROID \"activeLabels\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->activeLabels[value_activelabels_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrTrackableObjectConfigurationANDROID-activeLabels-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFutureCancelInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FUTURE_CANCEL_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFutureCancelInfoEXT",
                             value->type, "VUID-XrFutureCancelInfoEXT-type-type", XR_TYPE_FUTURE_CANCEL_INFO_EXT, "XR_TYPE_FUTURE_CANCEL_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFutureCancelInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFutureCancelInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFutureCancelInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFutureCancelInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFutureCancelInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFutureCancelInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFuturePollInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FUTURE_POLL_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFuturePollInfoEXT",
                             value->type, "VUID-XrFuturePollInfoEXT-type-type", XR_TYPE_FUTURE_POLL_INFO_EXT, "XR_TYPE_FUTURE_POLL_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFuturePollInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFuturePollInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFuturePollInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFuturePollInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFuturePollInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFuturePollInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFutureCompletionBaseHeaderEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrFutureCompletionBaseHeaderEXT-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrFutureCompletionBaseHeaderEXT-next-next" because it is a base structure
    // NOTE: Can't validate "VUID-XrFutureCompletionBaseHeaderEXT-futureResult-parameter" because it is a base structure
    if (value->type == XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML) {
        const XrWorldMeshStateRequestCompletionML* new_value = reinterpret_cast<const XrWorldMeshStateRequestCompletionML*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
            std::string error_str = "XrFutureCompletionBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML\"";
            error_str += " which requires extension \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML) {
        const XrWorldMeshRequestCompletionML* new_value = reinterpret_cast<const XrWorldMeshRequestCompletionML*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ML_world_mesh_detection")) {
            std::string error_str = "XrFutureCompletionBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML\"";
            error_str += " which requires extension \"XR_ML_world_mesh_detection\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_COMPLETION_META) {
        const XrEnvironmentRaycasterCreateCompletionMETA* new_value = reinterpret_cast<const XrEnvironmentRaycasterCreateCompletionMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
            std::string error_str = "XrFutureCompletionBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_COMPLETION_META\"";
            error_str += " which requires extension \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID) {
        const XrCreateTrackableImageDatabaseCompletionANDROID* new_value = reinterpret_cast<const XrCreateTrackableImageDatabaseCompletionANDROID*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_trackables_image")) {
            std::string error_str = "XrFutureCompletionBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID\"";
            error_str += " which requires extension \"XR_ANDROID_trackables_image\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT) {
        const XrCreateSpatialContextCompletionEXT* new_value = reinterpret_cast<const XrCreateSpatialContextCompletionEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
            std::string error_str = "XrFutureCompletionBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT) {
        const XrCreateSpatialDiscoverySnapshotCompletionEXT* new_value = reinterpret_cast<const XrCreateSpatialDiscoverySnapshotCompletionEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_entity")) {
            std::string error_str = "XrFutureCompletionBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_entity\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT) {
        const XrCreateSpatialPersistenceContextCompletionEXT* new_value = reinterpret_cast<const XrCreateSpatialPersistenceContextCompletionEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence")) {
            std::string error_str = "XrFutureCompletionBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_persistence\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT) {
        const XrPersistSpatialEntityCompletionEXT* new_value = reinterpret_cast<const XrPersistSpatialEntityCompletionEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
            std::string error_str = "XrFutureCompletionBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT) {
        const XrUnpersistSpatialEntityCompletionEXT* new_value = reinterpret_cast<const XrUnpersistSpatialEntityCompletionEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_persistence_operations")) {
            std::string error_str = "XrFutureCompletionBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_persistence_operations\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrFutureCompletionBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrFutureCompletionBaseHeaderEXT",
                         value->type, "VUID-XrFutureCompletionBaseHeaderEXT-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFuturePollResultEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FUTURE_POLL_RESULT_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFuturePollResultEXT",
                             value->type, "VUID-XrFuturePollResultEXT-type-type", XR_TYPE_FUTURE_POLL_RESULT_EXT, "XR_TYPE_FUTURE_POLL_RESULT_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_FUTURE_POLL_RESULT_PROGRESS_BD);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFuturePollResultEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFuturePollResultEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFuturePollResultEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFuturePollResultEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFuturePollResultEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFuturePollResultEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "state" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataUserPresenceChangedEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataUserPresenceChangedEXT",
                             value->type, "VUID-XrEventDataUserPresenceChangedEXT-type-type", XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT, "XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataUserPresenceChangedEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataUserPresenceChangedEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataUserPresenceChangedEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataUserPresenceChangedEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataUserPresenceChangedEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataUserPresenceChangedEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "session" because this struct is returned only.
    // Skip checking member "isUserPresent" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemUserPresencePropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_USER_PRESENCE_PROPERTIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemUserPresencePropertiesEXT",
                             value->type, "VUID-XrSystemUserPresencePropertiesEXT-type-type", XR_TYPE_SYSTEM_USER_PRESENCE_PROPERTIES_EXT, "XR_TYPE_SYSTEM_USER_PRESENCE_PROPERTIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemUserPresencePropertiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemUserPresencePropertiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemUserPresencePropertiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemUserPresencePropertiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemUserPresencePropertiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemUserPresencePropertiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsUserPresence" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataHeadsetFitChangedML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataHeadsetFitChangedML",
                             value->type, "VUID-XrEventDataHeadsetFitChangedML-type-type", XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML, "XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataHeadsetFitChangedML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataHeadsetFitChangedML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataHeadsetFitChangedML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataHeadsetFitChangedML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataHeadsetFitChangedML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataHeadsetFitChangedML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "status" because this struct is returned only.
    // Skip checking member "time" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataEyeCalibrationChangedML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataEyeCalibrationChangedML",
                             value->type, "VUID-XrEventDataEyeCalibrationChangedML-type-type", XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML, "XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataEyeCalibrationChangedML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataEyeCalibrationChangedML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataEyeCalibrationChangedML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataEyeCalibrationChangedML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataEyeCalibrationChangedML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataEyeCalibrationChangedML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "status" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrUserCalibrationEnableEventsInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_USER_CALIBRATION_ENABLE_EVENTS_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrUserCalibrationEnableEventsInfoML",
                             value->type, "VUID-XrUserCalibrationEnableEventsInfoML-type-type", XR_TYPE_USER_CALIBRATION_ENABLE_EVENTS_INFO_ML, "XR_TYPE_USER_CALIBRATION_ENABLE_EVENTS_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrUserCalibrationEnableEventsInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrUserCalibrationEnableEventsInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrUserCalibrationEnableEventsInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrUserCalibrationEnableEventsInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrUserCalibrationEnableEventsInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrUserCalibrationEnableEventsInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemNotificationsSetInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_NOTIFICATIONS_SET_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemNotificationsSetInfoML",
                             value->type, "VUID-XrSystemNotificationsSetInfoML-type-type", XR_TYPE_SYSTEM_NOTIFICATIONS_SET_INFO_ML, "XR_TYPE_SYSTEM_NOTIFICATIONS_SET_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemNotificationsSetInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemNotificationsSetInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemNotificationsSetInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemNotificationsSetInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemNotificationsSetInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemNotificationsSetInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshDetectorCreateInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_DETECTOR_CREATE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshDetectorCreateInfoML",
                             value->type, "VUID-XrWorldMeshDetectorCreateInfoML-type-type", XR_TYPE_WORLD_MESH_DETECTOR_CREATE_INFO_ML, "XR_TYPE_WORLD_MESH_DETECTOR_CREATE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshDetectorCreateInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshDetectorCreateInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshDetectorCreateInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshDetectorCreateInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshDetectorCreateInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshDetectorCreateInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBlockStateML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_BLOCK_STATE_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshBlockStateML",
                             value->type, "VUID-XrWorldMeshBlockStateML-type-type", XR_TYPE_WORLD_MESH_BLOCK_STATE_ML, "XR_TYPE_WORLD_MESH_BLOCK_STATE_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockStateML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshBlockStateML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBlockStateML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockStateML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBlockStateML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockStateML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrWorldMeshBlockStatusML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrWorldMeshBlockStateML", "status", objects_info, value->status)) {
        std::ostringstream oss_enum;
        oss_enum << "XrWorldMeshBlockStateML contains invalid XrWorldMeshBlockStatusML \"status\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->status));
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockStateML-status-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshStateRequestInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_STATE_REQUEST_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshStateRequestInfoML",
                             value->type, "VUID-XrWorldMeshStateRequestInfoML-type-type", XR_TYPE_WORLD_MESH_STATE_REQUEST_INFO_ML, "XR_TYPE_WORLD_MESH_STATE_REQUEST_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshStateRequestInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshStateRequestInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshStateRequestInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestInfoML-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshStateRequestCompletionML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshStateRequestCompletionML",
                             value->type, "VUID-XrWorldMeshStateRequestCompletionML-type-type", XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML, "XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestCompletionML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshStateRequestCompletionML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshStateRequestCompletionML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestCompletionML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshStateRequestCompletionML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestCompletionML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrWorldMeshStateRequestCompletionML", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrWorldMeshStateRequestCompletionML contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestCompletionML-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->meshBlockStateCapacityInput is non-zero
    if (0 != value->meshBlockStateCapacityInput && nullptr == value->meshBlockStates) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestCompletionML-meshBlockStates-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrWorldMeshStateRequestCompletionML member meshBlockStateCapacityInput is NULL, but value->meshBlockStateCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->meshBlockStates) {
        for (uint32_t value_meshblockstates_inc = 0; value_meshblockstates_inc < value->meshBlockStateCapacityInput; ++value_meshblockstates_inc) {
            // Validate that the structure XrWorldMeshBlockStateML is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->meshBlockStates[value_meshblockstates_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrWorldMeshStateRequestCompletionML-meshBlockStates-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrWorldMeshStateRequestCompletionML member meshBlockStates is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBufferRecommendedSizeInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_BUFFER_RECOMMENDED_SIZE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshBufferRecommendedSizeInfoML",
                             value->type, "VUID-XrWorldMeshBufferRecommendedSizeInfoML-type-type", XR_TYPE_WORLD_MESH_BUFFER_RECOMMENDED_SIZE_INFO_ML, "XR_TYPE_WORLD_MESH_BUFFER_RECOMMENDED_SIZE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferRecommendedSizeInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshBufferRecommendedSizeInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBufferRecommendedSizeInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferRecommendedSizeInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBufferRecommendedSizeInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferRecommendedSizeInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBufferSizeML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_BUFFER_SIZE_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshBufferSizeML",
                             value->type, "VUID-XrWorldMeshBufferSizeML-type-type", XR_TYPE_WORLD_MESH_BUFFER_SIZE_ML, "XR_TYPE_WORLD_MESH_BUFFER_SIZE_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferSizeML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshBufferSizeML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBufferSizeML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferSizeML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBufferSizeML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferSizeML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBufferML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_BUFFER_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshBufferML",
                             value->type, "VUID-XrWorldMeshBufferML-type-type", XR_TYPE_WORLD_MESH_BUFFER_ML, "XR_TYPE_WORLD_MESH_BUFFER_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshBufferML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBufferML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBufferML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->bufferSize && nullptr != value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferML-bufferSize-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrWorldMeshBufferML member bufferSize is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->buffer && 0 != value->bufferSize) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBufferML-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrWorldMeshBufferML contains invalid NULL for void \"buffer\" is which not "
                            "optional since \"bufferSize\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBlockRequestML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_BLOCK_REQUEST_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshBlockRequestML",
                             value->type, "VUID-XrWorldMeshBlockRequestML-type-type", XR_TYPE_WORLD_MESH_BLOCK_REQUEST_ML, "XR_TYPE_WORLD_MESH_BLOCK_REQUEST_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockRequestML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshBlockRequestML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBlockRequestML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockRequestML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBlockRequestML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockRequestML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrWorldMeshDetectorLodML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrWorldMeshBlockRequestML", "lod", objects_info, value->lod)) {
        std::ostringstream oss_enum;
        oss_enum << "XrWorldMeshBlockRequestML contains invalid XrWorldMeshDetectorLodML \"lod\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->lod));
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockRequestML-lod-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshGetInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_GET_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshGetInfoML",
                             value->type, "VUID-XrWorldMeshGetInfoML-type-type", XR_TYPE_WORLD_MESH_GET_INFO_ML, "XR_TYPE_WORLD_MESH_GET_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshGetInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshGetInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshGetInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshGetInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshGetInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshGetInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult world_mesh_detector_flags_ml_result = ValidateXrWorldMeshDetectorFlagsML(value->flags);
    // Valid flags available, so it must be invalid to fail.
    if (VALIDATE_XR_FLAGS_INVALID == world_mesh_detector_flags_ml_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrWorldMeshGetInfoML invalid member XrWorldMeshDetectorFlagsML \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshGetInfoML-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->blockCount && nullptr != value->blocks) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshGetInfoML-blockCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrWorldMeshGetInfoML member blockCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->blocks && 0 != value->blockCount) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshGetInfoML-blocks-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrWorldMeshGetInfoML contains invalid NULL for XrWorldMeshBlockRequestML \"blocks\" is which not "
                            "optional since \"blockCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->blocks) {
        for (uint32_t value_blocks_inc = 0; value_blocks_inc < value->blockCount; ++value_blocks_inc) {
            // Validate that the structure XrWorldMeshBlockRequestML is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->blocks[value_blocks_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrWorldMeshGetInfoML-blocks-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrWorldMeshGetInfoML member blocks is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshBlockML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_BLOCK_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshBlockML",
                             value->type, "VUID-XrWorldMeshBlockML-type-type", XR_TYPE_WORLD_MESH_BLOCK_ML, "XR_TYPE_WORLD_MESH_BLOCK_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshBlockML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBlockML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshBlockML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrWorldMeshBlockResultML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrWorldMeshBlockML", "blockResult", objects_info, value->blockResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrWorldMeshBlockML contains invalid XrWorldMeshBlockResultML \"blockResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->blockResult));
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-blockResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrWorldMeshDetectorLodML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrWorldMeshBlockML", "lod", objects_info, value->lod)) {
        std::ostringstream oss_enum;
        oss_enum << "XrWorldMeshBlockML contains invalid XrWorldMeshDetectorLodML \"lod\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->lod));
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-lod-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    ValidateXrFlagsResult world_mesh_detector_flags_ml_result = ValidateXrWorldMeshDetectorFlagsML(value->flags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == world_mesh_detector_flags_ml_result) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-flags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrWorldMeshDetectorFlagsML \"flags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != world_mesh_detector_flags_ml_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrWorldMeshBlockML invalid member XrWorldMeshDetectorFlagsML \"flags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->flags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-flags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->indexCount && nullptr != value->indexBuffer) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-indexCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrWorldMeshBlockML member indexCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->indexBuffer && 0 != value->indexCount) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-indexBuffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrWorldMeshBlockML contains invalid NULL for uint16_t \"indexBuffer\" is which not "
                            "optional since \"indexCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrWorldMeshBlockML-indexBuffer-parameter" type
    // Non-optional array length must be non-zero
    if (0 >= value->vertexCount && nullptr != value->vertexBuffer) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-vertexCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrWorldMeshBlockML member vertexCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->vertexBuffer && 0 != value->vertexCount) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-vertexBuffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrWorldMeshBlockML contains invalid NULL for XrVector3f \"vertexBuffer\" is which not "
                            "optional since \"vertexCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrWorldMeshBlockML-vertexBuffer-parameter" type
    // Non-optional array length must be non-zero
    if (0 >= value->normalCount && nullptr != value->normalBuffer) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-normalCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrWorldMeshBlockML member normalCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->normalBuffer && 0 != value->normalCount) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-normalBuffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrWorldMeshBlockML contains invalid NULL for XrVector3f \"normalBuffer\" is which not "
                            "optional since \"normalCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrWorldMeshBlockML-normalBuffer-parameter" type
    // Non-optional array length must be non-zero
    if (0 >= value->confidenceCount && nullptr != value->confidenceBuffer) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-confidenceCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrWorldMeshBlockML member confidenceCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->confidenceBuffer && 0 != value->confidenceCount) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshBlockML-confidenceBuffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrWorldMeshBlockML contains invalid NULL for float \"confidenceBuffer\" is which not "
                            "optional since \"confidenceCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrWorldMeshBlockML-confidenceBuffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshRequestCompletionInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshRequestCompletionInfoML",
                             value->type, "VUID-XrWorldMeshRequestCompletionInfoML-type-type", XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_INFO_ML, "XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshRequestCompletionInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshRequestCompletionInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshRequestCompletionInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->meshSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"meshSpace\" ";
            oss << HandleToHexString(value->meshSpace);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionInfoML-meshSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrWorldMeshRequestCompletionML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrWorldMeshRequestCompletionML",
                             value->type, "VUID-XrWorldMeshRequestCompletionML-type-type", XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML, "XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrWorldMeshRequestCompletionML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshRequestCompletionML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrWorldMeshRequestCompletionML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrWorldMeshRequestCompletionML", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrWorldMeshRequestCompletionML contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionML-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->blockCount && nullptr != value->blocks) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionML-blockCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrWorldMeshRequestCompletionML member blockCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->blocks && 0 != value->blockCount) {
        CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionML-blocks-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrWorldMeshRequestCompletionML contains invalid NULL for XrWorldMeshBlockML \"blocks\" is which not "
                            "optional since \"blockCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->blocks) {
        for (uint32_t value_blocks_inc = 0; value_blocks_inc < value->blockCount; ++value_blocks_inc) {
            // Validate that the structure XrWorldMeshBlockML is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->blocks[value_blocks_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrWorldMeshRequestCompletionML-blocks-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrWorldMeshRequestCompletionML member blocks is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFacialExpressionPropertiesML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FACIAL_EXPRESSION_PROPERTIES_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemFacialExpressionPropertiesML",
                             value->type, "VUID-XrSystemFacialExpressionPropertiesML-type-type", XR_TYPE_SYSTEM_FACIAL_EXPRESSION_PROPERTIES_ML, "XR_TYPE_SYSTEM_FACIAL_EXPRESSION_PROPERTIES_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemFacialExpressionPropertiesML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemFacialExpressionPropertiesML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemFacialExpressionPropertiesML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFacialExpressionPropertiesML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemFacialExpressionPropertiesML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFacialExpressionPropertiesML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsFacialExpression" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialExpressionClientCreateInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACIAL_EXPRESSION_CLIENT_CREATE_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFacialExpressionClientCreateInfoML",
                             value->type, "VUID-XrFacialExpressionClientCreateInfoML-type-type", XR_TYPE_FACIAL_EXPRESSION_CLIENT_CREATE_INFO_ML, "XR_TYPE_FACIAL_EXPRESSION_CLIENT_CREATE_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionClientCreateInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFacialExpressionClientCreateInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFacialExpressionClientCreateInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionClientCreateInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFacialExpressionClientCreateInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionClientCreateInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->requestedCount is non-zero
    if (0 != value->requestedCount && nullptr == value->requestedFacialBlendShapes) {
        CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionClientCreateInfoML-requestedFacialBlendShapes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrFacialExpressionClientCreateInfoML member requestedCount is NULL, but value->requestedCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->requestedFacialBlendShapes) {
        for (uint32_t value_requestedfacialblendshapes_inc = 0; value_requestedfacialblendshapes_inc < value->requestedCount; ++value_requestedfacialblendshapes_inc) {
            // Make sure the enum type XrFacialBlendShapeML value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrFacialExpressionClientCreateInfoML", "requestedFacialBlendShapes", objects_info, value->requestedFacialBlendShapes[value_requestedfacialblendshapes_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrFacialExpressionClientCreateInfoML contains invalid XrFacialBlendShapeML \"requestedFacialBlendShapes\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->requestedFacialBlendShapes[value_requestedfacialblendshapes_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionClientCreateInfoML-requestedFacialBlendShapes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialExpressionBlendShapeGetInfoML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_GET_INFO_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFacialExpressionBlendShapeGetInfoML",
                             value->type, "VUID-XrFacialExpressionBlendShapeGetInfoML-type-type", XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_GET_INFO_ML, "XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_GET_INFO_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionBlendShapeGetInfoML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFacialExpressionBlendShapeGetInfoML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFacialExpressionBlendShapeGetInfoML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionBlendShapeGetInfoML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFacialExpressionBlendShapeGetInfoML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionBlendShapeGetInfoML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFacialExpressionBlendShapePropertiesML* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_ML) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFacialExpressionBlendShapePropertiesML",
                             value->type, "VUID-XrFacialExpressionBlendShapePropertiesML-type-type", XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_ML, "XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_ML");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionBlendShapePropertiesML-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFacialExpressionBlendShapePropertiesML struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFacialExpressionBlendShapePropertiesML : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionBlendShapePropertiesML-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFacialExpressionBlendShapePropertiesML : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionBlendShapePropertiesML-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrFacialBlendShapeML value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrFacialExpressionBlendShapePropertiesML", "requestedFacialBlendShape", objects_info, value->requestedFacialBlendShape)) {
        std::ostringstream oss_enum;
        oss_enum << "XrFacialExpressionBlendShapePropertiesML contains invalid XrFacialBlendShapeML \"requestedFacialBlendShape\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->requestedFacialBlendShape));
        CoreValidLogMessage(instance_info, "VUID-XrFacialExpressionBlendShapePropertiesML-requestedFacialBlendShape-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemBoundaryVisibilityPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_BOUNDARY_VISIBILITY_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemBoundaryVisibilityPropertiesMETA",
                             value->type, "VUID-XrSystemBoundaryVisibilityPropertiesMETA-type-type", XR_TYPE_SYSTEM_BOUNDARY_VISIBILITY_PROPERTIES_META, "XR_TYPE_SYSTEM_BOUNDARY_VISIBILITY_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemBoundaryVisibilityPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemBoundaryVisibilityPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemBoundaryVisibilityPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemBoundaryVisibilityPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemBoundaryVisibilityPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemBoundaryVisibilityPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsBoundaryVisibility" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataBoundaryVisibilityChangedMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_BOUNDARY_VISIBILITY_CHANGED_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataBoundaryVisibilityChangedMETA",
                             value->type, "VUID-XrEventDataBoundaryVisibilityChangedMETA-type-type", XR_TYPE_EVENT_DATA_BOUNDARY_VISIBILITY_CHANGED_META, "XR_TYPE_EVENT_DATA_BOUNDARY_VISIBILITY_CHANGED_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBoundaryVisibilityChangedMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataBoundaryVisibilityChangedMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataBoundaryVisibilityChangedMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBoundaryVisibilityChangedMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataBoundaryVisibilityChangedMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataBoundaryVisibilityChangedMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "boundaryVisibility" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSimultaneousHandsAndControllersPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SIMULTANEOUS_HANDS_AND_CONTROLLERS_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSimultaneousHandsAndControllersPropertiesMETA",
                             value->type, "VUID-XrSystemSimultaneousHandsAndControllersPropertiesMETA-type-type", XR_TYPE_SYSTEM_SIMULTANEOUS_HANDS_AND_CONTROLLERS_PROPERTIES_META, "XR_TYPE_SYSTEM_SIMULTANEOUS_HANDS_AND_CONTROLLERS_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSimultaneousHandsAndControllersPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSimultaneousHandsAndControllersPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSimultaneousHandsAndControllersPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSimultaneousHandsAndControllersPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSimultaneousHandsAndControllersPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSimultaneousHandsAndControllersPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSimultaneousHandsAndControllers" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSimultaneousHandsAndControllersTrackingResumeInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_RESUME_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSimultaneousHandsAndControllersTrackingResumeInfoMETA",
                             value->type, "VUID-XrSimultaneousHandsAndControllersTrackingResumeInfoMETA-type-type", XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_RESUME_INFO_META, "XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_RESUME_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSimultaneousHandsAndControllersTrackingResumeInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSimultaneousHandsAndControllersTrackingResumeInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSimultaneousHandsAndControllersTrackingResumeInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSimultaneousHandsAndControllersTrackingResumeInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSimultaneousHandsAndControllersTrackingResumeInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSimultaneousHandsAndControllersTrackingResumeInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSimultaneousHandsAndControllersTrackingPauseInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_PAUSE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSimultaneousHandsAndControllersTrackingPauseInfoMETA",
                             value->type, "VUID-XrSimultaneousHandsAndControllersTrackingPauseInfoMETA-type-type", XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_PAUSE_INFO_META, "XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_PAUSE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSimultaneousHandsAndControllersTrackingPauseInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSimultaneousHandsAndControllersTrackingPauseInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSimultaneousHandsAndControllersTrackingPauseInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSimultaneousHandsAndControllersTrackingPauseInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSimultaneousHandsAndControllersTrackingPauseInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSimultaneousHandsAndControllersTrackingPauseInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrFaceTrackingVisemesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_FACE_TRACKING_VISEMES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrFaceTrackingVisemesMETA",
                             value->type, "VUID-XrFaceTrackingVisemesMETA-type-type", XR_TYPE_FACE_TRACKING_VISEMES_META, "XR_TYPE_FACE_TRACKING_VISEMES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackingVisemesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrFaceTrackingVisemesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackingVisemesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackingVisemesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrFaceTrackingVisemesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrFaceTrackingVisemesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemFaceTrackingVisemesPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_FACE_TRACKING_VISEMES_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemFaceTrackingVisemesPropertiesMETA",
                             value->type, "VUID-XrSystemFaceTrackingVisemesPropertiesMETA-type-type", XR_TYPE_SYSTEM_FACE_TRACKING_VISEMES_PROPERTIES_META, "XR_TYPE_SYSTEM_FACE_TRACKING_VISEMES_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingVisemesPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemFaceTrackingVisemesPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemFaceTrackingVisemesPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingVisemesPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemFaceTrackingVisemesPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemFaceTrackingVisemesPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsVisemes" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRoomMeshFaceMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSemanticLabelMETA value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrRoomMeshFaceMETA", "semanticLabel", objects_info, value->semanticLabel)) {
        std::ostringstream oss_enum;
        oss_enum << "XrRoomMeshFaceMETA contains invalid XrSemanticLabelMETA \"semanticLabel\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->semanticLabel));
        CoreValidLogMessage(instance_info, "VUID-XrRoomMeshFaceMETA-semanticLabel-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRoomMeshFaceIndicesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ROOM_MESH_FACE_INDICES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRoomMeshFaceIndicesMETA",
                             value->type, "VUID-XrRoomMeshFaceIndicesMETA-type-type", XR_TYPE_ROOM_MESH_FACE_INDICES_META, "XR_TYPE_ROOM_MESH_FACE_INDICES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRoomMeshFaceIndicesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRoomMeshFaceIndicesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRoomMeshFaceIndicesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRoomMeshFaceIndicesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRoomMeshFaceIndicesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRoomMeshFaceIndicesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->indexCapacityInput is non-zero
    if (0 != value->indexCapacityInput && nullptr == value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrRoomMeshFaceIndicesMETA-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRoomMeshFaceIndicesMETA member indexCapacityInput is NULL, but value->indexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrRoomMeshFaceIndicesMETA-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceRoomMeshGetInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_ROOM_MESH_GET_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceRoomMeshGetInfoMETA",
                             value->type, "VUID-XrSpaceRoomMeshGetInfoMETA-type-type", XR_TYPE_SPACE_ROOM_MESH_GET_INFO_META, "XR_TYPE_SPACE_ROOM_MESH_GET_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceRoomMeshGetInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceRoomMeshGetInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceRoomMeshGetInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceRoomMeshGetInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceRoomMeshGetInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceRoomMeshGetInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->recognizedSemanticLabelCount is non-zero
    if (0 != value->recognizedSemanticLabelCount && nullptr == value->recognizedSemanticLabels) {
        CoreValidLogMessage(instance_info, "VUID-XrSpaceRoomMeshGetInfoMETA-recognizedSemanticLabels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpaceRoomMeshGetInfoMETA member recognizedSemanticLabelCount is NULL, but value->recognizedSemanticLabelCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->recognizedSemanticLabels) {
        for (uint32_t value_recognizedsemanticlabels_inc = 0; value_recognizedsemanticlabels_inc < value->recognizedSemanticLabelCount; ++value_recognizedsemanticlabels_inc) {
            // Make sure the enum type XrSemanticLabelMETA value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpaceRoomMeshGetInfoMETA", "recognizedSemanticLabels", objects_info, value->recognizedSemanticLabels[value_recognizedsemanticlabels_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpaceRoomMeshGetInfoMETA contains invalid XrSemanticLabelMETA \"recognizedSemanticLabels\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->recognizedSemanticLabels[value_recognizedsemanticlabels_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpaceRoomMeshGetInfoMETA-recognizedSemanticLabels-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrRoomMeshMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ROOM_MESH_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrRoomMeshMETA",
                             value->type, "VUID-XrRoomMeshMETA-type-type", XR_TYPE_ROOM_MESH_META, "XR_TYPE_ROOM_MESH_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrRoomMeshMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrRoomMeshMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrRoomMeshMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRoomMeshMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrRoomMeshMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrRoomMeshMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertices) {
        CoreValidLogMessage(instance_info, "VUID-XrRoomMeshMETA-vertices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRoomMeshMETA member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrRoomMeshMETA-vertices-parameter" type
    // Optional array must be non-NULL when value->faceCapacityInput is non-zero
    if (0 != value->faceCapacityInput && nullptr == value->faces) {
        CoreValidLogMessage(instance_info, "VUID-XrRoomMeshMETA-faces-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrRoomMeshMETA member faceCapacityInput is NULL, but value->faceCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->faces) {
        for (uint32_t value_faces_inc = 0; value_faces_inc < value->faceCapacityInput; ++value_faces_inc) {
            // Validate that the structure XrRoomMeshFaceMETA is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->faces[value_faces_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrRoomMeshMETA-faces-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrRoomMeshMETA member faces is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColocationDiscoveryStartInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COLOCATION_DISCOVERY_START_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrColocationDiscoveryStartInfoMETA",
                             value->type, "VUID-XrColocationDiscoveryStartInfoMETA-type-type", XR_TYPE_COLOCATION_DISCOVERY_START_INFO_META, "XR_TYPE_COLOCATION_DISCOVERY_START_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrColocationDiscoveryStartInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrColocationDiscoveryStartInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrColocationDiscoveryStartInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrColocationDiscoveryStartInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrColocationDiscoveryStartInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrColocationDiscoveryStartInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColocationDiscoveryStopInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COLOCATION_DISCOVERY_STOP_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrColocationDiscoveryStopInfoMETA",
                             value->type, "VUID-XrColocationDiscoveryStopInfoMETA-type-type", XR_TYPE_COLOCATION_DISCOVERY_STOP_INFO_META, "XR_TYPE_COLOCATION_DISCOVERY_STOP_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrColocationDiscoveryStopInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrColocationDiscoveryStopInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrColocationDiscoveryStopInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrColocationDiscoveryStopInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrColocationDiscoveryStopInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrColocationDiscoveryStopInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColocationAdvertisementStartInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COLOCATION_ADVERTISEMENT_START_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrColocationAdvertisementStartInfoMETA",
                             value->type, "VUID-XrColocationAdvertisementStartInfoMETA-type-type", XR_TYPE_COLOCATION_ADVERTISEMENT_START_INFO_META, "XR_TYPE_COLOCATION_ADVERTISEMENT_START_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrColocationAdvertisementStartInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrColocationAdvertisementStartInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrColocationAdvertisementStartInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrColocationAdvertisementStartInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrColocationAdvertisementStartInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrColocationAdvertisementStartInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->bufferSize && nullptr != value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrColocationAdvertisementStartInfoMETA-bufferSize-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrColocationAdvertisementStartInfoMETA member bufferSize is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->buffer && 0 != value->bufferSize) {
        CoreValidLogMessage(instance_info, "VUID-XrColocationAdvertisementStartInfoMETA-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrColocationAdvertisementStartInfoMETA contains invalid NULL for uint8_t \"buffer\" is which not "
                            "optional since \"bufferSize\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrColocationAdvertisementStartInfoMETA-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrColocationAdvertisementStopInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_COLOCATION_ADVERTISEMENT_STOP_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrColocationAdvertisementStopInfoMETA",
                             value->type, "VUID-XrColocationAdvertisementStopInfoMETA-type-type", XR_TYPE_COLOCATION_ADVERTISEMENT_STOP_INFO_META, "XR_TYPE_COLOCATION_ADVERTISEMENT_STOP_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrColocationAdvertisementStopInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrColocationAdvertisementStopInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrColocationAdvertisementStopInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrColocationAdvertisementStopInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrColocationAdvertisementStopInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrColocationAdvertisementStopInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataStartColocationAdvertisementCompleteMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_START_COLOCATION_ADVERTISEMENT_COMPLETE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataStartColocationAdvertisementCompleteMETA",
                             value->type, "VUID-XrEventDataStartColocationAdvertisementCompleteMETA-type-type", XR_TYPE_EVENT_DATA_START_COLOCATION_ADVERTISEMENT_COMPLETE_META, "XR_TYPE_EVENT_DATA_START_COLOCATION_ADVERTISEMENT_COMPLETE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStartColocationAdvertisementCompleteMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataStartColocationAdvertisementCompleteMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataStartColocationAdvertisementCompleteMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStartColocationAdvertisementCompleteMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataStartColocationAdvertisementCompleteMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStartColocationAdvertisementCompleteMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "advertisementRequestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Skip checking member "advertisementUuid" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataStopColocationAdvertisementCompleteMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_STOP_COLOCATION_ADVERTISEMENT_COMPLETE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataStopColocationAdvertisementCompleteMETA",
                             value->type, "VUID-XrEventDataStopColocationAdvertisementCompleteMETA-type-type", XR_TYPE_EVENT_DATA_STOP_COLOCATION_ADVERTISEMENT_COMPLETE_META, "XR_TYPE_EVENT_DATA_STOP_COLOCATION_ADVERTISEMENT_COMPLETE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStopColocationAdvertisementCompleteMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataStopColocationAdvertisementCompleteMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataStopColocationAdvertisementCompleteMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStopColocationAdvertisementCompleteMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataStopColocationAdvertisementCompleteMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStopColocationAdvertisementCompleteMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataColocationAdvertisementCompleteMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_COLOCATION_ADVERTISEMENT_COMPLETE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataColocationAdvertisementCompleteMETA",
                             value->type, "VUID-XrEventDataColocationAdvertisementCompleteMETA-type-type", XR_TYPE_EVENT_DATA_COLOCATION_ADVERTISEMENT_COMPLETE_META, "XR_TYPE_EVENT_DATA_COLOCATION_ADVERTISEMENT_COMPLETE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataColocationAdvertisementCompleteMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataColocationAdvertisementCompleteMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataColocationAdvertisementCompleteMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataColocationAdvertisementCompleteMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataColocationAdvertisementCompleteMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataColocationAdvertisementCompleteMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "advertisementRequestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataStartColocationDiscoveryCompleteMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_START_COLOCATION_DISCOVERY_COMPLETE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataStartColocationDiscoveryCompleteMETA",
                             value->type, "VUID-XrEventDataStartColocationDiscoveryCompleteMETA-type-type", XR_TYPE_EVENT_DATA_START_COLOCATION_DISCOVERY_COMPLETE_META, "XR_TYPE_EVENT_DATA_START_COLOCATION_DISCOVERY_COMPLETE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStartColocationDiscoveryCompleteMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataStartColocationDiscoveryCompleteMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataStartColocationDiscoveryCompleteMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStartColocationDiscoveryCompleteMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataStartColocationDiscoveryCompleteMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStartColocationDiscoveryCompleteMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "discoveryRequestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataColocationDiscoveryResultMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_RESULT_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataColocationDiscoveryResultMETA",
                             value->type, "VUID-XrEventDataColocationDiscoveryResultMETA-type-type", XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_RESULT_META, "XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_RESULT_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataColocationDiscoveryResultMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataColocationDiscoveryResultMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataColocationDiscoveryResultMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataColocationDiscoveryResultMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataColocationDiscoveryResultMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataColocationDiscoveryResultMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "discoveryRequestId" because this struct is returned only.
    // Skip checking member "advertisementUuid" because this struct is returned only.
    // Skip checking member "bufferSize" because this struct is returned only.
    // Skip checking member "buffer" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataColocationDiscoveryCompleteMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_COMPLETE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataColocationDiscoveryCompleteMETA",
                             value->type, "VUID-XrEventDataColocationDiscoveryCompleteMETA-type-type", XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_COMPLETE_META, "XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_COMPLETE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataColocationDiscoveryCompleteMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataColocationDiscoveryCompleteMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataColocationDiscoveryCompleteMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataColocationDiscoveryCompleteMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataColocationDiscoveryCompleteMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataColocationDiscoveryCompleteMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "discoveryRequestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataStopColocationDiscoveryCompleteMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_STOP_COLOCATION_DISCOVERY_COMPLETE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataStopColocationDiscoveryCompleteMETA",
                             value->type, "VUID-XrEventDataStopColocationDiscoveryCompleteMETA-type-type", XR_TYPE_EVENT_DATA_STOP_COLOCATION_DISCOVERY_COMPLETE_META, "XR_TYPE_EVENT_DATA_STOP_COLOCATION_DISCOVERY_COMPLETE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStopColocationDiscoveryCompleteMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataStopColocationDiscoveryCompleteMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataStopColocationDiscoveryCompleteMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStopColocationDiscoveryCompleteMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataStopColocationDiscoveryCompleteMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataStopColocationDiscoveryCompleteMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "requestId" because this struct is returned only.
    // Skip checking member "result" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemColocationDiscoveryPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_COLOCATION_DISCOVERY_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemColocationDiscoveryPropertiesMETA",
                             value->type, "VUID-XrSystemColocationDiscoveryPropertiesMETA-type-type", XR_TYPE_SYSTEM_COLOCATION_DISCOVERY_PROPERTIES_META, "XR_TYPE_SYSTEM_COLOCATION_DISCOVERY_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemColocationDiscoveryPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemColocationDiscoveryPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemColocationDiscoveryPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemColocationDiscoveryPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemColocationDiscoveryPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemColocationDiscoveryPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsColocationDiscovery" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSpatialEntityGroupSharingPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SPATIAL_ENTITY_GROUP_SHARING_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSpatialEntityGroupSharingPropertiesMETA",
                             value->type, "VUID-XrSystemSpatialEntityGroupSharingPropertiesMETA-type-type", XR_TYPE_SYSTEM_SPATIAL_ENTITY_GROUP_SHARING_PROPERTIES_META, "XR_TYPE_SYSTEM_SPATIAL_ENTITY_GROUP_SHARING_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialEntityGroupSharingPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSpatialEntityGroupSharingPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialEntityGroupSharingPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialEntityGroupSharingPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSpatialEntityGroupSharingPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSpatialEntityGroupSharingPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSpatialEntityGroupSharing" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrShareSpacesRecipientGroupsMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrShareSpacesRecipientGroupsMETA",
                             value->type, "VUID-XrShareSpacesRecipientGroupsMETA-type-type", XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META, "XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrShareSpacesRecipientGroupsMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrShareSpacesRecipientGroupsMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrShareSpacesRecipientGroupsMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrShareSpacesRecipientGroupsMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrShareSpacesRecipientGroupsMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrShareSpacesRecipientGroupsMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->groupCount && nullptr != value->groups) {
        CoreValidLogMessage(instance_info, "VUID-XrShareSpacesRecipientGroupsMETA-groupCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrShareSpacesRecipientGroupsMETA member groupCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->groups && 0 != value->groupCount) {
        CoreValidLogMessage(instance_info, "VUID-XrShareSpacesRecipientGroupsMETA-groups-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrShareSpacesRecipientGroupsMETA contains invalid NULL for XrUuid \"groups\" is which not "
                            "optional since \"groupCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrShareSpacesRecipientGroupsMETA-groups-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpaceGroupUuidFilterInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPACE_GROUP_UUID_FILTER_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpaceGroupUuidFilterInfoMETA",
                             value->type, "VUID-XrSpaceGroupUuidFilterInfoMETA-type-type", XR_TYPE_SPACE_GROUP_UUID_FILTER_INFO_META, "XR_TYPE_SPACE_GROUP_UUID_FILTER_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpaceGroupUuidFilterInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpaceGroupUuidFilterInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpaceGroupUuidFilterInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceGroupUuidFilterInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpaceGroupUuidFilterInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpaceGroupUuidFilterInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemEnvironmentRaycastPropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_ENVIRONMENT_RAYCAST_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemEnvironmentRaycastPropertiesMETA",
                             value->type, "VUID-XrSystemEnvironmentRaycastPropertiesMETA-type-type", XR_TYPE_SYSTEM_ENVIRONMENT_RAYCAST_PROPERTIES_META, "XR_TYPE_SYSTEM_ENVIRONMENT_RAYCAST_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemEnvironmentRaycastPropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemEnvironmentRaycastPropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemEnvironmentRaycastPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEnvironmentRaycastPropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemEnvironmentRaycastPropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemEnvironmentRaycastPropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsEnvironmentRaycast" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycasterCreateInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentRaycasterCreateInfoMETA",
                             value->type, "VUID-XrEnvironmentRaycasterCreateInfoMETA-type-type", XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_INFO_META, "XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycasterCreateInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentRaycasterCreateInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycasterCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycasterCreateInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycasterCreateInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycasterCreateInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycasterCreateCompletionMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_COMPLETION_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentRaycasterCreateCompletionMETA",
                             value->type, "VUID-XrEnvironmentRaycasterCreateCompletionMETA-type-type", XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_COMPLETION_META, "XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_COMPLETION_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycasterCreateCompletionMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentRaycasterCreateCompletionMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycasterCreateCompletionMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycasterCreateCompletionMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycasterCreateCompletionMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycasterCreateCompletionMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrEnvironmentRaycasterCreateCompletionMETA", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrEnvironmentRaycasterCreateCompletionMETA contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycasterCreateCompletionMETA-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrEnvironmentRaycasterMETAHandle(&value->environmentRaycaster);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrEnvironmentRaycasterMETA handle \"environmentRaycaster\" ";
            oss << HandleToHexString(value->environmentRaycaster);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycasterCreateCompletionMETA-environmentRaycaster-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycastFilterBaseHeaderMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrEnvironmentRaycastFilterBaseHeaderMETA-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrEnvironmentRaycastFilterBaseHeaderMETA-next-next" because it is a base structure
    if (value->type == XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META) {
        const XrEnvironmentRaycastFilterDistanceMETA* new_value = reinterpret_cast<const XrEnvironmentRaycastFilterDistanceMETA*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_META_environment_raycast")) {
            std::string error_str = "XrEnvironmentRaycastFilterBaseHeaderMETA being used with child struct type ";
            error_str += "\"XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META\"";
            error_str += " which requires extension \"XR_META_environment_raycast\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastFilterBaseHeaderMETA-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentRaycastFilterBaseHeaderMETA",
                         value->type, "VUID-XrEnvironmentRaycastFilterBaseHeaderMETA-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycastHitGetInfoMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_RAYCAST_HIT_GET_INFO_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentRaycastHitGetInfoMETA",
                             value->type, "VUID-XrEnvironmentRaycastHitGetInfoMETA-type-type", XR_TYPE_ENVIRONMENT_RAYCAST_HIT_GET_INFO_META, "XR_TYPE_ENVIRONMENT_RAYCAST_HIT_GET_INFO_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitGetInfoMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentRaycastHitGetInfoMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycastHitGetInfoMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitGetInfoMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycastHitGetInfoMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitGetInfoMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitGetInfoMETA-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Optional array must be non-NULL when value->filterCount is non-zero
    if (0 != value->filterCount && nullptr == value->filters) {
        CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitGetInfoMETA-filters-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrEnvironmentRaycastHitGetInfoMETA member filterCount is NULL, but value->filterCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->filters) {
        for (uint32_t value_filters_inc = 0; value_filters_inc < value->filterCount; ++value_filters_inc) {
            if (value->filters[value_filters_inc] == nullptr) {
                std::string error_message = "Structure XrEnvironmentRaycastHitGetInfoMETA member filters";
                error_message += "[";
                error_message += std::to_string(value_filters_inc);
                error_message += "]";
                error_message += " is null";
                CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitGetInfoMETA-filters-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
            // Validate if XrEnvironmentRaycastFilterBaseHeaderMETA is a child structure of type XrEnvironmentRaycastFilterDistanceMETA and it is valid
            {
                if (value->filters != nullptr) {
                    const XrEnvironmentRaycastFilterDistanceMETA* const * new_environmentraycastfilterdistancemeta_value = reinterpret_cast<const XrEnvironmentRaycastFilterDistanceMETA* const *>(value->filters);
                    if (new_environmentraycastfilterdistancemeta_value[value_filters_inc]->type == XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META) {
                        if (nullptr != new_environmentraycastfilterdistancemeta_value) {
                            xr_result = ValidateXrStruct(instance_info, command_name,
                                                                            objects_info, check_members, true, new_environmentraycastfilterdistancemeta_value[value_filters_inc]);
                            if (XR_SUCCESS != xr_result) {
                                std::string error_message = "Structure XrEnvironmentRaycastHitGetInfoMETA member filters";
                                error_message += "[";
                                error_message += std::to_string(value_filters_inc);
                                error_message += "]";
                                error_message += " is invalid";
                                CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitGetInfoMETA-filters-parameter",
                                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                                    objects_info,
                                                    error_message);
                                return XR_ERROR_VALIDATION_FAILURE;
                                break;
                            } else {
                                continue;
                                }
                            }
                    }
                }
            }
            // Validate that the base-structure XrEnvironmentRaycastFilterBaseHeaderMETA is valid
            if (nullptr != value->filters[value_filters_inc]) {
                xr_result = ValidateXrStruct(instance_info, command_name,
                                                                objects_info, check_members, true, value->filters[value_filters_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitGetInfoMETA-filters-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info,
                                        "Structure XrEnvironmentRaycastHitGetInfoMETA member filters is invalid");
                    return xr_result;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycastHitMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_RAYCAST_HIT_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentRaycastHitMETA",
                             value->type, "VUID-XrEnvironmentRaycastHitMETA-type-type", XR_TYPE_ENVIRONMENT_RAYCAST_HIT_META, "XR_TYPE_ENVIRONMENT_RAYCAST_HIT_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentRaycastHitMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycastHitMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycastHitMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrEnvironmentRaycastHitStatusMETA value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrEnvironmentRaycastHitMETA", "status", objects_info, value->status)) {
        std::ostringstream oss_enum;
        oss_enum << "XrEnvironmentRaycastHitMETA contains invalid XrEnvironmentRaycastHitStatusMETA \"status\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->status));
        CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastHitMETA-status-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEnvironmentRaycastFilterDistanceMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEnvironmentRaycastFilterDistanceMETA",
                             value->type, "VUID-XrEnvironmentRaycastFilterDistanceMETA-type-type", XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META, "XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastFilterDistanceMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEnvironmentRaycastFilterDistanceMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycastFilterDistanceMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastFilterDistanceMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEnvironmentRaycastFilterDistanceMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEnvironmentRaycastFilterDistanceMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrExtent3DiMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTilePropertiesMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TILE_PROPERTIES_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTilePropertiesMETA",
                             value->type, "VUID-XrTilePropertiesMETA-type-type", XR_TYPE_TILE_PROPERTIES_META, "XR_TYPE_TILE_PROPERTIES_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTilePropertiesMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTilePropertiesMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTilePropertiesMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTilePropertiesMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTilePropertiesMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTilePropertiesMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTilePropertiesHintMETA* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TILE_PROPERTIES_HINT_META) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTilePropertiesHintMETA",
                             value->type, "VUID-XrTilePropertiesHintMETA-type-type", XR_TYPE_TILE_PROPERTIES_HINT_META, "XR_TYPE_TILE_PROPERTIES_HINT_META");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTilePropertiesHintMETA-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTilePropertiesHintMETA struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTilePropertiesHintMETA : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTilePropertiesHintMETA-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTilePropertiesHintMETA : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTilePropertiesHintMETA-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->propertiesCount && nullptr != value->properties) {
        CoreValidLogMessage(instance_info, "VUID-XrTilePropertiesHintMETA-propertiesCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrTilePropertiesHintMETA member propertiesCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->properties && 0 != value->propertiesCount) {
        CoreValidLogMessage(instance_info, "VUID-XrTilePropertiesHintMETA-properties-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrTilePropertiesHintMETA contains invalid NULL for XrTilePropertiesMETA \"properties\" is which not "
                            "optional since \"propertiesCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->properties) {
        for (uint32_t value_properties_inc = 0; value_properties_inc < value->propertiesCount; ++value_properties_inc) {
            // Validate that the structure XrTilePropertiesMETA is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->properties[value_properties_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrTilePropertiesHintMETA-properties-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrTilePropertiesHintMETA member properties is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemLightEstimationPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemLightEstimationPropertiesANDROID",
                             value->type, "VUID-XrSystemLightEstimationPropertiesANDROID-type-type", XR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemLightEstimationPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemLightEstimationPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemLightEstimationPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemLightEstimationPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemLightEstimationPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemLightEstimationPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsLightEstimation" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLightEstimatorCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLightEstimatorCreateInfoANDROID",
                             value->type, "VUID-XrLightEstimatorCreateInfoANDROID-type-type", XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID, "XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimatorCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLightEstimatorCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLightEstimatorCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimatorCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLightEstimatorCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimatorCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLightEstimateGetInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLightEstimateGetInfoANDROID",
                             value->type, "VUID-XrLightEstimateGetInfoANDROID-type-type", XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID, "XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimateGetInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLightEstimateGetInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLightEstimateGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimateGetInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLightEstimateGetInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimateGetInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimateGetInfoANDROID-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLightEstimateANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LIGHT_ESTIMATE_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLightEstimateANDROID",
                             value->type, "VUID-XrLightEstimateANDROID-type-type", XR_TYPE_LIGHT_ESTIMATE_ANDROID, "XR_TYPE_LIGHT_ESTIMATE_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_AMBIENT_LIGHT_ANDROID);
        valid_ext_structs.insert(XR_TYPE_DIRECTIONAL_LIGHT_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SPHERICAL_HARMONICS_ANDROID);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimateANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLightEstimateANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLightEstimateANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimateANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLightEstimateANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLightEstimateANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrLightEstimateStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrLightEstimateANDROID", "state", objects_info, value->state)) {
        std::ostringstream oss_enum;
        oss_enum << "XrLightEstimateANDROID contains invalid XrLightEstimateStateANDROID \"state\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->state));
        CoreValidLogMessage(instance_info, "VUID-XrLightEstimateANDROID-state-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrDirectionalLightANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_DIRECTIONAL_LIGHT_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrDirectionalLightANDROID",
                             value->type, "VUID-XrDirectionalLightANDROID-type-type", XR_TYPE_DIRECTIONAL_LIGHT_ANDROID, "XR_TYPE_DIRECTIONAL_LIGHT_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrDirectionalLightANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrDirectionalLightANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrDirectionalLightANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDirectionalLightANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrDirectionalLightANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrDirectionalLightANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrLightEstimateStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrDirectionalLightANDROID", "state", objects_info, value->state)) {
        std::ostringstream oss_enum;
        oss_enum << "XrDirectionalLightANDROID contains invalid XrLightEstimateStateANDROID \"state\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->state));
        CoreValidLogMessage(instance_info, "VUID-XrDirectionalLightANDROID-state-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAmbientLightANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_AMBIENT_LIGHT_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrAmbientLightANDROID",
                             value->type, "VUID-XrAmbientLightANDROID-type-type", XR_TYPE_AMBIENT_LIGHT_ANDROID, "XR_TYPE_AMBIENT_LIGHT_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrAmbientLightANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrAmbientLightANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrAmbientLightANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAmbientLightANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrAmbientLightANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAmbientLightANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrLightEstimateStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrAmbientLightANDROID", "state", objects_info, value->state)) {
        std::ostringstream oss_enum;
        oss_enum << "XrAmbientLightANDROID contains invalid XrLightEstimateStateANDROID \"state\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->state));
        CoreValidLogMessage(instance_info, "VUID-XrAmbientLightANDROID-state-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSphericalHarmonicsANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPHERICAL_HARMONICS_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSphericalHarmonicsANDROID",
                             value->type, "VUID-XrSphericalHarmonicsANDROID-type-type", XR_TYPE_SPHERICAL_HARMONICS_ANDROID, "XR_TYPE_SPHERICAL_HARMONICS_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSphericalHarmonicsANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSphericalHarmonicsANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSphericalHarmonicsANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSphericalHarmonicsANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSphericalHarmonicsANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSphericalHarmonicsANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrLightEstimateStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSphericalHarmonicsANDROID", "state", objects_info, value->state)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSphericalHarmonicsANDROID contains invalid XrLightEstimateStateANDROID \"state\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->state));
        CoreValidLogMessage(instance_info, "VUID-XrSphericalHarmonicsANDROID-state-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrSphericalHarmonicsKindANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSphericalHarmonicsANDROID", "kind", objects_info, value->kind)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSphericalHarmonicsANDROID contains invalid XrSphericalHarmonicsKindANDROID \"kind\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->kind));
        CoreValidLogMessage(instance_info, "VUID-XrSphericalHarmonicsANDROID-kind-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAnchorSharingInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ANCHOR_SHARING_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrAnchorSharingInfoANDROID",
                             value->type, "VUID-XrAnchorSharingInfoANDROID-type-type", XR_TYPE_ANCHOR_SHARING_INFO_ANDROID, "XR_TYPE_ANCHOR_SHARING_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSharingInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrAnchorSharingInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrAnchorSharingInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSharingInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrAnchorSharingInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSharingInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->anchor);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"anchor\" ";
            oss << HandleToHexString(value->anchor);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSharingInfoANDROID-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrAnchorSharingTokenANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_ANCHOR_SHARING_TOKEN_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrAnchorSharingTokenANDROID",
                             value->type, "VUID-XrAnchorSharingTokenANDROID-type-type", XR_TYPE_ANCHOR_SHARING_TOKEN_ANDROID, "XR_TYPE_ANCHOR_SHARING_TOKEN_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSharingTokenANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrAnchorSharingTokenANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrAnchorSharingTokenANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSharingTokenANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrAnchorSharingTokenANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrAnchorSharingTokenANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "token" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemAnchorSharingExportPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_ANCHOR_SHARING_EXPORT_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemAnchorSharingExportPropertiesANDROID",
                             value->type, "VUID-XrSystemAnchorSharingExportPropertiesANDROID-type-type", XR_TYPE_SYSTEM_ANCHOR_SHARING_EXPORT_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_ANCHOR_SHARING_EXPORT_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemAnchorSharingExportPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemAnchorSharingExportPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemAnchorSharingExportPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemAnchorSharingExportPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemAnchorSharingExportPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemAnchorSharingExportPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsAnchorSharingExport" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

#endif // defined(XR_USE_PLATFORM_ANDROID)
XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemMarkerTrackingPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemMarkerTrackingPropertiesANDROID",
                             value->type, "VUID-XrSystemMarkerTrackingPropertiesANDROID-type-type", XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemMarkerTrackingPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemMarkerTrackingPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemMarkerTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemMarkerTrackingPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemMarkerTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemMarkerTrackingPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsMarkerTracking" because this struct is returned only.
    // Skip checking member "supportsMarkerSizeEstimation" because this struct is returned only.
    // Skip checking member "maxMarkerCount" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableMarkerDatabaseEntryANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableMarkerDatabaseANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrTrackableMarkerDictionaryANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableMarkerDatabaseANDROID", "dictionary", objects_info, value->dictionary)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableMarkerDatabaseANDROID contains invalid XrTrackableMarkerDictionaryANDROID \"dictionary\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->dictionary));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerDatabaseANDROID-dictionary-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->entryCount is non-zero
    if (0 != value->entryCount && nullptr == value->entries) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerDatabaseANDROID-entries-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrTrackableMarkerDatabaseANDROID member entryCount is NULL, but value->entryCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->entries && 0 != value->entryCount) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerDatabaseANDROID-entries-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrTrackableMarkerDatabaseANDROID contains invalid NULL for XrTrackableMarkerDatabaseEntryANDROID \"entries\" is which not "
                            "optional since \"entryCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrTrackableMarkerDatabaseANDROID-entries-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableMarkerConfigurationANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableMarkerConfigurationANDROID",
                             value->type, "VUID-XrTrackableMarkerConfigurationANDROID-type-type", XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID, "XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerConfigurationANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableMarkerConfigurationANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableMarkerConfigurationANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerConfigurationANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableMarkerConfigurationANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerConfigurationANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrTrackableMarkerTrackingModeANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableMarkerConfigurationANDROID", "trackingMode", objects_info, value->trackingMode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableMarkerConfigurationANDROID contains invalid XrTrackableMarkerTrackingModeANDROID \"trackingMode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingMode));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerConfigurationANDROID-trackingMode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->databaseCount && nullptr != value->databases) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerConfigurationANDROID-databaseCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrTrackableMarkerConfigurationANDROID member databaseCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->databases && 0 != value->databaseCount) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerConfigurationANDROID-databases-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrTrackableMarkerConfigurationANDROID contains invalid NULL for XrTrackableMarkerDatabaseANDROID \"databases\" is which not "
                            "optional since \"databaseCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->databases) {
        for (uint32_t value_databases_inc = 0; value_databases_inc < value->databaseCount; ++value_databases_inc) {
            // Validate that the structure XrTrackableMarkerDatabaseANDROID is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->databases[value_databases_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerConfigurationANDROID-databases-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrTrackableMarkerConfigurationANDROID member databases is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableMarkerANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_MARKER_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableMarkerANDROID",
                             value->type, "VUID-XrTrackableMarkerANDROID-type-type", XR_TYPE_TRACKABLE_MARKER_ANDROID, "XR_TYPE_TRACKABLE_MARKER_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableMarkerANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableMarkerANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableMarkerANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrTrackingStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableMarkerANDROID", "trackingState", objects_info, value->trackingState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableMarkerANDROID contains invalid XrTrackingStateANDROID \"trackingState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingState));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerANDROID-trackingState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrTrackableMarkerDictionaryANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableMarkerANDROID", "dictionary", objects_info, value->dictionary)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableMarkerANDROID contains invalid XrTrackableMarkerDictionaryANDROID \"dictionary\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->dictionary));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableMarkerANDROID-dictionary-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemQrCodeTrackingPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemQrCodeTrackingPropertiesANDROID",
                             value->type, "VUID-XrSystemQrCodeTrackingPropertiesANDROID-type-type", XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemQrCodeTrackingPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemQrCodeTrackingPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemQrCodeTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemQrCodeTrackingPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemQrCodeTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemQrCodeTrackingPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsQrCodeTracking" because this struct is returned only.
    // Skip checking member "supportsQrCodeSizeEstimation" because this struct is returned only.
    // Skip checking member "maxQrCodeCount" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableQrCodeConfigurationANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableQrCodeConfigurationANDROID",
                             value->type, "VUID-XrTrackableQrCodeConfigurationANDROID-type-type", XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID, "XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableQrCodeConfigurationANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableQrCodeConfigurationANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableQrCodeConfigurationANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableQrCodeConfigurationANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableQrCodeConfigurationANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableQrCodeConfigurationANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrQrCodeTrackingModeANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableQrCodeConfigurationANDROID", "trackingMode", objects_info, value->trackingMode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableQrCodeConfigurationANDROID contains invalid XrQrCodeTrackingModeANDROID \"trackingMode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingMode));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableQrCodeConfigurationANDROID-trackingMode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableQrCodeANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_QR_CODE_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableQrCodeANDROID",
                             value->type, "VUID-XrTrackableQrCodeANDROID-type-type", XR_TYPE_TRACKABLE_QR_CODE_ANDROID, "XR_TYPE_TRACKABLE_QR_CODE_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableQrCodeANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableQrCodeANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableQrCodeANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableQrCodeANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableQrCodeANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableQrCodeANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrTrackingStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableQrCodeANDROID", "trackingState", objects_info, value->trackingState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableQrCodeANDROID contains invalid XrTrackingStateANDROID \"trackingState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingState));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableQrCodeANDROID-trackingState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Optional array must be non-NULL when value->bufferCapacityInput is non-zero
    if (0 != value->bufferCapacityInput && nullptr == value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableQrCodeANDROID-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrTrackableQrCodeANDROID member bufferCapacityInput is NULL, but value->bufferCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrTrackableQrCodeANDROID-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemImageTrackingPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemImageTrackingPropertiesANDROID",
                             value->type, "VUID-XrSystemImageTrackingPropertiesANDROID-type-type", XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemImageTrackingPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemImageTrackingPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemImageTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemImageTrackingPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemImageTrackingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemImageTrackingPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsImageTracking" because this struct is returned only.
    // Skip checking member "supportsPhysicalSizeEstimation" because this struct is returned only.
    // Skip checking member "maxTrackedImageCount" because this struct is returned only.
    // Skip checking member "maxLoadedImageCount" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableImageDatabaseEntryANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableImageDatabaseEntryANDROID",
                             value->type, "VUID-XrTrackableImageDatabaseEntryANDROID-type-type", XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID, "XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseEntryANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableImageDatabaseEntryANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableImageDatabaseEntryANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseEntryANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableImageDatabaseEntryANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseEntryANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrTrackableImageTrackingModeANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableImageDatabaseEntryANDROID", "trackingMode", objects_info, value->trackingMode)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableImageDatabaseEntryANDROID contains invalid XrTrackableImageTrackingModeANDROID \"trackingMode\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingMode));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseEntryANDROID-trackingMode-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrTrackableImageFormatANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableImageDatabaseEntryANDROID", "format", objects_info, value->format)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableImageDatabaseEntryANDROID contains invalid XrTrackableImageFormatANDROID \"format\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->format));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseEntryANDROID-format-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->bufferSize && nullptr != value->buffer) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseEntryANDROID-bufferSize-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrTrackableImageDatabaseEntryANDROID member bufferSize is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->buffer && 0 != value->bufferSize) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseEntryANDROID-buffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrTrackableImageDatabaseEntryANDROID contains invalid NULL for uint8_t \"buffer\" is which not "
                            "optional since \"bufferSize\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrTrackableImageDatabaseEntryANDROID-buffer-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableImageDatabaseCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableImageDatabaseCreateInfoANDROID",
                             value->type, "VUID-XrTrackableImageDatabaseCreateInfoANDROID-type-type", XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID, "XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableImageDatabaseCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableImageDatabaseCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableImageDatabaseCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->entryCount && nullptr != value->entries) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseCreateInfoANDROID-entryCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrTrackableImageDatabaseCreateInfoANDROID member entryCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->entries && 0 != value->entryCount) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseCreateInfoANDROID-entries-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrTrackableImageDatabaseCreateInfoANDROID contains invalid NULL for XrTrackableImageDatabaseEntryANDROID \"entries\" is which not "
                            "optional since \"entryCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->entries) {
        for (uint32_t value_entries_inc = 0; value_entries_inc < value->entryCount; ++value_entries_inc) {
            // Validate that the structure XrTrackableImageDatabaseEntryANDROID is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->entries[value_entries_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrTrackableImageDatabaseCreateInfoANDROID-entries-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrTrackableImageDatabaseCreateInfoANDROID member entries is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateTrackableImageDatabaseCompletionANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCreateTrackableImageDatabaseCompletionANDROID",
                             value->type, "VUID-XrCreateTrackableImageDatabaseCompletionANDROID-type-type", XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID, "XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCreateTrackableImageDatabaseCompletionANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCreateTrackableImageDatabaseCompletionANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCreateTrackableImageDatabaseCompletionANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateTrackableImageDatabaseCompletionANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCreateTrackableImageDatabaseCompletionANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateTrackableImageDatabaseCompletionANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCreateTrackableImageDatabaseCompletionANDROID", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCreateTrackableImageDatabaseCompletionANDROID contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrCreateTrackableImageDatabaseCompletionANDROID-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrTrackableImageDatabaseANDROIDHandle(&value->database);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrTrackableImageDatabaseANDROID handle \"database\" ";
            oss << HandleToHexString(value->database);
            CoreValidLogMessage(instance_info, "VUID-XrCreateTrackableImageDatabaseCompletionANDROID-database-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableImageConfigurationANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableImageConfigurationANDROID",
                             value->type, "VUID-XrTrackableImageConfigurationANDROID-type-type", XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID, "XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageConfigurationANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableImageConfigurationANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableImageConfigurationANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageConfigurationANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableImageConfigurationANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageConfigurationANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->databaseCount && nullptr != value->databases) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableImageConfigurationANDROID-databaseCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrTrackableImageConfigurationANDROID member databaseCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->databases && 0 != value->databaseCount) {
        CoreValidLogMessage(instance_info, "VUID-XrTrackableImageConfigurationANDROID-databases-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrTrackableImageConfigurationANDROID contains invalid NULL for XrTrackableImageDatabaseANDROID \"databases\" is which not "
                            "optional since \"databaseCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->databases) {
        for (uint32_t value_databases_inc = 0; value_databases_inc < value->databaseCount; ++value_databases_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrTrackableImageDatabaseANDROIDHandle(&value->databases[value_databases_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrTrackableImageDatabaseANDROID handle \"databases\" ";
                    oss << HandleToHexString(value->databases[value_databases_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrTrackableImageConfigurationANDROID-databases-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrTrackableImageANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_TRACKABLE_IMAGE_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrTrackableImageANDROID",
                             value->type, "VUID-XrTrackableImageANDROID-type-type", XR_TYPE_TRACKABLE_IMAGE_ANDROID, "XR_TYPE_TRACKABLE_IMAGE_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrTrackableImageANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrTrackableImageANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrTrackableImageANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrTrackingStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrTrackableImageANDROID", "trackingState", objects_info, value->trackingState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrTrackableImageANDROID contains invalid XrTrackingStateANDROID \"trackingState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingState));
        CoreValidLogMessage(instance_info, "VUID-XrTrackableImageANDROID-trackingState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrTrackableImageDatabaseANDROIDHandle(&value->database);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrTrackableImageDatabaseANDROID handle \"database\" ";
            oss << HandleToHexString(value->database);
            CoreValidLogMessage(instance_info, "VUID-XrTrackableImageANDROID-database-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataImageTrackingLostANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataImageTrackingLostANDROID",
                             value->type, "VUID-XrEventDataImageTrackingLostANDROID-type-type", XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID, "XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataImageTrackingLostANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataImageTrackingLostANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataImageTrackingLostANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataImageTrackingLostANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataImageTrackingLostANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataImageTrackingLostANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "time" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemSceneMeshingPropertiesANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemSceneMeshingPropertiesANDROID",
                             value->type, "VUID-XrSystemSceneMeshingPropertiesANDROID-type-type", XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID, "XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemSceneMeshingPropertiesANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemSceneMeshingPropertiesANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemSceneMeshingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSceneMeshingPropertiesANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemSceneMeshingPropertiesANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemSceneMeshingPropertiesANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsSceneMeshing" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshingTrackerCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMeshingTrackerCreateInfoANDROID",
                             value->type, "VUID-XrSceneMeshingTrackerCreateInfoANDROID-type-type", XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID, "XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshingTrackerCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMeshingTrackerCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshingTrackerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshingTrackerCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshingTrackerCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshingTrackerCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSceneMeshSemanticLabelSetANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSceneMeshingTrackerCreateInfoANDROID", "semanticLabelSet", objects_info, value->semanticLabelSet)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSceneMeshingTrackerCreateInfoANDROID contains invalid XrSceneMeshSemanticLabelSetANDROID \"semanticLabelSet\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->semanticLabelSet));
        CoreValidLogMessage(instance_info, "VUID-XrSceneMeshingTrackerCreateInfoANDROID-semanticLabelSet-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshSnapshotCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMeshSnapshotCreateInfoANDROID",
                             value->type, "VUID-XrSceneMeshSnapshotCreateInfoANDROID-type-type", XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID, "XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshSnapshotCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMeshSnapshotCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshSnapshotCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshSnapshotCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshSnapshotCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshSnapshotCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshSnapshotCreateInfoANDROID-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneMeshSnapshotCreationResultANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneMeshSnapshotCreationResultANDROID",
                             value->type, "VUID-XrSceneMeshSnapshotCreationResultANDROID-type-type", XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID, "XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshSnapshotCreationResultANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneMeshSnapshotCreationResultANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshSnapshotCreationResultANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshSnapshotCreationResultANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneMeshSnapshotCreationResultANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshSnapshotCreationResultANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSceneMeshSnapshotANDROIDHandle(&value->snapshot);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSceneMeshSnapshotANDROID handle \"snapshot\" ";
            oss << HandleToHexString(value->snapshot);
            CoreValidLogMessage(instance_info, "VUID-XrSceneMeshSnapshotCreationResultANDROID-snapshot-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Make sure the enum type XrSceneMeshTrackingStateANDROID value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSceneMeshSnapshotCreationResultANDROID", "trackingState", objects_info, value->trackingState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSceneMeshSnapshotCreationResultANDROID contains invalid XrSceneMeshTrackingStateANDROID \"trackingState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingState));
        CoreValidLogMessage(instance_info, "VUID-XrSceneMeshSnapshotCreationResultANDROID-trackingState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneSubmeshStateANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_SUBMESH_STATE_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneSubmeshStateANDROID",
                             value->type, "VUID-XrSceneSubmeshStateANDROID-type-type", XR_TYPE_SCENE_SUBMESH_STATE_ANDROID, "XR_TYPE_SCENE_SUBMESH_STATE_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneSubmeshStateANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneSubmeshStateANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneSubmeshStateANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneSubmeshStateANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneSubmeshStateANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneSubmeshStateANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSceneSubmeshDataANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SCENE_SUBMESH_DATA_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSceneSubmeshDataANDROID",
                             value->type, "VUID-XrSceneSubmeshDataANDROID-type-type", XR_TYPE_SCENE_SUBMESH_DATA_ANDROID, "XR_TYPE_SCENE_SUBMESH_DATA_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSceneSubmeshDataANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSceneSubmeshDataANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSceneSubmeshDataANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneSubmeshDataANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSceneSubmeshDataANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSceneSubmeshDataANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->vertexCapacityInput is non-zero
    if (0 != value->vertexCapacityInput && nullptr == value->vertexSemantics) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneSubmeshDataANDROID-vertexSemantics-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneSubmeshDataANDROID member vertexCapacityInput is NULL, but value->vertexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneSubmeshDataANDROID-vertexPositions-parameter" type
    // NOTE: Can't validate "VUID-XrSceneSubmeshDataANDROID-vertexNormals-parameter" type
    // NOTE: Can't validate "VUID-XrSceneSubmeshDataANDROID-vertexSemantics-parameter" type
    // Optional array must be non-NULL when value->indexCapacityInput is non-zero
    if (0 != value->indexCapacityInput && nullptr == value->indices) {
        CoreValidLogMessage(instance_info, "VUID-XrSceneSubmeshDataANDROID-indices-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSceneSubmeshDataANDROID member indexCapacityInput is NULL, but value->indexCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSceneSubmeshDataANDROID-indices-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityComponentTypesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityComponentTypesEXT",
                             value->type, "VUID-XrSpatialCapabilityComponentTypesEXT-type-type", XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT, "XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityComponentTypesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialCapabilityComponentTypesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityComponentTypesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityComponentTypesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityComponentTypesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityComponentTypesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->componentTypeCapacityInput is non-zero
    if (0 != value->componentTypeCapacityInput && nullptr == value->componentTypes) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityComponentTypesEXT-componentTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityComponentTypesEXT member componentTypeCapacityInput is NULL, but value->componentTypeCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrSpatialCapabilityComponentTypesEXT-componentTypes-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationBaseHeaderEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // NOTE: Can't validate "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-next-next" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-capability-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-enabledComponentCount-parameter" because it is a base structure
    // NOTE: Can't validate "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-enabledComponents-parameter" because it is a base structure
    if (value->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT) {
        const XrSpatialCapabilityConfigurationPlaneTrackingEXT* new_value = reinterpret_cast<const XrSpatialCapabilityConfigurationPlaneTrackingEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_plane_tracking")) {
            std::string error_str = "XrSpatialCapabilityConfigurationBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_plane_tracking\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT) {
        const XrSpatialCapabilityConfigurationQrCodeEXT* new_value = reinterpret_cast<const XrSpatialCapabilityConfigurationQrCodeEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
            std::string error_str = "XrSpatialCapabilityConfigurationBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT) {
        const XrSpatialCapabilityConfigurationMicroQrCodeEXT* new_value = reinterpret_cast<const XrSpatialCapabilityConfigurationMicroQrCodeEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
            std::string error_str = "XrSpatialCapabilityConfigurationBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT) {
        const XrSpatialCapabilityConfigurationArucoMarkerEXT* new_value = reinterpret_cast<const XrSpatialCapabilityConfigurationArucoMarkerEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
            std::string error_str = "XrSpatialCapabilityConfigurationBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT) {
        const XrSpatialCapabilityConfigurationAprilTagEXT* new_value = reinterpret_cast<const XrSpatialCapabilityConfigurationAprilTagEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_marker_tracking")) {
            std::string error_str = "XrSpatialCapabilityConfigurationBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_marker_tracking\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT) {
        const XrSpatialCapabilityConfigurationAnchorEXT* new_value = reinterpret_cast<const XrSpatialCapabilityConfigurationAnchorEXT*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_EXT_spatial_anchor")) {
            std::string error_str = "XrSpatialCapabilityConfigurationBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT\"";
            error_str += " which requires extension \"XR_EXT_spatial_anchor\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID) {
        const XrSpatialCapabilityConfigurationObjectTrackingANDROID* new_value = reinterpret_cast<const XrSpatialCapabilityConfigurationObjectTrackingANDROID*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_object_tracking")) {
            std::string error_str = "XrSpatialCapabilityConfigurationBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID\"";
            error_str += " which requires extension \"XR_ANDROID_spatial_object_tracking\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    if (value->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID) {
        const XrSpatialCapabilityConfigurationDepthRaycastANDROID* new_value = reinterpret_cast<const XrSpatialCapabilityConfigurationDepthRaycastANDROID*>(value);
        if (nullptr != instance_info && !ExtensionEnabled(instance_info->enabled_extensions, "XR_ANDROID_spatial_discovery_raycast")) {
            std::string error_str = "XrSpatialCapabilityConfigurationBaseHeaderEXT being used with child struct type ";
            error_str += "\"XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID\"";
            error_str += " which requires extension \"XR_ANDROID_spatial_discovery_raycast\" to be enabled, but it is not enabled";
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-type",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, error_str);
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return ValidateXrStruct(instance_info, command_name, objects_info, check_members, false, new_value);
    }
    InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityConfigurationBaseHeaderEXT",
                         value->type, "VUID-XrSpatialCapabilityConfigurationBaseHeaderEXT-type-type");
    return XR_ERROR_VALIDATION_FAILURE;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialContextCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialContextCreateInfoEXT",
                             value->type, "VUID-XrSpatialContextCreateInfoEXT-type-type", XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT, "XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_CONTEXT_PERSISTENCE_CONFIG_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialContextCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialContextCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialContextCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->capabilityConfigCount && nullptr != value->capabilityConfigs) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialContextCreateInfoEXT member capabilityConfigCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->capabilityConfigs && 0 != value->capabilityConfigCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialContextCreateInfoEXT contains invalid NULL for XrSpatialCapabilityConfigurationBaseHeaderEXT \"capabilityConfigs\" is which not "
                            "optional since \"capabilityConfigCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->capabilityConfigs) {
        for (uint32_t value_capabilityconfigs_inc = 0; value_capabilityconfigs_inc < value->capabilityConfigCount; ++value_capabilityconfigs_inc) {
            if (value->capabilityConfigs[value_capabilityconfigs_inc] == nullptr) {
                std::string error_message = "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs";
                error_message += "[";
                error_message += std::to_string(value_capabilityconfigs_inc);
                error_message += "]";
                error_message += " is null";
                CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    error_message);
                return XR_ERROR_VALIDATION_FAILURE;
            }
            // Validate if XrSpatialCapabilityConfigurationBaseHeaderEXT is a child structure of type XrSpatialCapabilityConfigurationPlaneTrackingEXT and it is valid
            {
                const XrSpatialCapabilityConfigurationPlaneTrackingEXT* const* new_spatialcapabilityconfigurationplanetrackingext_value = reinterpret_cast<const XrSpatialCapabilityConfigurationPlaneTrackingEXT* const*>(value->capabilityConfigs);
                if (new_spatialcapabilityconfigurationplanetrackingext_value[value_capabilityconfigs_inc]->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spatialcapabilityconfigurationplanetrackingext_value[value_capabilityconfigs_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs";
                        error_message += "[";
                        error_message += std::to_string(value_capabilityconfigs_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrSpatialCapabilityConfigurationBaseHeaderEXT is a child structure of type XrSpatialCapabilityConfigurationQrCodeEXT and it is valid
            {
                const XrSpatialCapabilityConfigurationQrCodeEXT* const* new_spatialcapabilityconfigurationqrcodeext_value = reinterpret_cast<const XrSpatialCapabilityConfigurationQrCodeEXT* const*>(value->capabilityConfigs);
                if (new_spatialcapabilityconfigurationqrcodeext_value[value_capabilityconfigs_inc]->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spatialcapabilityconfigurationqrcodeext_value[value_capabilityconfigs_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs";
                        error_message += "[";
                        error_message += std::to_string(value_capabilityconfigs_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrSpatialCapabilityConfigurationBaseHeaderEXT is a child structure of type XrSpatialCapabilityConfigurationMicroQrCodeEXT and it is valid
            {
                const XrSpatialCapabilityConfigurationMicroQrCodeEXT* const* new_spatialcapabilityconfigurationmicroqrcodeext_value = reinterpret_cast<const XrSpatialCapabilityConfigurationMicroQrCodeEXT* const*>(value->capabilityConfigs);
                if (new_spatialcapabilityconfigurationmicroqrcodeext_value[value_capabilityconfigs_inc]->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spatialcapabilityconfigurationmicroqrcodeext_value[value_capabilityconfigs_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs";
                        error_message += "[";
                        error_message += std::to_string(value_capabilityconfigs_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrSpatialCapabilityConfigurationBaseHeaderEXT is a child structure of type XrSpatialCapabilityConfigurationArucoMarkerEXT and it is valid
            {
                const XrSpatialCapabilityConfigurationArucoMarkerEXT* const* new_spatialcapabilityconfigurationarucomarkerext_value = reinterpret_cast<const XrSpatialCapabilityConfigurationArucoMarkerEXT* const*>(value->capabilityConfigs);
                if (new_spatialcapabilityconfigurationarucomarkerext_value[value_capabilityconfigs_inc]->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spatialcapabilityconfigurationarucomarkerext_value[value_capabilityconfigs_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs";
                        error_message += "[";
                        error_message += std::to_string(value_capabilityconfigs_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrSpatialCapabilityConfigurationBaseHeaderEXT is a child structure of type XrSpatialCapabilityConfigurationAprilTagEXT and it is valid
            {
                const XrSpatialCapabilityConfigurationAprilTagEXT* const* new_spatialcapabilityconfigurationapriltagext_value = reinterpret_cast<const XrSpatialCapabilityConfigurationAprilTagEXT* const*>(value->capabilityConfigs);
                if (new_spatialcapabilityconfigurationapriltagext_value[value_capabilityconfigs_inc]->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spatialcapabilityconfigurationapriltagext_value[value_capabilityconfigs_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs";
                        error_message += "[";
                        error_message += std::to_string(value_capabilityconfigs_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrSpatialCapabilityConfigurationBaseHeaderEXT is a child structure of type XrSpatialCapabilityConfigurationAnchorEXT and it is valid
            {
                const XrSpatialCapabilityConfigurationAnchorEXT* const* new_spatialcapabilityconfigurationanchorext_value = reinterpret_cast<const XrSpatialCapabilityConfigurationAnchorEXT* const*>(value->capabilityConfigs);
                if (new_spatialcapabilityconfigurationanchorext_value[value_capabilityconfigs_inc]->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spatialcapabilityconfigurationanchorext_value[value_capabilityconfigs_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs";
                        error_message += "[";
                        error_message += std::to_string(value_capabilityconfigs_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrSpatialCapabilityConfigurationBaseHeaderEXT is a child structure of type XrSpatialCapabilityConfigurationObjectTrackingANDROID and it is valid
            {
                const XrSpatialCapabilityConfigurationObjectTrackingANDROID* const* new_spatialcapabilityconfigurationobjecttrackingandroid_value = reinterpret_cast<const XrSpatialCapabilityConfigurationObjectTrackingANDROID* const*>(value->capabilityConfigs);
                if (new_spatialcapabilityconfigurationobjecttrackingandroid_value[value_capabilityconfigs_inc]->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spatialcapabilityconfigurationobjecttrackingandroid_value[value_capabilityconfigs_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs";
                        error_message += "[";
                        error_message += std::to_string(value_capabilityconfigs_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate if XrSpatialCapabilityConfigurationBaseHeaderEXT is a child structure of type XrSpatialCapabilityConfigurationDepthRaycastANDROID and it is valid
            {
                const XrSpatialCapabilityConfigurationDepthRaycastANDROID* const* new_spatialcapabilityconfigurationdepthraycastandroid_value = reinterpret_cast<const XrSpatialCapabilityConfigurationDepthRaycastANDROID* const*>(value->capabilityConfigs);
                if (new_spatialcapabilityconfigurationdepthraycastandroid_value[value_capabilityconfigs_inc]->type == XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID) {
                    xr_result = ValidateXrStruct(instance_info, command_name,
                                                                    objects_info, check_members, true, new_spatialcapabilityconfigurationdepthraycastandroid_value[value_capabilityconfigs_inc]);
                    if (XR_SUCCESS != xr_result) {
                        std::string error_message = "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs";
                        error_message += "[";
                        error_message += std::to_string(value_capabilityconfigs_inc);
                        error_message += "]";
                        error_message += " is invalid";
                        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                            objects_info,
                                            error_message);
                        return XR_ERROR_VALIDATION_FAILURE;
                        break;
                    } else {
                        continue;
                    }
                }
            }
            // Validate that the base-structure XrSpatialCapabilityConfigurationBaseHeaderEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, value->capabilityConfigs[value_capabilityconfigs_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpatialContextCreateInfoEXT-capabilityConfigs-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpatialContextCreateInfoEXT member capabilityConfigs is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialContextCompletionEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCreateSpatialContextCompletionEXT",
                             value->type, "VUID-XrCreateSpatialContextCompletionEXT-type-type", XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT, "XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialContextCompletionEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCreateSpatialContextCompletionEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialContextCompletionEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialContextCompletionEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialContextCompletionEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialContextCompletionEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCreateSpatialContextCompletionEXT", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCreateSpatialContextCompletionEXT contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialContextCompletionEXT-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&value->spatialContext);
        if (handle_result == VALIDATE_XR_HANDLE_INVALID) {
            // Not a valid handle
            std::ostringstream oss;
            oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
            oss << HandleToHexString(value->spatialContext);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialContextCompletionEXT-spatialContext-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialDiscoverySnapshotCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialDiscoverySnapshotCreateInfoEXT",
                             value->type, "VUID-XrSpatialDiscoverySnapshotCreateInfoEXT-type-type", XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT, "XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_DISCOVERY_PERSISTENCE_UUID_FILTER_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoverySnapshotCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialDiscoverySnapshotCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialDiscoverySnapshotCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoverySnapshotCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialDiscoverySnapshotCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoverySnapshotCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->componentTypeCount is non-zero
    if (0 != value->componentTypeCount && nullptr == value->componentTypes) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoverySnapshotCreateInfoEXT-componentTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialDiscoverySnapshotCreateInfoEXT member componentTypeCount is NULL, but value->componentTypeCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->componentTypes) {
        for (uint32_t value_componenttypes_inc = 0; value_componenttypes_inc < value->componentTypeCount; ++value_componenttypes_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialDiscoverySnapshotCreateInfoEXT", "componentTypes", objects_info, value->componentTypes[value_componenttypes_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialDiscoverySnapshotCreateInfoEXT contains invalid XrSpatialComponentTypeEXT \"componentTypes\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentTypes[value_componenttypes_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoverySnapshotCreateInfoEXT-componentTypes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCreateSpatialDiscoverySnapshotCompletionInfoEXT",
                             value->type, "VUID-XrCreateSpatialDiscoverySnapshotCompletionInfoEXT-type-type", XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT, "XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialDiscoverySnapshotCompletionInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCreateSpatialDiscoverySnapshotCompletionInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialDiscoverySnapshotCompletionInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialDiscoverySnapshotCompletionInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialDiscoverySnapshotCompletionInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialDiscoverySnapshotCompletionInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialDiscoverySnapshotCompletionInfoEXT-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialDiscoverySnapshotCompletionEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCreateSpatialDiscoverySnapshotCompletionEXT",
                             value->type, "VUID-XrCreateSpatialDiscoverySnapshotCompletionEXT-type-type", XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT, "XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialDiscoverySnapshotCompletionEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCreateSpatialDiscoverySnapshotCompletionEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialDiscoverySnapshotCompletionEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialDiscoverySnapshotCompletionEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialDiscoverySnapshotCompletionEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialDiscoverySnapshotCompletionEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCreateSpatialDiscoverySnapshotCompletionEXT", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCreateSpatialDiscoverySnapshotCompletionEXT contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialDiscoverySnapshotCompletionEXT-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&value->snapshot);
        if (handle_result == VALIDATE_XR_HANDLE_INVALID) {
            // Not a valid handle
            std::ostringstream oss;
            oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
            oss << HandleToHexString(value->snapshot);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialDiscoverySnapshotCompletionEXT-snapshot-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentDataQueryConditionEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentDataQueryConditionEXT",
                             value->type, "VUID-XrSpatialComponentDataQueryConditionEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT, "XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_DISCOVERY_PERSISTENCE_UUID_FILTER_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryConditionEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentDataQueryConditionEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentDataQueryConditionEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryConditionEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentDataQueryConditionEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryConditionEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->componentTypeCount is non-zero
    if (0 != value->componentTypeCount && nullptr == value->componentTypes) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryConditionEXT-componentTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentDataQueryConditionEXT member componentTypeCount is NULL, but value->componentTypeCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->componentTypes) {
        for (uint32_t value_componenttypes_inc = 0; value_componenttypes_inc < value->componentTypeCount; ++value_componenttypes_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialComponentDataQueryConditionEXT", "componentTypes", objects_info, value->componentTypes[value_componenttypes_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialComponentDataQueryConditionEXT contains invalid XrSpatialComponentTypeEXT \"componentTypes\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentTypes[value_componenttypes_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryConditionEXT-componentTypes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentDataQueryResultEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentDataQueryResultEXT",
                             value->type, "VUID-XrSpatialComponentDataQueryResultEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT, "XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_ANCHOR_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_PERSISTENCE_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryResultEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentDataQueryResultEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentDataQueryResultEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryResultEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentDataQueryResultEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryResultEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->entityIdCapacityInput is non-zero
    if (0 != value->entityIdCapacityInput && nullptr == value->entityIds) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryResultEXT-entityIds-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentDataQueryResultEXT member entityIdCapacityInput is NULL, but value->entityIdCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialComponentDataQueryResultEXT-entityIds-parameter" type
    // Optional array must be non-NULL when value->entityStateCapacityInput is non-zero
    if (0 != value->entityStateCapacityInput && nullptr == value->entityStates) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentDataQueryResultEXT-entityStates-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentDataQueryResultEXT member entityStateCapacityInput is NULL, but value->entityStateCapacityInput is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrSpatialComponentDataQueryResultEXT-entityStates-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialBufferEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialBufferTypeEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialBufferEXT", "bufferType", objects_info, value->bufferType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialBufferEXT contains invalid XrSpatialBufferTypeEXT \"bufferType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->bufferType));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialBufferEXT-bufferType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialBufferGetInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialBufferGetInfoEXT",
                             value->type, "VUID-XrSpatialBufferGetInfoEXT-type-type", XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT, "XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialBufferGetInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialBufferGetInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialBufferGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialBufferGetInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialBufferGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialBufferGetInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialBounded2DDataEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentBounded2DListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentBounded2DListEXT",
                             value->type, "VUID-XrSpatialComponentBounded2DListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded2DListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentBounded2DListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentBounded2DListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded2DListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentBounded2DListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded2DListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->boundCount && nullptr != value->bounds) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded2DListEXT-boundCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentBounded2DListEXT member boundCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->bounds && 0 != value->boundCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded2DListEXT-bounds-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentBounded2DListEXT contains invalid NULL for XrSpatialBounded2DDataEXT \"bounds\" is which not "
                            "optional since \"boundCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialComponentBounded2DListEXT-bounds-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentBounded3DListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentBounded3DListEXT",
                             value->type, "VUID-XrSpatialComponentBounded3DListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded3DListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentBounded3DListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentBounded3DListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded3DListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentBounded3DListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded3DListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->boundCount && nullptr != value->bounds) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded3DListEXT-boundCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentBounded3DListEXT member boundCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->bounds && 0 != value->boundCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentBounded3DListEXT-bounds-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentBounded3DListEXT contains invalid NULL for XrBoxf \"bounds\" is which not "
                            "optional since \"boundCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialComponentBounded3DListEXT-bounds-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentParentListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentParentListEXT",
                             value->type, "VUID-XrSpatialComponentParentListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentParentListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentParentListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentParentListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentParentListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentParentListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentParentListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->parentCount && nullptr != value->parents) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentParentListEXT-parentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentParentListEXT member parentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->parents && 0 != value->parentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentParentListEXT-parents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentParentListEXT contains invalid NULL for XrSpatialEntityIdEXT \"parents\" is which not "
                            "optional since \"parentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialComponentParentListEXT-parents-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialMeshDataEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Validate that the structure XrSpatialBufferEXT is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->vertexBuffer);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialMeshDataEXT-vertexBuffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialMeshDataEXT member vertexBuffer is invalid");
        return xr_result;
    }
    // Validate that the structure XrSpatialBufferEXT is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->indexBuffer);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialMeshDataEXT-indexBuffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialMeshDataEXT member indexBuffer is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentMesh3DListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentMesh3DListEXT",
                             value->type, "VUID-XrSpatialComponentMesh3DListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh3DListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentMesh3DListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentMesh3DListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh3DListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentMesh3DListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh3DListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->meshCount && nullptr != value->meshes) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh3DListEXT-meshCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentMesh3DListEXT member meshCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->meshes && 0 != value->meshCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh3DListEXT-meshes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentMesh3DListEXT contains invalid NULL for XrSpatialMeshDataEXT \"meshes\" is which not "
                            "optional since \"meshCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->meshes) {
        for (uint32_t value_meshes_inc = 0; value_meshes_inc < value->meshCount; ++value_meshes_inc) {
            // Validate that the structure XrSpatialMeshDataEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->meshes[value_meshes_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh3DListEXT-meshes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpatialComponentMesh3DListEXT member meshes is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityFromIdCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityFromIdCreateInfoEXT",
                             value->type, "VUID-XrSpatialEntityFromIdCreateInfoEXT-type-type", XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT, "XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityFromIdCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityFromIdCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityFromIdCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityFromIdCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityFromIdCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityFromIdCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialUpdateSnapshotCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialUpdateSnapshotCreateInfoEXT",
                             value->type, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-type-type", XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT, "XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialUpdateSnapshotCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialUpdateSnapshotCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialUpdateSnapshotCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->entityCount && nullptr != value->entities) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-entityCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialUpdateSnapshotCreateInfoEXT member entityCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->entities && 0 != value->entityCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-entities-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialUpdateSnapshotCreateInfoEXT contains invalid NULL for XrSpatialEntityEXT \"entities\" is which not "
                            "optional since \"entityCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->entities) {
        for (uint32_t value_entities_inc = 0; value_entities_inc < value->entityCount; ++value_entities_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpatialEntityEXTHandle(&value->entities[value_entities_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSpatialEntityEXT handle \"entities\" ";
                    oss << HandleToHexString(value->entities[value_entities_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-entities-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Optional array must be non-NULL when value->componentTypeCount is non-zero
    if (0 != value->componentTypeCount && nullptr == value->componentTypes) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-componentTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialUpdateSnapshotCreateInfoEXT member componentTypeCount is NULL, but value->componentTypeCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->componentTypes) {
        for (uint32_t value_componenttypes_inc = 0; value_componenttypes_inc < value->componentTypeCount; ++value_componenttypes_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialUpdateSnapshotCreateInfoEXT", "componentTypes", objects_info, value->componentTypes[value_componenttypes_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialUpdateSnapshotCreateInfoEXT contains invalid XrSpatialComponentTypeEXT \"componentTypes\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentTypes[value_componenttypes_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-componentTypes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialUpdateSnapshotCreateInfoEXT-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataSpatialDiscoveryRecommendedEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataSpatialDiscoveryRecommendedEXT",
                             value->type, "VUID-XrEventDataSpatialDiscoveryRecommendedEXT-type-type", XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT, "XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpatialDiscoveryRecommendedEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataSpatialDiscoveryRecommendedEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpatialDiscoveryRecommendedEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpatialDiscoveryRecommendedEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataSpatialDiscoveryRecommendedEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataSpatialDiscoveryRecommendedEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "spatialContext" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialFilterTrackingStateEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialFilterTrackingStateEXT",
                             value->type, "VUID-XrSpatialFilterTrackingStateEXT-type-type", XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT, "XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialFilterTrackingStateEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialFilterTrackingStateEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialFilterTrackingStateEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialFilterTrackingStateEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialFilterTrackingStateEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialFilterTrackingStateEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialEntityTrackingStateEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialFilterTrackingStateEXT", "trackingState", objects_info, value->trackingState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialFilterTrackingStateEXT contains invalid XrSpatialEntityTrackingStateEXT \"trackingState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->trackingState));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialFilterTrackingStateEXT-trackingState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationPlaneTrackingEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityConfigurationPlaneTrackingEXT",
                             value->type, "VUID-XrSpatialCapabilityConfigurationPlaneTrackingEXT-type-type", XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT, "XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationPlaneTrackingEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialCapabilityConfigurationPlaneTrackingEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationPlaneTrackingEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationPlaneTrackingEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationPlaneTrackingEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationPlaneTrackingEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialCapabilityEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationPlaneTrackingEXT", "capability", objects_info, value->capability)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationPlaneTrackingEXT contains invalid XrSpatialCapabilityEXT \"capability\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->capability));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationPlaneTrackingEXT-capability-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->enabledComponentCount && nullptr != value->enabledComponents) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationPlaneTrackingEXT-enabledComponentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityConfigurationPlaneTrackingEXT member enabledComponentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledComponents && 0 != value->enabledComponentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationPlaneTrackingEXT-enabledComponents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialCapabilityConfigurationPlaneTrackingEXT contains invalid NULL for XrSpatialComponentTypeEXT \"enabledComponents\" is which not "
                            "optional since \"enabledComponentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->enabledComponents) {
        for (uint32_t value_enabledcomponents_inc = 0; value_enabledcomponents_inc < value->enabledComponentCount; ++value_enabledcomponents_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationPlaneTrackingEXT", "enabledComponents", objects_info, value->enabledComponents[value_enabledcomponents_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialCapabilityConfigurationPlaneTrackingEXT contains invalid XrSpatialComponentTypeEXT \"enabledComponents\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->enabledComponents[value_enabledcomponents_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationPlaneTrackingEXT-enabledComponents-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentPlaneAlignmentListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentPlaneAlignmentListEXT",
                             value->type, "VUID-XrSpatialComponentPlaneAlignmentListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneAlignmentListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentPlaneAlignmentListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentPlaneAlignmentListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneAlignmentListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentPlaneAlignmentListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneAlignmentListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->planeAlignmentCount && nullptr != value->planeAlignments) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneAlignmentListEXT-planeAlignmentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentPlaneAlignmentListEXT member planeAlignmentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->planeAlignments && 0 != value->planeAlignmentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneAlignmentListEXT-planeAlignments-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentPlaneAlignmentListEXT contains invalid NULL for XrSpatialPlaneAlignmentEXT \"planeAlignments\" is which not "
                            "optional since \"planeAlignmentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrSpatialComponentPlaneAlignmentListEXT-planeAlignments-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentMesh2DListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentMesh2DListEXT",
                             value->type, "VUID-XrSpatialComponentMesh2DListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh2DListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentMesh2DListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentMesh2DListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh2DListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentMesh2DListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh2DListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->meshCount && nullptr != value->meshes) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh2DListEXT-meshCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentMesh2DListEXT member meshCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->meshes && 0 != value->meshCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh2DListEXT-meshes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentMesh2DListEXT contains invalid NULL for XrSpatialMeshDataEXT \"meshes\" is which not "
                            "optional since \"meshCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->meshes) {
        for (uint32_t value_meshes_inc = 0; value_meshes_inc < value->meshCount; ++value_meshes_inc) {
            // Validate that the structure XrSpatialMeshDataEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->meshes[value_meshes_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMesh2DListEXT-meshes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpatialComponentMesh2DListEXT member meshes is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialPolygon2DDataEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Validate that the structure XrSpatialBufferEXT is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->vertexBuffer);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialPolygon2DDataEXT-vertexBuffer-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialPolygon2DDataEXT member vertexBuffer is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentPolygon2DListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentPolygon2DListEXT",
                             value->type, "VUID-XrSpatialComponentPolygon2DListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPolygon2DListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentPolygon2DListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentPolygon2DListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPolygon2DListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentPolygon2DListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPolygon2DListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->polygonCount && nullptr != value->polygons) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPolygon2DListEXT-polygonCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentPolygon2DListEXT member polygonCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->polygons && 0 != value->polygonCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPolygon2DListEXT-polygons-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentPolygon2DListEXT contains invalid NULL for XrSpatialPolygon2DDataEXT \"polygons\" is which not "
                            "optional since \"polygonCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->polygons) {
        for (uint32_t value_polygons_inc = 0; value_polygons_inc < value->polygonCount; ++value_polygons_inc) {
            // Validate that the structure XrSpatialPolygon2DDataEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->polygons[value_polygons_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPolygon2DListEXT-polygons-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpatialComponentPolygon2DListEXT member polygons is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentPlaneSemanticLabelListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentPlaneSemanticLabelListEXT",
                             value->type, "VUID-XrSpatialComponentPlaneSemanticLabelListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneSemanticLabelListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentPlaneSemanticLabelListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentPlaneSemanticLabelListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneSemanticLabelListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentPlaneSemanticLabelListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneSemanticLabelListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->semanticLabelCount && nullptr != value->semanticLabels) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneSemanticLabelListEXT-semanticLabelCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentPlaneSemanticLabelListEXT member semanticLabelCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->semanticLabels && 0 != value->semanticLabelCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPlaneSemanticLabelListEXT-semanticLabels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentPlaneSemanticLabelListEXT contains invalid NULL for XrSpatialPlaneSemanticLabelEXT \"semanticLabels\" is which not "
                            "optional since \"semanticLabelCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrSpatialComponentPlaneSemanticLabelListEXT-semanticLabels-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrStationaryReferenceSpaceGenerationIdGetInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_GET_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrStationaryReferenceSpaceGenerationIdGetInfoEXT",
                             value->type, "VUID-XrStationaryReferenceSpaceGenerationIdGetInfoEXT-type-type", XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_GET_INFO_EXT, "XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_GET_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrStationaryReferenceSpaceGenerationIdGetInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrStationaryReferenceSpaceGenerationIdGetInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrStationaryReferenceSpaceGenerationIdGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrStationaryReferenceSpaceGenerationIdGetInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrStationaryReferenceSpaceGenerationIdGetInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrStationaryReferenceSpaceGenerationIdGetInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrStationaryReferenceSpaceGenerationIdResultEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_RESULT_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrStationaryReferenceSpaceGenerationIdResultEXT",
                             value->type, "VUID-XrStationaryReferenceSpaceGenerationIdResultEXT-type-type", XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_RESULT_EXT, "XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_RESULT_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrStationaryReferenceSpaceGenerationIdResultEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrStationaryReferenceSpaceGenerationIdResultEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrStationaryReferenceSpaceGenerationIdResultEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrStationaryReferenceSpaceGenerationIdResultEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrStationaryReferenceSpaceGenerationIdResultEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrStationaryReferenceSpaceGenerationIdResultEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationQrCodeEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityConfigurationQrCodeEXT",
                             value->type, "VUID-XrSpatialCapabilityConfigurationQrCodeEXT-type-type", XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT, "XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_MARKER_SIZE_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationQrCodeEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialCapabilityConfigurationQrCodeEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationQrCodeEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationQrCodeEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationQrCodeEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationQrCodeEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialCapabilityEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationQrCodeEXT", "capability", objects_info, value->capability)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationQrCodeEXT contains invalid XrSpatialCapabilityEXT \"capability\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->capability));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationQrCodeEXT-capability-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->enabledComponentCount && nullptr != value->enabledComponents) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationQrCodeEXT-enabledComponentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityConfigurationQrCodeEXT member enabledComponentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledComponents && 0 != value->enabledComponentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationQrCodeEXT-enabledComponents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialCapabilityConfigurationQrCodeEXT contains invalid NULL for XrSpatialComponentTypeEXT \"enabledComponents\" is which not "
                            "optional since \"enabledComponentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->enabledComponents) {
        for (uint32_t value_enabledcomponents_inc = 0; value_enabledcomponents_inc < value->enabledComponentCount; ++value_enabledcomponents_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationQrCodeEXT", "enabledComponents", objects_info, value->enabledComponents[value_enabledcomponents_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialCapabilityConfigurationQrCodeEXT contains invalid XrSpatialComponentTypeEXT \"enabledComponents\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->enabledComponents[value_enabledcomponents_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationQrCodeEXT-enabledComponents-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationMicroQrCodeEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityConfigurationMicroQrCodeEXT",
                             value->type, "VUID-XrSpatialCapabilityConfigurationMicroQrCodeEXT-type-type", XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT, "XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_MARKER_SIZE_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationMicroQrCodeEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialCapabilityConfigurationMicroQrCodeEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationMicroQrCodeEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationMicroQrCodeEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationMicroQrCodeEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationMicroQrCodeEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialCapabilityEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationMicroQrCodeEXT", "capability", objects_info, value->capability)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationMicroQrCodeEXT contains invalid XrSpatialCapabilityEXT \"capability\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->capability));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationMicroQrCodeEXT-capability-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->enabledComponentCount && nullptr != value->enabledComponents) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationMicroQrCodeEXT-enabledComponentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityConfigurationMicroQrCodeEXT member enabledComponentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledComponents && 0 != value->enabledComponentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationMicroQrCodeEXT-enabledComponents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialCapabilityConfigurationMicroQrCodeEXT contains invalid NULL for XrSpatialComponentTypeEXT \"enabledComponents\" is which not "
                            "optional since \"enabledComponentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->enabledComponents) {
        for (uint32_t value_enabledcomponents_inc = 0; value_enabledcomponents_inc < value->enabledComponentCount; ++value_enabledcomponents_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationMicroQrCodeEXT", "enabledComponents", objects_info, value->enabledComponents[value_enabledcomponents_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialCapabilityConfigurationMicroQrCodeEXT contains invalid XrSpatialComponentTypeEXT \"enabledComponents\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->enabledComponents[value_enabledcomponents_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationMicroQrCodeEXT-enabledComponents-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationArucoMarkerEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityConfigurationArucoMarkerEXT",
                             value->type, "VUID-XrSpatialCapabilityConfigurationArucoMarkerEXT-type-type", XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT, "XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_MARKER_SIZE_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationArucoMarkerEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialCapabilityConfigurationArucoMarkerEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationArucoMarkerEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationArucoMarkerEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationArucoMarkerEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationArucoMarkerEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialCapabilityEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationArucoMarkerEXT", "capability", objects_info, value->capability)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationArucoMarkerEXT contains invalid XrSpatialCapabilityEXT \"capability\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->capability));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationArucoMarkerEXT-capability-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->enabledComponentCount && nullptr != value->enabledComponents) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationArucoMarkerEXT-enabledComponentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityConfigurationArucoMarkerEXT member enabledComponentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledComponents && 0 != value->enabledComponentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationArucoMarkerEXT-enabledComponents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialCapabilityConfigurationArucoMarkerEXT contains invalid NULL for XrSpatialComponentTypeEXT \"enabledComponents\" is which not "
                            "optional since \"enabledComponentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->enabledComponents) {
        for (uint32_t value_enabledcomponents_inc = 0; value_enabledcomponents_inc < value->enabledComponentCount; ++value_enabledcomponents_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationArucoMarkerEXT", "enabledComponents", objects_info, value->enabledComponents[value_enabledcomponents_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialCapabilityConfigurationArucoMarkerEXT contains invalid XrSpatialComponentTypeEXT \"enabledComponents\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->enabledComponents[value_enabledcomponents_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationArucoMarkerEXT-enabledComponents-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Make sure the enum type XrSpatialMarkerArucoDictEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationArucoMarkerEXT", "arUcoDict", objects_info, value->arUcoDict)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationArucoMarkerEXT contains invalid XrSpatialMarkerArucoDictEXT \"arUcoDict\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->arUcoDict));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationArucoMarkerEXT-arUcoDict-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationAprilTagEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityConfigurationAprilTagEXT",
                             value->type, "VUID-XrSpatialCapabilityConfigurationAprilTagEXT-type-type", XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT, "XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_MARKER_SIZE_EXT);
        valid_ext_structs.insert(XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAprilTagEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialCapabilityConfigurationAprilTagEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationAprilTagEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAprilTagEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationAprilTagEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAprilTagEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialCapabilityEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationAprilTagEXT", "capability", objects_info, value->capability)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationAprilTagEXT contains invalid XrSpatialCapabilityEXT \"capability\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->capability));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAprilTagEXT-capability-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->enabledComponentCount && nullptr != value->enabledComponents) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAprilTagEXT-enabledComponentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityConfigurationAprilTagEXT member enabledComponentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledComponents && 0 != value->enabledComponentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAprilTagEXT-enabledComponents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialCapabilityConfigurationAprilTagEXT contains invalid NULL for XrSpatialComponentTypeEXT \"enabledComponents\" is which not "
                            "optional since \"enabledComponentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->enabledComponents) {
        for (uint32_t value_enabledcomponents_inc = 0; value_enabledcomponents_inc < value->enabledComponentCount; ++value_enabledcomponents_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationAprilTagEXT", "enabledComponents", objects_info, value->enabledComponents[value_enabledcomponents_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialCapabilityConfigurationAprilTagEXT contains invalid XrSpatialComponentTypeEXT \"enabledComponents\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->enabledComponents[value_enabledcomponents_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAprilTagEXT-enabledComponents-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Make sure the enum type XrSpatialMarkerAprilTagDictEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationAprilTagEXT", "aprilDict", objects_info, value->aprilDict)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationAprilTagEXT contains invalid XrSpatialMarkerAprilTagDictEXT \"aprilDict\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->aprilDict));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAprilTagEXT-aprilDict-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialMarkerSizeEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_MARKER_SIZE_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialMarkerSizeEXT",
                             value->type, "VUID-XrSpatialMarkerSizeEXT-type-type", XR_TYPE_SPATIAL_MARKER_SIZE_EXT, "XR_TYPE_SPATIAL_MARKER_SIZE_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialMarkerSizeEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialMarkerSizeEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialMarkerSizeEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialMarkerSizeEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialMarkerSizeEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialMarkerSizeEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialMarkerStaticOptimizationEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialMarkerStaticOptimizationEXT",
                             value->type, "VUID-XrSpatialMarkerStaticOptimizationEXT-type-type", XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT, "XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialMarkerStaticOptimizationEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialMarkerStaticOptimizationEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialMarkerStaticOptimizationEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialMarkerStaticOptimizationEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialMarkerStaticOptimizationEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialMarkerStaticOptimizationEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialMarkerDataEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialCapabilityEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialMarkerDataEXT", "capability", objects_info, value->capability)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialMarkerDataEXT contains invalid XrSpatialCapabilityEXT \"capability\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->capability));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialMarkerDataEXT-capability-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Validate that the structure XrSpatialBufferEXT is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, &value->data);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialMarkerDataEXT-data-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialMarkerDataEXT member data is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentMarkerListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentMarkerListEXT",
                             value->type, "VUID-XrSpatialComponentMarkerListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMarkerListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentMarkerListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentMarkerListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMarkerListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentMarkerListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMarkerListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->markerCount && nullptr != value->markers) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMarkerListEXT-markerCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentMarkerListEXT member markerCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->markers && 0 != value->markerCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMarkerListEXT-markers-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentMarkerListEXT contains invalid NULL for XrSpatialMarkerDataEXT \"markers\" is which not "
                            "optional since \"markerCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->markers) {
        for (uint32_t value_markers_inc = 0; value_markers_inc < value->markerCount; ++value_markers_inc) {
            // Validate that the structure XrSpatialMarkerDataEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->markers[value_markers_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentMarkerListEXT-markers-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpatialComponentMarkerListEXT member markers is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationAnchorEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityConfigurationAnchorEXT",
                             value->type, "VUID-XrSpatialCapabilityConfigurationAnchorEXT-type-type", XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT, "XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAnchorEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialCapabilityConfigurationAnchorEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationAnchorEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAnchorEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationAnchorEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAnchorEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialCapabilityEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationAnchorEXT", "capability", objects_info, value->capability)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationAnchorEXT contains invalid XrSpatialCapabilityEXT \"capability\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->capability));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAnchorEXT-capability-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->enabledComponentCount && nullptr != value->enabledComponents) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAnchorEXT-enabledComponentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityConfigurationAnchorEXT member enabledComponentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledComponents && 0 != value->enabledComponentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAnchorEXT-enabledComponents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialCapabilityConfigurationAnchorEXT contains invalid NULL for XrSpatialComponentTypeEXT \"enabledComponents\" is which not "
                            "optional since \"enabledComponentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->enabledComponents) {
        for (uint32_t value_enabledcomponents_inc = 0; value_enabledcomponents_inc < value->enabledComponentCount; ++value_enabledcomponents_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationAnchorEXT", "enabledComponents", objects_info, value->enabledComponents[value_enabledcomponents_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialCapabilityConfigurationAnchorEXT contains invalid XrSpatialComponentTypeEXT \"enabledComponents\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->enabledComponents[value_enabledcomponents_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationAnchorEXT-enabledComponents-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentAnchorListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_ANCHOR_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentAnchorListEXT",
                             value->type, "VUID-XrSpatialComponentAnchorListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_ANCHOR_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_ANCHOR_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentAnchorListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentAnchorListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentAnchorListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentAnchorListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentAnchorListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentAnchorListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->locationCount && nullptr != value->locations) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentAnchorListEXT-locationCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentAnchorListEXT member locationCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->locations && 0 != value->locationCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentAnchorListEXT-locations-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentAnchorListEXT contains invalid NULL for XrPosef \"locations\" is which not "
                            "optional since \"locationCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialComponentAnchorListEXT-locations-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorCreateInfoEXT",
                             value->type, "VUID-XrSpatialAnchorCreateInfoEXT-type-type", XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT, "XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->baseSpace);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"baseSpace\" ";
            oss << HandleToHexString(value->baseSpace);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorCreateInfoEXT-baseSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialPersistenceContextCreateInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_PERSISTENCE_CONTEXT_CREATE_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialPersistenceContextCreateInfoEXT",
                             value->type, "VUID-XrSpatialPersistenceContextCreateInfoEXT-type-type", XR_TYPE_SPATIAL_PERSISTENCE_CONTEXT_CREATE_INFO_EXT, "XR_TYPE_SPATIAL_PERSISTENCE_CONTEXT_CREATE_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialPersistenceContextCreateInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialPersistenceContextCreateInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialPersistenceContextCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialPersistenceContextCreateInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialPersistenceContextCreateInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialPersistenceContextCreateInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialPersistenceScopeEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialPersistenceContextCreateInfoEXT", "scope", objects_info, value->scope)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialPersistenceContextCreateInfoEXT contains invalid XrSpatialPersistenceScopeEXT \"scope\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->scope));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialPersistenceContextCreateInfoEXT-scope-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrCreateSpatialPersistenceContextCompletionEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrCreateSpatialPersistenceContextCompletionEXT",
                             value->type, "VUID-XrCreateSpatialPersistenceContextCompletionEXT-type-type", XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT, "XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialPersistenceContextCompletionEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrCreateSpatialPersistenceContextCompletionEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialPersistenceContextCompletionEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialPersistenceContextCompletionEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrCreateSpatialPersistenceContextCompletionEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialPersistenceContextCompletionEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCreateSpatialPersistenceContextCompletionEXT", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCreateSpatialPersistenceContextCompletionEXT contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialPersistenceContextCompletionEXT-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrSpatialPersistenceContextResultEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrCreateSpatialPersistenceContextCompletionEXT", "createResult", objects_info, value->createResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrCreateSpatialPersistenceContextCompletionEXT contains invalid XrSpatialPersistenceContextResultEXT \"createResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->createResult));
        CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialPersistenceContextCompletionEXT-createResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpatialPersistenceContextEXTHandle(&value->persistenceContext);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpatialPersistenceContextEXT handle \"persistenceContext\" ";
            oss << HandleToHexString(value->persistenceContext);
            CoreValidLogMessage(instance_info, "VUID-XrCreateSpatialPersistenceContextCompletionEXT-persistenceContext-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialContextPersistenceConfigEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CONTEXT_PERSISTENCE_CONFIG_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialContextPersistenceConfigEXT",
                             value->type, "VUID-XrSpatialContextPersistenceConfigEXT-type-type", XR_TYPE_SPATIAL_CONTEXT_PERSISTENCE_CONFIG_EXT, "XR_TYPE_SPATIAL_CONTEXT_PERSISTENCE_CONFIG_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialContextPersistenceConfigEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialContextPersistenceConfigEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialContextPersistenceConfigEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialContextPersistenceConfigEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialContextPersistenceConfigEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialContextPersistenceConfigEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->persistenceContextCount && nullptr != value->persistenceContexts) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextPersistenceConfigEXT-persistenceContextCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialContextPersistenceConfigEXT member persistenceContextCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->persistenceContexts && 0 != value->persistenceContextCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialContextPersistenceConfigEXT-persistenceContexts-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialContextPersistenceConfigEXT contains invalid NULL for XrSpatialPersistenceContextEXT \"persistenceContexts\" is which not "
                            "optional since \"persistenceContextCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->persistenceContexts) {
        for (uint32_t value_persistencecontexts_inc = 0; value_persistencecontexts_inc < value->persistenceContextCount; ++value_persistencecontexts_inc) {
            {
                // writeValidateInlineHandleValidation
                ValidateXrHandleResult handle_result = VerifyXrSpatialPersistenceContextEXTHandle(&value->persistenceContexts[value_persistencecontexts_inc]);
                if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                    // Not a valid handle or NULL (which is not valid in this case)
                    std::ostringstream oss;
                    oss << "Invalid XrSpatialPersistenceContextEXT handle \"persistenceContexts\" ";
                    oss << HandleToHexString(value->persistenceContexts[value_persistencecontexts_inc]);
                    CoreValidLogMessage(instance_info, "VUID-XrSpatialContextPersistenceConfigEXT-persistenceContexts-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                        objects_info, oss.str());
                    return XR_ERROR_HANDLE_INVALID;
                }
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialDiscoveryPersistenceUuidFilterEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_DISCOVERY_PERSISTENCE_UUID_FILTER_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialDiscoveryPersistenceUuidFilterEXT",
                             value->type, "VUID-XrSpatialDiscoveryPersistenceUuidFilterEXT-type-type", XR_TYPE_SPATIAL_DISCOVERY_PERSISTENCE_UUID_FILTER_EXT, "XR_TYPE_SPATIAL_DISCOVERY_PERSISTENCE_UUID_FILTER_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoveryPersistenceUuidFilterEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialDiscoveryPersistenceUuidFilterEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialDiscoveryPersistenceUuidFilterEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoveryPersistenceUuidFilterEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialDiscoveryPersistenceUuidFilterEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoveryPersistenceUuidFilterEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->persistedUuidCount && nullptr != value->persistedUuids) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoveryPersistenceUuidFilterEXT-persistedUuidCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialDiscoveryPersistenceUuidFilterEXT member persistedUuidCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->persistedUuids && 0 != value->persistedUuidCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoveryPersistenceUuidFilterEXT-persistedUuids-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialDiscoveryPersistenceUuidFilterEXT contains invalid NULL for XrUuid \"persistedUuids\" is which not "
                            "optional since \"persistedUuidCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialDiscoveryPersistenceUuidFilterEXT-persistedUuids-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialPersistenceDataEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialPersistenceStateEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialPersistenceDataEXT", "persistState", objects_info, value->persistState)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialPersistenceDataEXT contains invalid XrSpatialPersistenceStateEXT \"persistState\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->persistState));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialPersistenceDataEXT-persistState-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentPersistenceListEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_PERSISTENCE_LIST_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentPersistenceListEXT",
                             value->type, "VUID-XrSpatialComponentPersistenceListEXT-type-type", XR_TYPE_SPATIAL_COMPONENT_PERSISTENCE_LIST_EXT, "XR_TYPE_SPATIAL_COMPONENT_PERSISTENCE_LIST_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPersistenceListEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentPersistenceListEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentPersistenceListEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPersistenceListEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentPersistenceListEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPersistenceListEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->persistDataCount && nullptr != value->persistData) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPersistenceListEXT-persistDataCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentPersistenceListEXT member persistDataCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->persistData && 0 != value->persistDataCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPersistenceListEXT-persistData-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentPersistenceListEXT contains invalid NULL for XrSpatialPersistenceDataEXT \"persistData\" is which not "
                            "optional since \"persistDataCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->persistData) {
        for (uint32_t value_persistdata_inc = 0; value_persistdata_inc < value->persistDataCount; ++value_persistdata_inc) {
            // Validate that the structure XrSpatialPersistenceDataEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->persistData[value_persistdata_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentPersistenceListEXT-persistData-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrSpatialComponentPersistenceListEXT member persistData is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticParametricPropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAPTIC_PARAMETRIC_PROPERTIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHapticParametricPropertiesEXT",
                             value->type, "VUID-XrHapticParametricPropertiesEXT-type-type", XR_TYPE_HAPTIC_PARAMETRIC_PROPERTIES_EXT, "XR_TYPE_HAPTIC_PARAMETRIC_PROPERTIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHapticParametricPropertiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHapticParametricPropertiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHapticParametricPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticParametricPropertiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHapticParametricPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticParametricPropertiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticParametricPointEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticParametricTransientEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrHapticParametricVibrationEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrHapticParametricVibrationEXT",
                             value->type, "VUID-XrHapticParametricVibrationEXT-type-type", XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT, "XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrHapticParametricVibrationEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrHapticParametricVibrationEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrHapticParametricVibrationEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->amplitudePointCount && nullptr != value->amplitudePoints) {
        CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-amplitudePointCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHapticParametricVibrationEXT member amplitudePointCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->amplitudePoints && 0 != value->amplitudePointCount) {
        CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-amplitudePoints-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrHapticParametricVibrationEXT contains invalid NULL for XrHapticParametricPointEXT \"amplitudePoints\" is which not "
                            "optional since \"amplitudePointCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->amplitudePoints) {
        for (uint32_t value_amplitudepoints_inc = 0; value_amplitudepoints_inc < value->amplitudePointCount; ++value_amplitudepoints_inc) {
            // Validate that the structure XrHapticParametricPointEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->amplitudePoints[value_amplitudepoints_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-amplitudePoints-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrHapticParametricVibrationEXT member amplitudePoints is invalid");
                return xr_result;
            }
        }
    }
    // Optional array must be non-NULL when value->frequencyPointCount is non-zero
    if (0 != value->frequencyPointCount && nullptr == value->frequencyPoints) {
        CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-frequencyPoints-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHapticParametricVibrationEXT member frequencyPointCount is NULL, but value->frequencyPointCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->frequencyPoints) {
        for (uint32_t value_frequencypoints_inc = 0; value_frequencypoints_inc < value->frequencyPointCount; ++value_frequencypoints_inc) {
            // Validate that the structure XrHapticParametricPointEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->frequencyPoints[value_frequencypoints_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-frequencyPoints-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrHapticParametricVibrationEXT member frequencyPoints is invalid");
                return xr_result;
            }
        }
    }
    // Optional array must be non-NULL when value->transientCount is non-zero
    if (0 != value->transientCount && nullptr == value->transients) {
        CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-transients-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrHapticParametricVibrationEXT member transientCount is NULL, but value->transientCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->transients) {
        for (uint32_t value_transients_inc = 0; value_transients_inc < value->transientCount; ++value_transients_inc) {
            // Validate that the structure XrHapticParametricTransientEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->transients[value_transients_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-transients-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrHapticParametricVibrationEXT member transients is invalid");
                return xr_result;
            }
        }
    }
    // Make sure the enum type XrHapticParametricStreamFrameTypeEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrHapticParametricVibrationEXT", "streamFrameType", objects_info, value->streamFrameType)) {
        std::ostringstream oss_enum;
        oss_enum << "XrHapticParametricVibrationEXT contains invalid XrHapticParametricStreamFrameTypeEXT \"streamFrameType\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->streamFrameType));
        CoreValidLogMessage(instance_info, "VUID-XrHapticParametricVibrationEXT-streamFrameType-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSystemHapticParametricPropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SYSTEM_HAPTIC_PARAMETRIC_PROPERTIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSystemHapticParametricPropertiesEXT",
                             value->type, "VUID-XrSystemHapticParametricPropertiesEXT-type-type", XR_TYPE_SYSTEM_HAPTIC_PARAMETRIC_PROPERTIES_EXT, "XR_TYPE_SYSTEM_HAPTIC_PARAMETRIC_PROPERTIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSystemHapticParametricPropertiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSystemHapticParametricPropertiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSystemHapticParametricPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemHapticParametricPropertiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSystemHapticParametricPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSystemHapticParametricPropertiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "supportsParametricHaptics" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityPersistInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_PERSIST_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityPersistInfoEXT",
                             value->type, "VUID-XrSpatialEntityPersistInfoEXT-type-type", XR_TYPE_SPATIAL_ENTITY_PERSIST_INFO_EXT, "XR_TYPE_SPATIAL_ENTITY_PERSIST_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityPersistInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityPersistInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityPersistInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityPersistInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityPersistInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityPersistInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&value->spatialContext);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
            oss << HandleToHexString(value->spatialContext);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityPersistInfoEXT-spatialContext-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrPersistSpatialEntityCompletionEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrPersistSpatialEntityCompletionEXT",
                             value->type, "VUID-XrPersistSpatialEntityCompletionEXT-type-type", XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT, "XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrPersistSpatialEntityCompletionEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrPersistSpatialEntityCompletionEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrPersistSpatialEntityCompletionEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPersistSpatialEntityCompletionEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrPersistSpatialEntityCompletionEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrPersistSpatialEntityCompletionEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrPersistSpatialEntityCompletionEXT", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrPersistSpatialEntityCompletionEXT contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrPersistSpatialEntityCompletionEXT-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrSpatialPersistenceContextResultEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrPersistSpatialEntityCompletionEXT", "persistResult", objects_info, value->persistResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrPersistSpatialEntityCompletionEXT contains invalid XrSpatialPersistenceContextResultEXT \"persistResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->persistResult));
        CoreValidLogMessage(instance_info, "VUID-XrPersistSpatialEntityCompletionEXT-persistResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialEntityUnpersistInfoEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ENTITY_UNPERSIST_INFO_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialEntityUnpersistInfoEXT",
                             value->type, "VUID-XrSpatialEntityUnpersistInfoEXT-type-type", XR_TYPE_SPATIAL_ENTITY_UNPERSIST_INFO_EXT, "XR_TYPE_SPATIAL_ENTITY_UNPERSIST_INFO_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityUnpersistInfoEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialEntityUnpersistInfoEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityUnpersistInfoEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityUnpersistInfoEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialEntityUnpersistInfoEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialEntityUnpersistInfoEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrUnpersistSpatialEntityCompletionEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrUnpersistSpatialEntityCompletionEXT",
                             value->type, "VUID-XrUnpersistSpatialEntityCompletionEXT-type-type", XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT, "XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrUnpersistSpatialEntityCompletionEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrUnpersistSpatialEntityCompletionEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrUnpersistSpatialEntityCompletionEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrUnpersistSpatialEntityCompletionEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrUnpersistSpatialEntityCompletionEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrUnpersistSpatialEntityCompletionEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrResult value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrUnpersistSpatialEntityCompletionEXT", "futureResult", objects_info, value->futureResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrUnpersistSpatialEntityCompletionEXT contains invalid XrResult \"futureResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->futureResult));
        CoreValidLogMessage(instance_info, "VUID-XrUnpersistSpatialEntityCompletionEXT-futureResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Make sure the enum type XrSpatialPersistenceContextResultEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrUnpersistSpatialEntityCompletionEXT", "unpersistResult", objects_info, value->unpersistResult)) {
        std::ostringstream oss_enum;
        oss_enum << "XrUnpersistSpatialEntityCompletionEXT contains invalid XrSpatialPersistenceContextResultEXT \"unpersistResult\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->unpersistResult));
        CoreValidLogMessage(instance_info, "VUID-XrUnpersistSpatialEntityCompletionEXT-unpersistResult-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationObjectTrackingANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityConfigurationObjectTrackingANDROID",
                             value->type, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-type-type", XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID, "XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialCapabilityConfigurationObjectTrackingANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationObjectTrackingANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationObjectTrackingANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialCapabilityEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationObjectTrackingANDROID", "capability", objects_info, value->capability)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationObjectTrackingANDROID contains invalid XrSpatialCapabilityEXT \"capability\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->capability));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-capability-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->enabledComponentCount && nullptr != value->enabledComponents) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-enabledComponentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityConfigurationObjectTrackingANDROID member enabledComponentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledComponents && 0 != value->enabledComponentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-enabledComponents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialCapabilityConfigurationObjectTrackingANDROID contains invalid NULL for XrSpatialComponentTypeEXT \"enabledComponents\" is which not "
                            "optional since \"enabledComponentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->enabledComponents) {
        for (uint32_t value_enabledcomponents_inc = 0; value_enabledcomponents_inc < value->enabledComponentCount; ++value_enabledcomponents_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationObjectTrackingANDROID", "enabledComponents", objects_info, value->enabledComponents[value_enabledcomponents_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialCapabilityConfigurationObjectTrackingANDROID contains invalid XrSpatialComponentTypeEXT \"enabledComponents\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->enabledComponents[value_enabledcomponents_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-enabledComponents-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Non-optional array length must be non-zero
    if (0 >= value->activeSemanticLabelCount && nullptr != value->activeSemanticLabels) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-activeSemanticLabelCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityConfigurationObjectTrackingANDROID member activeSemanticLabelCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->activeSemanticLabels && 0 != value->activeSemanticLabelCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-activeSemanticLabels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialCapabilityConfigurationObjectTrackingANDROID contains invalid NULL for XrSpatialObjectSemanticLabelANDROID \"activeSemanticLabels\" is which not "
                            "optional since \"activeSemanticLabelCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->activeSemanticLabels) {
        for (uint32_t value_activesemanticlabels_inc = 0; value_activesemanticlabels_inc < value->activeSemanticLabelCount; ++value_activesemanticlabels_inc) {
            // Make sure the enum type XrSpatialObjectSemanticLabelANDROID value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationObjectTrackingANDROID", "activeSemanticLabels", objects_info, value->activeSemanticLabels[value_activesemanticlabels_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialCapabilityConfigurationObjectTrackingANDROID contains invalid XrSpatialObjectSemanticLabelANDROID \"activeSemanticLabels\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->activeSemanticLabels[value_activesemanticlabels_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationObjectTrackingANDROID-activeSemanticLabels-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentObjectSemanticLabelListANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentObjectSemanticLabelListANDROID",
                             value->type, "VUID-XrSpatialComponentObjectSemanticLabelListANDROID-type-type", XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID, "XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentObjectSemanticLabelListANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentObjectSemanticLabelListANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentObjectSemanticLabelListANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentObjectSemanticLabelListANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentObjectSemanticLabelListANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentObjectSemanticLabelListANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->semanticLabelCount && nullptr != value->semanticLabels) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentObjectSemanticLabelListANDROID-semanticLabelCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentObjectSemanticLabelListANDROID member semanticLabelCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->semanticLabels && 0 != value->semanticLabelCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentObjectSemanticLabelListANDROID-semanticLabels-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentObjectSemanticLabelListANDROID contains invalid NULL for XrSpatialObjectSemanticLabelANDROID \"semanticLabels\" is which not "
                            "optional since \"semanticLabelCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
            // NOTE: Can't validate "VUID-XrSpatialComponentObjectSemanticLabelListANDROID-semanticLabels-parameter" output enum buffer
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialRaycastResultDataANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialCapabilityConfigurationDepthRaycastANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialCapabilityConfigurationDepthRaycastANDROID",
                             value->type, "VUID-XrSpatialCapabilityConfigurationDepthRaycastANDROID-type-type", XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID, "XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationDepthRaycastANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialCapabilityConfigurationDepthRaycastANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationDepthRaycastANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationDepthRaycastANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialCapabilityConfigurationDepthRaycastANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationDepthRaycastANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Make sure the enum type XrSpatialCapabilityEXT value is valid
    if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationDepthRaycastANDROID", "capability", objects_info, value->capability)) {
        std::ostringstream oss_enum;
        oss_enum << "XrSpatialCapabilityConfigurationDepthRaycastANDROID contains invalid XrSpatialCapabilityEXT \"capability\" enum value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->capability));
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationDepthRaycastANDROID-capability-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                            objects_info, oss_enum.str());
    }
    // Non-optional array length must be non-zero
    if (0 >= value->enabledComponentCount && nullptr != value->enabledComponents) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationDepthRaycastANDROID-enabledComponentCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialCapabilityConfigurationDepthRaycastANDROID member enabledComponentCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->enabledComponents && 0 != value->enabledComponentCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationDepthRaycastANDROID-enabledComponents-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialCapabilityConfigurationDepthRaycastANDROID contains invalid NULL for XrSpatialComponentTypeEXT \"enabledComponents\" is which not "
                            "optional since \"enabledComponentCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->enabledComponents) {
        for (uint32_t value_enabledcomponents_inc = 0; value_enabledcomponents_inc < value->enabledComponentCount; ++value_enabledcomponents_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialCapabilityConfigurationDepthRaycastANDROID", "enabledComponents", objects_info, value->enabledComponents[value_enabledcomponents_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialCapabilityConfigurationDepthRaycastANDROID contains invalid XrSpatialComponentTypeEXT \"enabledComponents\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->enabledComponents[value_enabledcomponents_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialCapabilityConfigurationDepthRaycastANDROID-enabledComponents-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialRaycastInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialRaycastInfoANDROID",
                             value->type, "VUID-XrSpatialRaycastInfoANDROID-type-type", XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID, "XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialRaycastInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialRaycastInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialRaycastInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    {
        // writeValidateInlineHandleValidation
        ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&value->space);
        if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
            // Not a valid handle or NULL (which is not valid in this case)
            std::ostringstream oss;
            oss << "Invalid XrSpace handle \"space\" ";
            oss << HandleToHexString(value->space);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastInfoANDROID-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, oss.str());
            return XR_ERROR_HANDLE_INVALID;
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentRaycastResultListANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentRaycastResultListANDROID",
                             value->type, "VUID-XrSpatialComponentRaycastResultListANDROID-type-type", XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID, "XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentRaycastResultListANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentRaycastResultListANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentRaycastResultListANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentRaycastResultListANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentRaycastResultListANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentRaycastResultListANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->raycastResultCount && nullptr != value->raycastResults) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentRaycastResultListANDROID-raycastResultCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentRaycastResultListANDROID member raycastResultCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->raycastResults && 0 != value->raycastResultCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentRaycastResultListANDROID-raycastResults-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentRaycastResultListANDROID contains invalid NULL for XrSpatialRaycastResultDataANDROID \"raycastResults\" is which not "
                            "optional since \"raycastResultCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialComponentRaycastResultListANDROID-raycastResults-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialRaycastSnapshotCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialRaycastSnapshotCreateInfoANDROID",
                             value->type, "VUID-XrSpatialRaycastSnapshotCreateInfoANDROID-type-type", XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID, "XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastSnapshotCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialRaycastSnapshotCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialRaycastSnapshotCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastSnapshotCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialRaycastSnapshotCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastSnapshotCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Optional array must be non-NULL when value->componentTypeCount is non-zero
    if (0 != value->componentTypeCount && nullptr == value->componentTypes) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastSnapshotCreateInfoANDROID-componentTypes-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialRaycastSnapshotCreateInfoANDROID member componentTypeCount is NULL, but value->componentTypeCount is greater than 0");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->componentTypes) {
        for (uint32_t value_componenttypes_inc = 0; value_componenttypes_inc < value->componentTypeCount; ++value_componenttypes_inc) {
            // Make sure the enum type XrSpatialComponentTypeEXT value is valid
            if (!ValidateXrEnum(instance_info, command_name, "XrSpatialRaycastSnapshotCreateInfoANDROID", "componentTypes", objects_info, value->componentTypes[value_componenttypes_inc])) {
                std::ostringstream oss_enum;
                oss_enum << "XrSpatialRaycastSnapshotCreateInfoANDROID contains invalid XrSpatialComponentTypeEXT \"componentTypes\" enum value ";
                oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->componentTypes[value_componenttypes_inc]));
                CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastSnapshotCreateInfoANDROID-componentTypes-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_WARNING, command_name,
                                    objects_info, oss_enum.str());
            }
        }
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->raycastInfo) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastSnapshotCreateInfoANDROID-raycastInfo-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialRaycastSnapshotCreateInfoANDROID contains invalid NULL for XrSpatialRaycastInfoANDROID \"raycastInfo\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Validate that the structure XrSpatialRaycastInfoANDROID is valid
    xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                     check_members, true, value->raycastInfo);
    if (XR_SUCCESS != xr_result) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialRaycastSnapshotCreateInfoANDROID-raycastInfo-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialRaycastSnapshotCreateInfoANDROID member raycastInfo is invalid");
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorParentANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorParentANDROID",
                             value->type, "VUID-XrSpatialAnchorParentANDROID-type-type", XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID, "XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorParentANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorParentANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorParentANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorParentANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorParentANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorParentANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialDiscoveryUniqueEntitiesFilterANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialDiscoveryUniqueEntitiesFilterANDROID",
                             value->type, "VUID-XrSpatialDiscoveryUniqueEntitiesFilterANDROID-type-type", XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID, "XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoveryUniqueEntitiesFilterANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialDiscoveryUniqueEntitiesFilterANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialDiscoveryUniqueEntitiesFilterANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoveryUniqueEntitiesFilterANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialDiscoveryUniqueEntitiesFilterANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialDiscoveryUniqueEntitiesFilterANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialComponentSubsumedByListANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialComponentSubsumedByListANDROID",
                             value->type, "VUID-XrSpatialComponentSubsumedByListANDROID-type-type", XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID, "XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentSubsumedByListANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialComponentSubsumedByListANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentSubsumedByListANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentSubsumedByListANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialComponentSubsumedByListANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentSubsumedByListANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->subsumedUniqueIdCount && nullptr != value->subsumedUniqueIds) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentSubsumedByListANDROID-subsumedUniqueIdCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrSpatialComponentSubsumedByListANDROID member subsumedUniqueIdCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->subsumedUniqueIds && 0 != value->subsumedUniqueIdCount) {
        CoreValidLogMessage(instance_info, "VUID-XrSpatialComponentSubsumedByListANDROID-subsumedUniqueIds-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrSpatialComponentSubsumedByListANDROID contains invalid NULL for XrSpatialEntityIdEXT \"subsumedUniqueIds\" is which not "
                            "optional since \"subsumedUniqueIdCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrSpatialComponentSubsumedByListANDROID-subsumedUniqueIds-parameter" type
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrSpatialAnchorSpaceFromIdCreateInfoANDROID* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrSpatialAnchorSpaceFromIdCreateInfoANDROID",
                             value->type, "VUID-XrSpatialAnchorSpaceFromIdCreateInfoANDROID-type-type", XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID, "XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorSpaceFromIdCreateInfoANDROID-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrSpatialAnchorSpaceFromIdCreateInfoANDROID struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorSpaceFromIdCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorSpaceFromIdCreateInfoANDROID-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrSpatialAnchorSpaceFromIdCreateInfoANDROID : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrSpatialAnchorSpaceFromIdCreateInfoANDROID-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrBatteryStateDisplayEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_BATTERY_STATE_DISPLAY_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrBatteryStateDisplayEXT",
                             value->type, "VUID-XrBatteryStateDisplayEXT-type-type", XR_TYPE_BATTERY_STATE_DISPLAY_EXT, "XR_TYPE_BATTERY_STATE_DISPLAY_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrBatteryStateDisplayEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrBatteryStateDisplayEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrBatteryStateDisplayEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBatteryStateDisplayEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrBatteryStateDisplayEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrBatteryStateDisplayEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    ValidateXrFlagsResult battery_state_display_state_flags_ext_result = ValidateXrBatteryStateDisplayStateFlagsEXT(value->stateFlags);
    // Flags must be non-zero in this case.
    if (VALIDATE_XR_FLAGS_ZERO == battery_state_display_state_flags_ext_result) {
        CoreValidLogMessage(instance_info, "VUID-XrBatteryStateDisplayEXT-stateFlags-requiredbitmask",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, "XrBatteryStateDisplayStateFlagsEXT \"stateFlags\" flag must be non-zero");
        return XR_ERROR_VALIDATION_FAILURE;
    } else if (VALIDATE_XR_FLAGS_SUCCESS != battery_state_display_state_flags_ext_result) {
        // Otherwise, flags must be valid.
        std::ostringstream oss_enum;
        oss_enum << "XrBatteryStateDisplayEXT invalid member XrBatteryStateDisplayStateFlagsEXT \"stateFlags\" flag value ";
        oss_enum << Uint64ToHexString(static_cast<uint64_t>(value->stateFlags));
        oss_enum <<" contains illegal bit";
        CoreValidLogMessage(instance_info, "VUID-XrBatteryStateDisplayEXT-stateFlags-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info, oss_enum.str());
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLoaderInitPropertyValueEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->name) {
        CoreValidLogMessage(instance_info, "VUID-XrLoaderInitPropertyValueEXT-name-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrLoaderInitPropertyValueEXT contains invalid NULL for char \"name\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrLoaderInitPropertyValueEXT-name-parameter" null-termination
    // Non-optional pointer/array variable that needs to not be NULL
    if (nullptr == value->value) {
        CoreValidLogMessage(instance_info, "VUID-XrLoaderInitPropertyValueEXT-value-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrLoaderInitPropertyValueEXT contains invalid NULL for char \"value\" which is not "
                            "optional and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    // NOTE: Can't validate "VUID-XrLoaderInitPropertyValueEXT-value-parameter" null-termination
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrLoaderInitInfoPropertiesEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrLoaderInitInfoPropertiesEXT",
                             value->type, "VUID-XrLoaderInitInfoPropertiesEXT-type-type", XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT, "XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        valid_ext_structs.insert(XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT);
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoPropertiesEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrLoaderInitInfoPropertiesEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrLoaderInitInfoPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoPropertiesEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrLoaderInitInfoPropertiesEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoPropertiesEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // If we are not to check the rest of the members, just return here.
    if (!check_members || XR_SUCCESS != xr_result) {
        return xr_result;
    }
    // Non-optional array length must be non-zero
    if (0 >= value->propertyValueCount && nullptr != value->propertyValues) {
        CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoPropertiesEXT-propertyValueCount-arraylength",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                            objects_info,
                            "Structure XrLoaderInitInfoPropertiesEXT member propertyValueCount is non-optional and must be greater than 0");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    // Pointer/array variable with a length variable.  Make sure that
    // if length variable is non-zero that the pointer is not NULL
    if (nullptr == value->propertyValues && 0 != value->propertyValueCount) {
        CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoPropertiesEXT-propertyValues-parameter",
                            VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name, objects_info,
                            "XrLoaderInitInfoPropertiesEXT contains invalid NULL for XrLoaderInitPropertyValueEXT \"propertyValues\" is which not "
                            "optional since \"propertyValueCount\" is set and must be non-NULL");
        return XR_ERROR_VALIDATION_FAILURE;
    }
    if (value->propertyValues) {
        for (uint32_t value_propertyvalues_inc = 0; value_propertyvalues_inc < value->propertyValueCount; ++value_propertyvalues_inc) {
            // Validate that the structure XrLoaderInitPropertyValueEXT is valid
            xr_result = ValidateXrStruct(instance_info, command_name, objects_info,
                                                             check_members, true, &value->propertyValues[value_propertyvalues_inc]);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(instance_info, "VUID-XrLoaderInitInfoPropertiesEXT-propertyValues-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                    objects_info,
                                    "Structure XrLoaderInitInfoPropertiesEXT member propertyValues is invalid");
                return xr_result;
            }
        }
    }
    // Everything checked out properly
    return xr_result;
}

XrResult ValidateXrStruct(GenValidUsageXrInstanceInfo *instance_info, const std::string &command_name,
                          std::vector<GenValidUsageXrObjectInfo>& objects_info, bool check_members, bool check_pnext,
                          const XrEventDataViewConfigurationViewsChangedEXT* value) {
    XrResult xr_result = XR_SUCCESS;
    (void)xr_result;
    (void)instance_info;
    (void)command_name;
    (void)objects_info;
    (void)check_members;
    (void)value;
    // Make sure the structure type is correct
    if (value->type != XR_TYPE_EVENT_DATA_VIEW_CONFIGURATION_VIEWS_CHANGED_EXT) {
        InvalidStructureType(instance_info, command_name, objects_info, "XrEventDataViewConfigurationViewsChangedEXT",
                             value->type, "VUID-XrEventDataViewConfigurationViewsChangedEXT-type-type", XR_TYPE_EVENT_DATA_VIEW_CONFIGURATION_VIEWS_CHANGED_EXT, "XR_TYPE_EVENT_DATA_VIEW_CONFIGURATION_VIEWS_CHANGED_EXT");
        xr_result = XR_ERROR_VALIDATION_FAILURE;
    }
    if (check_pnext) {
        std::unordered_set<XrStructureType> valid_ext_structs;
        std::unordered_set<XrStructureType> unknown_structs;
        std::unordered_set<XrStructureType> duplicate_ext_structs;
        std::unordered_set<XrStructureType> encountered_structs;
        NextChainResult next_result = ValidateNextChain(instance_info, command_name, objects_info,
                                                         value->next, valid_ext_structs,
                                                         encountered_structs,
                                                         unknown_structs,
                                                         duplicate_ext_structs);
        // No valid extension structs for this 'next'.  Therefore, must be NULL
        // or only contain a list of valid extension structures.
        if (NEXT_CHAIN_RESULT_ERROR == next_result) {
            CoreValidLogMessage(instance_info, "VUID-XrEventDataViewConfigurationViewsChangedEXT-next-next",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, command_name,
                                objects_info, "Invalid structure(s) in \"next\" chain for XrEventDataViewConfigurationViewsChangedEXT struct \"next\"");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        if (unknown_structs.size() > 0) {
            std::string error_message = "Unknown structures type(s) in \"next\" chain for ";
            error_message += "XrEventDataViewConfigurationViewsChangedEXT : ";
            error_message += StructTypesToString(instance_info, unknown_structs);
            error_message += ", the valid structure type(s) are ";
            error_message += StructTypesToString(instance_info, valid_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataViewConfigurationViewsChangedEXT-next-unknown",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
        if (duplicate_ext_structs.size() > 0) {
            std::string error_message = "Multiple structures of the same type(s) in \"next\" chain for ";
            error_message += "XrEventDataViewConfigurationViewsChangedEXT : ";
            error_message += StructTypesToString(instance_info, duplicate_ext_structs);
            CoreValidLogMessage(instance_info, "VUID-XrEventDataViewConfigurationViewsChangedEXT-next-unique",
                                VALID_USAGE_DEBUG_SEVERITY_DEBUG, command_name,
                                objects_info,
                                error_message);
        }
    }
    // Skip checking member "systemId" because this struct is returned only.
    // Skip checking member "viewConfigurationType" because this struct is returned only.
    // Everything checked out properly
    return xr_result;
}


NextChainResult ValidateNextChain(GenValidUsageXrInstanceInfo *instance_info,
                                  const std::string &command_name,
                                  std::vector<GenValidUsageXrObjectInfo>& objects_info,
                                  const void* next,
                                  std::unordered_set<XrStructureType>& valid_ext_structs,
                                  std::unordered_set<XrStructureType>& encountered_structs,
                                  std::unordered_set<XrStructureType>& unknown_structs,
                                  std::unordered_set<XrStructureType>& duplicate_structs) {
    NextChainResult return_result = NEXT_CHAIN_RESULT_VALID;
    const XrBaseInStructure* next_header = reinterpret_cast<const XrBaseInStructure*>(next);
    while (next_header != nullptr) {
        bool valid_ext = valid_ext_structs.count(next_header->type) > 0;
        if (!valid_ext) {
            // Not a known valid extension structure type for this next chain.
            if (unknown_structs.count(next_header->type) > 0) {
                duplicate_structs.insert(next_header->type);
            } else {
                unknown_structs.insert(next_header->type);
            }
        } else {
            // Check to see if we've already encountered this structure.
            bool already_encountered_ext = encountered_structs.count(next_header->type) > 0;
            if (already_encountered_ext) {
                duplicate_structs.insert(next_header->type);
            } else {
                encountered_structs.insert(next_header->type);
            }
        }
        switch (next_header->type) {
            case XR_TYPE_API_LAYER_PROPERTIES:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrApiLayerProperties*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EXTENSION_PROPERTIES:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrExtensionProperties*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INSTANCE_CREATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInstanceCreateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_GET_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemGetInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PROPERTIES:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemProperties*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIEW_LOCATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrViewLocateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIEW:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrView*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SESSION_CREATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSessionCreateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SWAPCHAIN_CREATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainCreateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SESSION_BEGIN_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSessionBeginInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIEW_STATE:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrViewState*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FRAME_END_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFrameEndInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAPTIC_VIBRATION:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHapticVibration*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_BUFFER:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataBuffer*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataInstanceLossPending*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSessionStateChanged*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTION_STATE_BOOLEAN:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActionStateBoolean*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTION_STATE_FLOAT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActionStateFloat*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTION_STATE_VECTOR2F:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActionStateVector2f*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTION_STATE_POSE:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActionStatePose*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTION_SET_CREATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActionSetCreateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTION_CREATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActionCreateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INSTANCE_PROPERTIES:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInstanceProperties*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FRAME_WAIT_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFrameWaitInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_PROJECTION:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerProjection*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_QUAD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerQuad*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_REFERENCE_SPACE_CREATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrReferenceSpaceCreateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTION_SPACE_CREATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActionSpaceCreateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataReferenceSpaceChangePending*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIEW_CONFIGURATION_VIEW:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrViewConfigurationView*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_LOCATION:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceLocation*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_VELOCITY:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceVelocity*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FRAME_STATE:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFrameState*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIEW_CONFIGURATION_PROPERTIES:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrViewConfigurationProperties*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FRAME_BEGIN_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFrameBeginInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerProjectionView*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_EVENTS_LOST:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataEventsLost*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInteractionProfileSuggestedBinding*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataInteractionProfileChanged*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INTERACTION_PROFILE_STATE:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInteractionProfileState*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageAcquireInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageWaitInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageReleaseInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTION_STATE_GET_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActionStateGetInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAPTIC_ACTION_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHapticActionInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSessionActionSetsAttachInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTIONS_SYNC_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActionsSyncInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBoundSourcesForActionEnumerateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInputSourceLocalizedNameGetInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACES_LOCATE_INFO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpacesLocateInfo*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_LOCATIONS:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceLocations*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_VELOCITIES:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceVelocities*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_CUBE_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerCubeKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInstanceCreateInfoAndroidKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerDepthInfoKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVulkanSwapchainFormatListCreateInfoKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataPerfSettingsEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerCylinderKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerEquirectKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrDebugUtilsObjectNameInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrDebugUtilsMessengerCallbackDataEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrDebugUtilsMessengerCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_DEBUG_UTILS_LABEL_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrDebugUtilsLabelEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32)
            case XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingOpenGLWin32KHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32)
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB)
            case XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingOpenGLXlibKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB)
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB)
            case XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingOpenGLXcbKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB)
#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND)
            case XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingOpenGLWaylandKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND)
#if defined(XR_USE_GRAPHICS_API_OPENGL)
            case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageOpenGLKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
#if defined(XR_USE_GRAPHICS_API_OPENGL)
            case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsRequirementsOpenGLKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingOpenGLESAndroidKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
            case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageOpenGLESKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
            case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsRequirementsOpenGLESKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingVulkanKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageVulkanKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsRequirementsVulkanKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_D3D11)
            case XR_TYPE_GRAPHICS_BINDING_D3D11_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingD3D11KHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D11)
            case XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageD3D11KHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D11)
            case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsRequirementsD3D11KHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D12)
            case XR_TYPE_GRAPHICS_BINDING_D3D12_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingD3D12KHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_D3D12)
            case XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageD3D12KHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_D3D12)
            case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsRequirementsD3D12KHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_METAL)
            case XR_TYPE_GRAPHICS_BINDING_METAL_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingMetalKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_METAL)
#if defined(XR_USE_GRAPHICS_API_METAL)
            case XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageMetalKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_METAL)
#if defined(XR_USE_GRAPHICS_API_METAL)
            case XR_TYPE_GRAPHICS_REQUIREMENTS_METAL_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsRequirementsMetalKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_METAL)
            case XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemEyeGazeInteractionPropertiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEyeGazeSampleTimeEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VISIBILITY_MASK_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVisibilityMaskKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataVisibilityMaskChangedKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSessionCreateInfoOverlayEXTX*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataMainSessionVisibilityChangedEXTX*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerColorScaleBiasKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorCreateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorSpaceCreateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerImageLayoutFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerAlphaBlendFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrViewConfigurationDepthRangeEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_PLATFORM_EGL)
            case XR_TYPE_GRAPHICS_BINDING_EGL_MNDX:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGraphicsBindingEGLMNDX*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_EGL)
            case XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialGraphNodeSpaceCreateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialGraphStaticNodeBindingCreateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialGraphNodeBindingPropertiesMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemHandTrackingPropertiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandTrackerCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandJointsLocateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_JOINT_LOCATIONS_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandJointLocationsEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_JOINT_VELOCITIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandJointVelocitiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemHandTrackingMeshPropertiesMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandMeshSpaceCreateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandMeshUpdateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_MESH_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandMeshMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_POSE_TYPE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandPoseTypeInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSecondaryViewConfigurationSessionBeginInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSecondaryViewConfigurationStateMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSecondaryViewConfigurationFrameStateMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSecondaryViewConfigurationFrameEndInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSecondaryViewConfigurationLayerInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSecondaryViewConfigurationSwapchainCreateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrControllerModelKeyStateMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrControllerModelNodePropertiesMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrControllerModelPropertiesMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrControllerModelNodeStateMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CONTROLLER_MODEL_STATE_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrControllerModelStateMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrViewConfigurationViewFovEPIC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_PLATFORM_WIN32)
            case XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHolographicWindowAttachmentMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_PLATFORM_WIN32)
            case XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerReprojectionInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerReprojectionPlaneOverrideMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrAndroidSurfaceSwapchainCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerSecureContentFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_TRACKER_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyTrackerCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyJointsLocateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemBodyTrackingPropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_JOINT_LOCATIONS_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyJointLocationsFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_SKELETON_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodySkeletonFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInteractionProfileDpadBindingEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInteractionProfileAnalogThresholdVALVE*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandJointsMotionRangeInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLoaderInitInfoAndroidKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVulkanInstanceCreateInfoKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVulkanDeviceCreateInfoKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVulkanGraphicsDeviceGetInfoKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerEquirect2KHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneObserverCreateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_CREATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneCreateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrNewSceneComputeInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVisualMeshComputeLodInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_COMPONENTS_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneComponentsMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneComponentsGetInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneComponentLocationsMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneComponentsLocateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_OBJECTS_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneObjectsMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneComponentParentFilterInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneObjectTypesFilterInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_PLANES_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrScenePlanesMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrScenePlaneAlignmentFilterInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MESHES_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMeshesMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMeshBuffersGetInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MESH_BUFFERS_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMeshBuffersMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMeshVertexBufferMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMeshIndicesUint32MSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMeshIndicesUint16MSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSerializedSceneFragmentDataGetInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneDeserializeInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataDisplayRefreshRateChangedFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIVE_TRACKER_PATHS_HTCX:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrViveTrackerPathsHTCX*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataViveTrackerConnectedHTCX*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemFacialTrackingPropertiesHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFacialTrackerCreateInfoHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACIAL_EXPRESSIONS_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFacialExpressionsHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemColorSpacePropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_TRACKING_MESH_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandTrackingMeshFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_TRACKING_SCALE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandTrackingScaleFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_TRACKING_AIM_STATE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandTrackingAimStateFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandTrackingCapsulesStateFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpatialEntityPropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceComponentStatusSetInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_COMPONENT_STATUS_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceComponentStatusFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpatialAnchorCreateCompleteFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpaceSetStatusCompleteFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFoveationProfileCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainCreateInfoFoveationFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainStateFoveationFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFoveationLevelProfileCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrKeyboardSpaceCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_KEYBOARD_TRACKING_QUERY_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrKeyboardTrackingQueryFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemKeyboardTrackingPropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTriangleMeshCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemPassthroughPropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughLayerCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerPassthroughFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGeometryInstanceCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGeometryInstanceTransformFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemPassthroughProperties2FB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_STYLE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughStyleFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughColorMapMonoToRgbaFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughColorMapMonoToMonoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughBrightnessContrastSaturationFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataPassthroughStateChangedFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_PATH_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelPathInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelPropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_BUFFER_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelBufferFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_LOAD_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelLoadInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemRenderModelPropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelCapabilitiesRequestFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BINDING_MODIFICATIONS_KHR:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBindingModificationsKHR*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrViewLocateFoveatedRenderingVARJO*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFoveatedViewConfigurationViewVARJO*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemFoveatedRenderingPropertiesVARJO*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerDepthTestVARJO*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemMarkerTrackingPropertiesVARJO*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataMarkerTrackingUpdateVARJO*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMarkerSpaceCreateInfoVARJO*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FRAME_END_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFrameEndInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrGlobalDimmerFrameEndInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_PLATFORM_ML)
            case XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCoordinateSpaceCreateInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_ML)
            case XR_TYPE_SYSTEM_MARKER_UNDERSTANDING_PROPERTIES_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemMarkerUnderstandingPropertiesML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MARKER_DETECTOR_CREATE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMarkerDetectorCreateInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MARKER_DETECTOR_ARUCO_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMarkerDetectorArucoInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MARKER_DETECTOR_SIZE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMarkerDetectorSizeInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MARKER_DETECTOR_APRIL_TAG_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMarkerDetectorAprilTagInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MARKER_DETECTOR_CUSTOM_PROFILE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMarkerDetectorCustomProfileInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MARKER_DETECTOR_SNAPSHOT_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMarkerDetectorSnapshotInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MARKER_DETECTOR_STATE_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMarkerDetectorStateML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MARKER_SPACE_CREATE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMarkerSpaceCreateInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_LOCALIZATION_MAP_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLocalizationMapML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_LOCALIZATION_CHANGED_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataLocalizationChangedML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_MAP_LOCALIZATION_REQUEST_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrMapLocalizationRequestInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_LOCALIZATION_MAP_IMPORT_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLocalizationMapImportInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_LOCALIZATION_ENABLE_EVENTS_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLocalizationEnableEventsInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsCreateInfoFromPoseML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CREATE_SPATIAL_ANCHORS_COMPLETION_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCreateSpatialAnchorsCompletionML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_STATE_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorStateML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_CREATE_STORAGE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsCreateStorageInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsQueryInfoRadiusML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_QUERY_COMPLETION_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsQueryCompletionML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsCreateInfoFromUuidsML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_PUBLISH_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsPublishInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsPublishCompletionML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_DELETE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsDeleteInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsDeleteCompletionML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsUpdateExpirationInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsUpdateExpirationCompletionML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_DETAILS_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsPublishCompletionDetailsML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_DETAILS_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsDeleteCompletionDetailsML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_DETAILS_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorsUpdateExpirationCompletionDetailsML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataHeadsetFitChangedML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataEyeCalibrationChangedML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_USER_CALIBRATION_ENABLE_EVENTS_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrUserCalibrationEnableEventsInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorPersistenceInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MARKERS_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMarkersMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MARKER_TYPE_FILTER_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMarkerTypeFilterMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MARKER_QR_CODES_MSFT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMarkerQRCodesMSFT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_QUERY_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceQueryInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_QUERY_RESULTS_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceQueryResultsFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceStorageLocationFilterInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_UUID_FILTER_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceUuidFilterInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceComponentFilterInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpaceQueryResultsAvailableFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpaceQueryCompleteFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_SAVE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceSaveInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_ERASE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceEraseInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpaceSaveCompleteFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpaceEraseCompleteFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainImageFoveationVulkanFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainStateAndroidSurfaceDimensionsFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
            case XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainStateSamplerOpenGLESFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSwapchainStateSamplerVulkanFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_SPACE_SHARE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceShareInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpaceShareCompleteFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerSpaceWarpInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpaceWarpPropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHapticAmplitudeEnvelopeVibrationFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SEMANTIC_LABELS_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSemanticLabelsFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ROOM_LAYOUT_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRoomLayoutFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BOUNDARY_2D_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBoundary2DFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSemanticLabelsSupportInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrDigitalLensControlALMALENCE*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSceneCaptureCompleteFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneCaptureRequestInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_CONTAINER_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceContainerFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFoveationEyeTrackedProfileCreateInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFoveationEyeTrackedStateMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemFoveationEyeTrackedPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemFaceTrackingPropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_TRACKER_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceTrackerCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_EXPRESSION_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceExpressionInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceExpressionWeightsFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EYE_TRACKER_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEyeTrackerCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EYE_GAZES_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEyeGazesInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EYE_GAZES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEyeGazesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemEyeTrackingPropertiesFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughKeyboardHandsIntensityFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerSettingsFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAPTIC_PCM_VIBRATION_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHapticPcmVibrationFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrDevicePcmSampleRateStateFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FRAME_SYNTHESIS_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFrameSynthesisInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFrameSynthesisConfigViewEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerDepthTestFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLocalDimmingFrameEndInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_PREFERENCES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughPreferencesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemVirtualKeyboardPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVirtualKeyboardCreateInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVirtualKeyboardSpaceCreateInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVirtualKeyboardLocationInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVirtualKeyboardModelVisibilitySetInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVirtualKeyboardAnimationStateMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVirtualKeyboardModelAnimationStatesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVirtualKeyboardTextureDataMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVirtualKeyboardInputInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVirtualKeyboardTextContextChangeInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataVirtualKeyboardCommitTextMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataVirtualKeyboardBackspaceMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataVirtualKeyboardEnterMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataVirtualKeyboardShownMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataVirtualKeyboardHiddenMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EXTERNAL_CAMERA_OCULUS:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrExternalCameraOCULUS*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrVulkanSwapchainCreateInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
            case XR_TYPE_PERFORMANCE_METRICS_STATE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPerformanceMetricsStateMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PERFORMANCE_METRICS_COUNTER_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPerformanceMetricsCounterMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_LIST_SAVE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceListSaveInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpaceListSaveCompleteFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_USER_CREATE_INFO_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceUserCreateInfoFB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemHeadsetIdPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPACE_DISCOVERY_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpaceDiscoveryPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_DISCOVERY_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceDiscoveryInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_FILTER_UUID_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceFilterUuidMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_FILTER_COMPONENT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceFilterComponentMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_DISCOVERY_RESULT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceDiscoveryResultMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_DISCOVERY_RESULTS_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceDiscoveryResultsMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_RESULTS_AVAILABLE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpaceDiscoveryResultsAvailableMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACE_DISCOVERY_COMPLETE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpaceDiscoveryCompleteMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRecommendedLayerResolutionMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RECOMMENDED_LAYER_RESOLUTION_GET_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRecommendedLayerResolutionGetInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPACE_PERSISTENCE_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpacePersistencePropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACES_SAVE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpacesSaveInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACES_SAVE_RESULT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpacesSaveResultMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACES_ERASE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpacesEraseInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPACES_ERASE_RESULT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpacesEraseResultMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemPassthroughColorLutPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughColorLutCreateInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughColorLutUpdateInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughColorMapLutMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughColorMapInterpolatedLutMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_TRIANGLE_MESH_GET_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceTriangleMeshGetInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_TRIANGLE_MESH_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceTriangleMeshMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FULL_BODY_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemPropertiesBodyTrackingFullBodyMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_PASSTHROUGH_LAYER_RESUMED_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataPassthroughLayerResumedMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_TRACKING_CALIBRATION_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyTrackingCalibrationInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_TRACKING_CALIBRATION_STATUS_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyTrackingCalibrationStatusMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_CALIBRATION_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemPropertiesBodyTrackingCalibrationMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_TRACKING_FIDELITY_STATUS_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyTrackingFidelityStatusMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PROPERTIES_BODY_TRACKING_FIDELITY_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemPropertiesBodyTrackingFidelityMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES2_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemFaceTrackingProperties2FB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_TRACKER_CREATE_INFO2_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceTrackerCreateInfo2FB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_EXPRESSION_INFO2_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceExpressionInfo2FB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_EXPRESSION_WEIGHTS2_FB:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceExpressionWeights2FB*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPATIAL_ENTITY_SHARING_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpatialEntitySharingPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SHARE_SPACES_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrShareSpacesInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SHARE_SPACES_COMPLETE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataShareSpacesCompleteMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_DEPTH_PROVIDER_CREATE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentDepthProviderCreateInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_CREATE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentDepthSwapchainCreateInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_STATE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentDepthSwapchainStateMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_ACQUIRE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentDepthImageAcquireInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_VIEW_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentDepthImageViewMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentDepthImageMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_DEPTH_HAND_REMOVAL_SET_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentDepthHandRemovalSetInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_ENVIRONMENT_DEPTH_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemEnvironmentDepthPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_TIMESTAMP_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentDepthImageTimestampMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_PROPERTIES_GET_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelPropertiesGetInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_PROPERTIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelPropertiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_SPACE_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelSpaceCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_STATE_GET_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelStateGetInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_STATE_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelStateEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_ASSET_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelAssetCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_ASSET_DATA_GET_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelAssetDataGetInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_ASSET_DATA_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelAssetDataEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_GET_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelAssetPropertiesGetInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RENDER_MODEL_ASSET_PROPERTIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRenderModelAssetPropertiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INTERACTION_RENDER_MODEL_IDS_ENUMERATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInteractionRenderModelIdsEnumerateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INTERACTION_RENDER_MODEL_SUBACTION_PATH_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInteractionRenderModelSubactionPathInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_INTERACTION_RENDER_MODELS_CHANGED_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataInteractionRenderModelsChangedEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_INTERACTION_RENDER_MODEL_TOP_LEVEL_USER_PATH_GET_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrInteractionRenderModelTopLevelUserPathGetInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughCreateInfoHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_COLOR_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughColorHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughMeshTransformInfoHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerPassthroughHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FOVEATION_APPLY_INFO_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFoveationApplyInfoHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFoveationDynamicModeInfoHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFoveationCustomModeInfoHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemAnchorPropertiesHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorCreateInfoHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemBodyTrackingPropertiesHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_TRACKER_CREATE_INFO_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyTrackerCreateInfoHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_JOINTS_LOCATE_INFO_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyJointsLocateInfoHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_JOINT_LOCATIONS_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyJointLocationsHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_SKELETON_HTC:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodySkeletonHTC*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrActiveActionSetPrioritiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemForceFeedbackCurlPropertiesMNDX*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrForceFeedbackCurlApplyLocationsMNDX*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_TRACKER_CREATE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyTrackerCreateInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_JOINTS_LOCATE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyJointsLocateInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BODY_JOINT_LOCATIONS_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBodyJointLocationsBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemBodyTrackingPropertiesBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FACIAL_SIMULATION_PROPERTIES_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemFacialSimulationPropertiesBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_TRACKER_CREATE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceTrackerCreateInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACIAL_SIMULATION_DATA_GET_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFacialSimulationDataGetInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACIAL_SIMULATION_DATA_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFacialSimulationDataBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_LIP_EXPRESSION_DATA_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLipExpressionDataBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPATIAL_SENSING_PROPERTIES_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpatialSensingPropertiesBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_COMPONENT_GET_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityComponentGetInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_LOCATION_GET_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityLocationGetInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_LOCATION_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityComponentDataLocationBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_SEMANTIC_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityComponentDataSemanticBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_2D_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityComponentDataBoundingBox2DBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_POLYGON_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityComponentDataPolygonBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_BOUNDING_BOX_3D_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityComponentDataBoundingBox3DBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_TRIANGLE_MESH_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityComponentDataTriangleMeshBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSenseDataProviderCreateInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SENSE_DATA_PROVIDER_START_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSenseDataProviderStartInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SENSE_DATA_PROVIDER_STATE_CHANGED_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSenseDataProviderStateChangedBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SENSE_DATA_UPDATED_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSenseDataUpdatedBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SENSE_DATA_QUERY_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSenseDataQueryInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SENSE_DATA_QUERY_COMPLETION_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSenseDataQueryCompletionBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SENSE_DATA_FILTER_UUID_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSenseDataFilterUuidBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SENSE_DATA_FILTER_SEMANTIC_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSenseDataFilterSemanticBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_QUERIED_SENSE_DATA_GET_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrQueriedSenseDataGetInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_QUERIED_SENSE_DATA_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrQueriedSenseDataBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_STATE_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityStateBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_ANCHOR_CREATE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityAnchorCreateInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ANCHOR_SPACE_CREATE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrAnchorSpaceCreateInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPATIAL_ANCHOR_PROPERTIES_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpatialAnchorPropertiesBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorCreateInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_CREATE_COMPLETION_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorCreateCompletionBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_PERSIST_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorPersistInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_UNPERSIST_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorUnpersistInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPATIAL_ANCHOR_SHARING_PROPERTIES_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpatialAnchorSharingPropertiesBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_SHARE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorShareInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SHARED_SPATIAL_ANCHOR_DOWNLOAD_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSharedSpatialAnchorDownloadInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPATIAL_SCENE_PROPERTIES_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpatialScenePropertiesBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_CAPTURE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneCaptureInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPATIAL_MESH_PROPERTIES_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpatialMeshPropertiesBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SENSE_DATA_PROVIDER_CREATE_INFO_SPATIAL_MESH_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSenseDataProviderCreateInfoSpatialMeshBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FUTURE_POLL_RESULT_PROGRESS_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFuturePollResultProgressBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPATIAL_PLANE_PROPERTIES_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpatialPlanePropertiesBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_COMPONENT_DATA_PLANE_ORIENTATION_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityComponentDataPlaneOrientationBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SENSE_DATA_FILTER_PLANE_ORIENTATION_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSenseDataFilterPlaneOrientationBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_AUDIO_RENDERER_CREATE_INFO_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAudioRendererCreateInfoBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_AUDIO_BUFFER_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrAudioBufferBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_OBJECT_DIRECTIVITY_CARDIOID_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundObjectDirectivityCardioidBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_OBJECT_SHAPE_SPHERE_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundObjectShapeSphereBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundObjectDistanceAttenuationBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_OBJECT_DISTANCE_ATTENUATION_CURVE_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundObjectDistanceAttenuationCurveBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_OBJECT_CONFIG_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundObjectConfigBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_FIELD_CONFIG_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundFieldConfigBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_SURROUND_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundFieldChannelDefinitionSurroundBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_AMBIX_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundFieldChannelDefinitionAmbixBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_FIELD_CHANNEL_DEFINITION_FUMA_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundFieldChannelDefinitionFumaBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_TRIANGLE_MESH_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundTriangleMeshBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_OBSTACLE_CONFIG_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundObstacleConfigBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SOUND_OBSTACLE_MATERIAL_CONFIG_BD:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSoundObstacleMaterialConfigBD*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandTrackingDataSourceInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHandTrackingDataSourceStateEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPlaneDetectorCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPlaneDetectorBeginInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPlaneDetectorGetInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPlaneDetectorLocationsEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PLANE_DETECTOR_LOCATION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPlaneDetectorLocationEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPlaneDetectorPolygonBufferEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemPlaneDetectionPropertiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_GET_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableGetInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrAnchorSpaceCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_PLANE_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackablePlaneANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableTrackerCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_TRACKABLES_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemTrackablesPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EYES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEyesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEyeTrackerCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EYES_GET_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEyesGetInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemEyeTrackingPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPersistedAnchorSpaceCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPersistedAnchorSpaceInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrDeviceAnchorPersistenceCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemDeviceAnchorPersistencePropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceTrackerCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_STATE_GET_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceStateGetInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_STATE_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceStateANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemFaceTrackingPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_CAMERA_STATE_GET_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughCameraStateGetInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PASSTHROUGH_CAMERA_STATE_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemPassthroughCameraStatePropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_RECOMMENDED_RESOLUTION_CHANGED_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataRecommendedResolutionChangedANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughLayerCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPassthroughLayerMeshANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCompositionLayerPassthroughANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemPassthroughLayerPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RAYCAST_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRaycastInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRaycastHitResultsANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PERFORMANCE_METRICS_STATE_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPerformanceMetricsStateANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PERFORMANCE_METRICS_COUNTER_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPerformanceMetricsCounterANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_OBJECT_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableObjectANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableObjectConfigurationANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FUTURE_CANCEL_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFutureCancelInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FUTURE_POLL_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFuturePollInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FUTURE_COMPLETION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFutureCompletionEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FUTURE_POLL_RESULT_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFuturePollResultEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataUserPresenceChangedEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_USER_PRESENCE_PROPERTIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemUserPresencePropertiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_NOTIFICATIONS_SET_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemNotificationsSetInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_DETECTOR_CREATE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshDetectorCreateInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_STATE_REQUEST_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshStateRequestInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_BLOCK_STATE_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshBlockStateML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshStateRequestCompletionML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_BUFFER_RECOMMENDED_SIZE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshBufferRecommendedSizeInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_BUFFER_SIZE_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshBufferSizeML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_BUFFER_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshBufferML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_BLOCK_REQUEST_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshBlockRequestML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_GET_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshGetInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_BLOCK_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshBlockML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshRequestCompletionML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrWorldMeshRequestCompletionInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FACIAL_EXPRESSION_PROPERTIES_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemFacialExpressionPropertiesML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACIAL_EXPRESSION_CLIENT_CREATE_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFacialExpressionClientCreateInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_GET_INFO_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFacialExpressionBlendShapeGetInfoML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACIAL_EXPRESSION_BLEND_SHAPE_PROPERTIES_ML:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFacialExpressionBlendShapePropertiesML*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_BOUNDARY_VISIBILITY_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemBoundaryVisibilityPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_BOUNDARY_VISIBILITY_CHANGED_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataBoundaryVisibilityChangedMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SIMULTANEOUS_HANDS_AND_CONTROLLERS_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSimultaneousHandsAndControllersPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_RESUME_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSimultaneousHandsAndControllersTrackingResumeInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SIMULTANEOUS_HANDS_AND_CONTROLLERS_TRACKING_PAUSE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSimultaneousHandsAndControllersTrackingPauseInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_FACE_TRACKING_VISEMES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrFaceTrackingVisemesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_FACE_TRACKING_VISEMES_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemFaceTrackingVisemesPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ROOM_MESH_FACE_INDICES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRoomMeshFaceIndicesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_ROOM_MESH_GET_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceRoomMeshGetInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ROOM_MESH_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrRoomMeshMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COLOCATION_DISCOVERY_START_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrColocationDiscoveryStartInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COLOCATION_DISCOVERY_STOP_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrColocationDiscoveryStopInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COLOCATION_ADVERTISEMENT_START_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrColocationAdvertisementStartInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_COLOCATION_ADVERTISEMENT_STOP_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrColocationAdvertisementStopInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_START_COLOCATION_ADVERTISEMENT_COMPLETE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataStartColocationAdvertisementCompleteMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_STOP_COLOCATION_ADVERTISEMENT_COMPLETE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataStopColocationAdvertisementCompleteMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_COLOCATION_ADVERTISEMENT_COMPLETE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataColocationAdvertisementCompleteMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_START_COLOCATION_DISCOVERY_COMPLETE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataStartColocationDiscoveryCompleteMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_RESULT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataColocationDiscoveryResultMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_COLOCATION_DISCOVERY_COMPLETE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataColocationDiscoveryCompleteMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_STOP_COLOCATION_DISCOVERY_COMPLETE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataStopColocationDiscoveryCompleteMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_COLOCATION_DISCOVERY_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemColocationDiscoveryPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SHARE_SPACES_RECIPIENT_GROUPS_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrShareSpacesRecipientGroupsMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPACE_GROUP_UUID_FILTER_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpaceGroupUuidFilterInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SPATIAL_ENTITY_GROUP_SHARING_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSpatialEntityGroupSharingPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_ENVIRONMENT_RAYCAST_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemEnvironmentRaycastPropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentRaycasterCreateInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_RAYCASTER_CREATE_COMPLETION_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentRaycasterCreateCompletionMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_RAYCAST_HIT_GET_INFO_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentRaycastHitGetInfoMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_RAYCAST_HIT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentRaycastHitMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_ENVIRONMENT_RAYCAST_FILTER_DISTANCE_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEnvironmentRaycastFilterDistanceMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TILE_PROPERTIES_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTilePropertiesMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TILE_PROPERTIES_HINT_META:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTilePropertiesHintMETA*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLightEstimatorCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLightEstimateGetInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_LIGHT_ESTIMATE_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLightEstimateANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_DIRECTIONAL_LIGHT_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrDirectionalLightANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPHERICAL_HARMONICS_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSphericalHarmonicsANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_AMBIENT_LIGHT_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrAmbientLightANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemLightEstimationPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#if defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_ANCHOR_SHARING_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrAnchorSharingInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_ANCHOR_SHARING_TOKEN_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrAnchorSharingTokenANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_SYSTEM_ANCHOR_SHARING_EXPORT_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemAnchorSharingExportPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
#endif // defined(XR_USE_PLATFORM_ANDROID)
            case XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemMarkerTrackingPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableMarkerConfigurationANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_MARKER_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableMarkerANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemQrCodeTrackingPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableQrCodeConfigurationANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_QR_CODE_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableQrCodeANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemImageTrackingPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableImageDatabaseEntryANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableImageDatabaseCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCreateTrackableImageDatabaseCompletionANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableImageConfigurationANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_TRACKABLE_IMAGE_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrTrackableImageANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataImageTrackingLostANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemSceneMeshingPropertiesANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMeshingTrackerCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMeshSnapshotCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneMeshSnapshotCreationResultANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_SUBMESH_STATE_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneSubmeshStateANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SCENE_SUBMESH_DATA_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSceneSubmeshDataANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialCapabilityComponentTypesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialContextCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCreateSpatialContextCompletionEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialDiscoverySnapshotCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCreateSpatialDiscoverySnapshotCompletionEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentDataQueryConditionEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentDataQueryResultEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialBufferGetInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentBounded2DListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentBounded3DListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentParentListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentMesh3DListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityFromIdCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialUpdateSnapshotCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataSpatialDiscoveryRecommendedEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialFilterTrackingStateEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialCapabilityConfigurationPlaneTrackingEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_PLANE_ALIGNMENT_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentPlaneAlignmentListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_MESH_2D_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentMesh2DListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_POLYGON_2D_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentPolygon2DListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_PLANE_SEMANTIC_LABEL_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentPlaneSemanticLabelListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_GET_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrStationaryReferenceSpaceGenerationIdGetInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_STATIONARY_REFERENCE_SPACE_GENERATION_ID_RESULT_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrStationaryReferenceSpaceGenerationIdResultEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialCapabilityConfigurationQrCodeEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialCapabilityConfigurationMicroQrCodeEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialCapabilityConfigurationArucoMarkerEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialCapabilityConfigurationAprilTagEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_MARKER_SIZE_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialMarkerSizeEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialMarkerStaticOptimizationEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentMarkerListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialCapabilityConfigurationAnchorEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_ANCHOR_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentAnchorListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_PERSISTENCE_CONTEXT_CREATE_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialPersistenceContextCreateInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrCreateSpatialPersistenceContextCompletionEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CONTEXT_PERSISTENCE_CONFIG_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialContextPersistenceConfigEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_DISCOVERY_PERSISTENCE_UUID_FILTER_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialDiscoveryPersistenceUuidFilterEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_PERSISTENCE_LIST_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentPersistenceListEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHapticParametricVibrationEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_HAPTIC_PARAMETRIC_PROPERTIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrHapticParametricPropertiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SYSTEM_HAPTIC_PARAMETRIC_PROPERTIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSystemHapticParametricPropertiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_PERSIST_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityPersistInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrPersistSpatialEntityCompletionEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ENTITY_UNPERSIST_INFO_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialEntityUnpersistInfoEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrUnpersistSpatialEntityCompletionEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialCapabilityConfigurationObjectTrackingANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentObjectSemanticLabelListANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialCapabilityConfigurationDepthRaycastANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_RAYCAST_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialRaycastInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_RAYCAST_RESULT_LIST_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentRaycastResultListANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_RAYCAST_SNAPSHOT_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialRaycastSnapshotCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_PARENT_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorParentANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialDiscoveryUniqueEntitiesFilterANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialComponentSubsumedByListANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrSpatialAnchorSpaceFromIdCreateInfoANDROID*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_BATTERY_STATE_DISPLAY_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrBatteryStateDisplayEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_LOADER_INIT_INFO_PROPERTIES_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrLoaderInitInfoPropertiesEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            case XR_TYPE_EVENT_DATA_VIEW_CONFIGURATION_VIEWS_CHANGED_EXT:
                if (XR_SUCCESS != ValidateXrStruct(instance_info, command_name, objects_info, true, false,
                                                   reinterpret_cast<const XrEventDataViewConfigurationViewsChangedEXT*>(next_header))) {
                    return NEXT_CHAIN_RESULT_ERROR;
                }
                break;
            default:
                // ignore the next_header structure
                break;
        }
        next_header = reinterpret_cast<const XrBaseInStructure*>(next_header->next);
    }
    return return_result;
}


// ---- Core 1.0 commands
XrResult GenValidUsageInputsXrCreateInstance(
const XrInstanceCreateInfo* createInfo,
XrInstance* instance) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(nullptr, "VUID-xrCreateInstance-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateInstance", objects_info,
                                "Invalid NULL for XrInstanceCreateInfo \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrInstanceCreateInfo is valid
        xr_result = ValidateXrStruct(nullptr, "xrCreateInstance", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(nullptr, "VUID-xrCreateInstance-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateInstance",
                                objects_info,
                                "Command xrCreateInstance param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == instance) {
            CoreValidLogMessage(nullptr, "VUID-xrCreateInstance-instance-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateInstance", objects_info,
                                "Invalid NULL for XrInstance \"instance\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XrResult GenValidUsageInputsXrDestroyInstance(
XrInstance instance) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyInstance-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyInstance",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyInstance(
    XrInstance instance) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->DestroyInstance(instance);
        if (XR_SUCCEEDED(result)) {
            g_instance_info.erase(instance);
        }
        GenValidUsageCleanUpMaps(gen_instance_info);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XrResult GenValidUsageInputsXrGetInstanceProperties(
XrInstance instance,
XrInstanceProperties* instanceProperties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetInstanceProperties-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInstanceProperties",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == instanceProperties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetInstanceProperties-instanceProperties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInstanceProperties", objects_info,
                                "Invalid NULL for XrInstanceProperties \"instanceProperties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrInstanceProperties is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetInstanceProperties", objects_info,
                                                        false, true, instanceProperties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetInstanceProperties-instanceProperties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInstanceProperties",
                                objects_info,
                                "Command xrGetInstanceProperties param instanceProperties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetInstanceProperties(
    XrInstance instance,
    XrInstanceProperties* instanceProperties) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetInstanceProperties(instance, instanceProperties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetInstanceProperties(
    XrInstance instance,
    XrInstanceProperties* instanceProperties) {
    XrResult test_result = GenValidUsageInputsXrGetInstanceProperties(instance, instanceProperties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetInstanceProperties(instance, instanceProperties);
}

XrResult GenValidUsageInputsXrPollEvent(
XrInstance instance,
XrEventDataBuffer* eventData) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrPollEvent-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPollEvent",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == eventData) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPollEvent-eventData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPollEvent", objects_info,
                                "Invalid NULL for XrEventDataBuffer \"eventData\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEventDataBuffer is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPollEvent", objects_info,
                                                        false, true, eventData);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPollEvent-eventData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPollEvent",
                                objects_info,
                                "Command xrPollEvent param eventData is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPollEvent(
    XrInstance instance,
    XrEventDataBuffer* eventData) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->PollEvent(instance, eventData);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPollEvent(
    XrInstance instance,
    XrEventDataBuffer* eventData) {
    XrResult test_result = GenValidUsageInputsXrPollEvent(instance, eventData);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPollEvent(instance, eventData);
}

XrResult GenValidUsageInputsXrResultToString(
XrInstance instance,
XrResult value,
char buffer[XR_MAX_RESULT_STRING_SIZE]) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrResultToString-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrResultToString",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // NOTE: Skipping enum validation for xrResultToString value - toString functions accept any value
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrResultToString(
    XrInstance instance,
    XrResult value,
    char buffer[XR_MAX_RESULT_STRING_SIZE]) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->ResultToString(instance, value, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrResultToString(
    XrInstance instance,
    XrResult value,
    char buffer[XR_MAX_RESULT_STRING_SIZE]) {
    XrResult test_result = GenValidUsageInputsXrResultToString(instance, value, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrResultToString(instance, value, buffer);
}

XrResult GenValidUsageInputsXrStructureTypeToString(
XrInstance instance,
XrStructureType value,
char buffer[XR_MAX_STRUCTURE_NAME_SIZE]) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrStructureTypeToString-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStructureTypeToString",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // NOTE: Skipping enum validation for xrStructureTypeToString value - toString functions accept any value
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStructureTypeToString(
    XrInstance instance,
    XrStructureType value,
    char buffer[XR_MAX_STRUCTURE_NAME_SIZE]) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->StructureTypeToString(instance, value, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStructureTypeToString(
    XrInstance instance,
    XrStructureType value,
    char buffer[XR_MAX_STRUCTURE_NAME_SIZE]) {
    XrResult test_result = GenValidUsageInputsXrStructureTypeToString(instance, value, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStructureTypeToString(instance, value, buffer);
}

XrResult GenValidUsageInputsXrGetSystem(
XrInstance instance,
const XrSystemGetInfo* getInfo,
XrSystemId* systemId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetSystem-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSystem",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSystem-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSystem", objects_info,
                                "Invalid NULL for XrSystemGetInfo \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSystemGetInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSystem", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSystem-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSystem",
                                objects_info,
                                "Command xrGetSystem param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == systemId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSystem-systemId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSystem", objects_info,
                                "Invalid NULL for XrSystemId \"systemId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSystem-systemId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSystem(
    XrInstance instance,
    const XrSystemGetInfo* getInfo,
    XrSystemId* systemId) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetSystem(instance, getInfo, systemId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSystem(
    XrInstance instance,
    const XrSystemGetInfo* getInfo,
    XrSystemId* systemId) {
    XrResult test_result = GenValidUsageInputsXrGetSystem(instance, getInfo, systemId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSystem(instance, getInfo, systemId);
}

XrResult GenValidUsageInputsXrGetSystemProperties(
XrInstance instance,
XrSystemId systemId,
XrSystemProperties* properties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetSystemProperties-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSystemProperties",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == properties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSystemProperties-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSystemProperties", objects_info,
                                "Invalid NULL for XrSystemProperties \"properties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSystemProperties is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSystemProperties", objects_info,
                                                        false, true, properties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSystemProperties-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSystemProperties",
                                objects_info,
                                "Command xrGetSystemProperties param properties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSystemProperties(
    XrInstance instance,
    XrSystemId systemId,
    XrSystemProperties* properties) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetSystemProperties(instance, systemId, properties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSystemProperties(
    XrInstance instance,
    XrSystemId systemId,
    XrSystemProperties* properties) {
    XrResult test_result = GenValidUsageInputsXrGetSystemProperties(instance, systemId, properties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSystemProperties(instance, systemId, properties);
}

XrResult GenValidUsageInputsXrEnumerateEnvironmentBlendModes(
XrInstance instance,
XrSystemId systemId,
XrViewConfigurationType viewConfigurationType,
uint32_t environmentBlendModeCapacityInput,
uint32_t* environmentBlendModeCountOutput,
XrEnvironmentBlendMode* environmentBlendModes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateEnvironmentBlendModes-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentBlendModes",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrViewConfigurationType value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrEnumerateEnvironmentBlendModes", "xrEnumerateEnvironmentBlendModes", "viewConfigurationType", objects_info, viewConfigurationType)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(viewConfigurationType));
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentBlendModes-viewConfigurationType-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrEnumerateEnvironmentBlendModes",
                                objects_info, oss_enum.str());
        }
        // Optional array must be non-NULL when environmentBlendModeCapacityInput is non-zero
        if (0 != environmentBlendModeCapacityInput && nullptr == environmentBlendModes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentBlendModes-environmentBlendModes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentBlendModes",
                                objects_info,
                                "Command xrEnumerateEnvironmentBlendModes param environmentBlendModes is NULL, but environmentBlendModeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == environmentBlendModeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentBlendModes-environmentBlendModeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentBlendModes", objects_info,
                                "Invalid NULL for uint32_t \"environmentBlendModeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateEnvironmentBlendModes-environmentBlendModeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateEnvironmentBlendModes-environmentBlendModes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateEnvironmentBlendModes(
    XrInstance instance,
    XrSystemId systemId,
    XrViewConfigurationType viewConfigurationType,
    uint32_t environmentBlendModeCapacityInput,
    uint32_t* environmentBlendModeCountOutput,
    XrEnvironmentBlendMode* environmentBlendModes) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateEnvironmentBlendModes(instance, systemId, viewConfigurationType, environmentBlendModeCapacityInput, environmentBlendModeCountOutput, environmentBlendModes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateEnvironmentBlendModes(
    XrInstance instance,
    XrSystemId systemId,
    XrViewConfigurationType viewConfigurationType,
    uint32_t environmentBlendModeCapacityInput,
    uint32_t* environmentBlendModeCountOutput,
    XrEnvironmentBlendMode* environmentBlendModes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateEnvironmentBlendModes(instance, systemId, viewConfigurationType, environmentBlendModeCapacityInput, environmentBlendModeCountOutput, environmentBlendModes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateEnvironmentBlendModes(instance, systemId, viewConfigurationType, environmentBlendModeCapacityInput, environmentBlendModeCountOutput, environmentBlendModes);
}

XrResult GenValidUsageInputsXrCreateSession(
XrInstance instance,
const XrSessionCreateInfo* createInfo,
XrSession* session) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSession-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSession",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSession-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSession", objects_info,
                                "Invalid NULL for XrSessionCreateInfo \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSessionCreateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSession", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSession-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSession",
                                objects_info,
                                "Command xrCreateSession param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == session) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSession-session-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSession", objects_info,
                                "Invalid NULL for XrSession \"session\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSession(
    XrInstance instance,
    const XrSessionCreateInfo* createInfo,
    XrSession* session) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->CreateSession(instance, createInfo, session);
        if (XR_SUCCESS == result && nullptr != session) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_INSTANCE;
            handle_info->direct_parent_handle = MakeHandleGeneric(instance);
            g_session_info.insert(*session, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XrResult GenValidUsageInputsXrDestroySession(
XrSession session) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySession-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySession",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySession(
    XrSession session) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySession(session);

        // Clean up any labels associated with this session
        CoreValidationDeleteSessionLabels(session);

        if (XR_SUCCEEDED(result)) {
            g_session_info.erase(session);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySession(
    XrSession session) {
    XrResult test_result = GenValidUsageInputsXrDestroySession(session);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySession(session);
}

XrResult GenValidUsageInputsXrEnumerateReferenceSpaces(
XrSession session,
uint32_t spaceCapacityInput,
uint32_t* spaceCountOutput,
XrReferenceSpaceType* spaces) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateReferenceSpaces-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateReferenceSpaces",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when spaceCapacityInput is non-zero
        if (0 != spaceCapacityInput && nullptr == spaces) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateReferenceSpaces-spaces-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateReferenceSpaces",
                                objects_info,
                                "Command xrEnumerateReferenceSpaces param spaces is NULL, but spaceCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spaceCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateReferenceSpaces-spaceCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateReferenceSpaces", objects_info,
                                "Invalid NULL for uint32_t \"spaceCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateReferenceSpaces-spaceCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateReferenceSpaces-spaces-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateReferenceSpaces(
    XrSession session,
    uint32_t spaceCapacityInput,
    uint32_t* spaceCountOutput,
    XrReferenceSpaceType* spaces) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateReferenceSpaces(session, spaceCapacityInput, spaceCountOutput, spaces);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateReferenceSpaces(
    XrSession session,
    uint32_t spaceCapacityInput,
    uint32_t* spaceCountOutput,
    XrReferenceSpaceType* spaces) {
    XrResult test_result = GenValidUsageInputsXrEnumerateReferenceSpaces(session, spaceCapacityInput, spaceCountOutput, spaces);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateReferenceSpaces(session, spaceCapacityInput, spaceCountOutput, spaces);
}

XrResult GenValidUsageInputsXrCreateReferenceSpace(
XrSession session,
const XrReferenceSpaceCreateInfo* createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateReferenceSpace-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateReferenceSpace",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateReferenceSpace-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateReferenceSpace", objects_info,
                                "Invalid NULL for XrReferenceSpaceCreateInfo \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrReferenceSpaceCreateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateReferenceSpace", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateReferenceSpace-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateReferenceSpace",
                                objects_info,
                                "Command xrCreateReferenceSpace param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateReferenceSpace-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateReferenceSpace", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateReferenceSpace(
    XrSession session,
    const XrReferenceSpaceCreateInfo* createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateReferenceSpace(session, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateReferenceSpace(
    XrSession session,
    const XrReferenceSpaceCreateInfo* createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateReferenceSpace(session, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateReferenceSpace(session, createInfo, space);
}

XrResult GenValidUsageInputsXrGetReferenceSpaceBoundsRect(
XrSession session,
XrReferenceSpaceType referenceSpaceType,
XrExtent2Df* bounds) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetReferenceSpaceBoundsRect-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetReferenceSpaceBoundsRect",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrReferenceSpaceType value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetReferenceSpaceBoundsRect", "xrGetReferenceSpaceBoundsRect", "referenceSpaceType", objects_info, referenceSpaceType)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrReferenceSpaceType \"referenceSpaceType\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(referenceSpaceType));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetReferenceSpaceBoundsRect-referenceSpaceType-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetReferenceSpaceBoundsRect",
                                objects_info, oss_enum.str());
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bounds) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetReferenceSpaceBoundsRect-bounds-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetReferenceSpaceBoundsRect", objects_info,
                                "Invalid NULL for XrExtent2Df \"bounds\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetReferenceSpaceBoundsRect-bounds-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetReferenceSpaceBoundsRect(
    XrSession session,
    XrReferenceSpaceType referenceSpaceType,
    XrExtent2Df* bounds) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetReferenceSpaceBoundsRect(session, referenceSpaceType, bounds);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetReferenceSpaceBoundsRect(
    XrSession session,
    XrReferenceSpaceType referenceSpaceType,
    XrExtent2Df* bounds) {
    XrResult test_result = GenValidUsageInputsXrGetReferenceSpaceBoundsRect(session, referenceSpaceType, bounds);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetReferenceSpaceBoundsRect(session, referenceSpaceType, bounds);
}

XrResult GenValidUsageInputsXrCreateActionSpace(
XrSession session,
const XrActionSpaceCreateInfo* createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateActionSpace-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateActionSpace",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateActionSpace-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateActionSpace", objects_info,
                                "Invalid NULL for XrActionSpaceCreateInfo \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionSpaceCreateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateActionSpace", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateActionSpace-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateActionSpace",
                                objects_info,
                                "Command xrCreateActionSpace param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateActionSpace-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateActionSpace", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateActionSpace(
    XrSession session,
    const XrActionSpaceCreateInfo* createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateActionSpace(session, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateActionSpace(
    XrSession session,
    const XrActionSpaceCreateInfo* createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateActionSpace(session, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateActionSpace(session, createInfo, space);
}

XrResult GenValidUsageInputsXrLocateSpace(
XrSpace space,
XrSpace baseSpace,
XrTime time,
XrSpaceLocation* location) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(nullptr, "VUID-xrLocateSpace-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpace",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(baseSpace, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&baseSpace);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"baseSpace\" ";
                oss << HandleToHexString(baseSpace);
                CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpace-baseSpace-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpace",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(space),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(baseSpace), false)) {
            std::ostringstream oss_error;
            oss_error << "XrSpace " << HandleToHexString(space);
            oss_error <<  " and XrSpace ";
            oss_error << HandleToHexString(baseSpace);
            oss_error <<  " must share a parent";
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpace-commonparent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpace",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == location) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpace-location-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpace", objects_info,
                                "Invalid NULL for XrSpaceLocation \"location\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceLocation is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateSpace", objects_info,
                                                        false, true, location);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpace-location-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpace",
                                objects_info,
                                "Command xrLocateSpace param location is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLocateSpace(
    XrSpace space,
    XrSpace baseSpace,
    XrTime time,
    XrSpaceLocation* location) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LocateSpace(space, baseSpace, time, location);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLocateSpace(
    XrSpace space,
    XrSpace baseSpace,
    XrTime time,
    XrSpaceLocation* location) {
    XrResult test_result = GenValidUsageInputsXrLocateSpace(space, baseSpace, time, location);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLocateSpace(space, baseSpace, time, location);
}

XrResult GenValidUsageInputsXrDestroySpace(
XrSpace space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpace-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpace",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpace(
    XrSpace space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpace(space);
        if (XR_SUCCEEDED(result)) {
            g_space_info.erase(space);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpace(
    XrSpace space) {
    XrResult test_result = GenValidUsageInputsXrDestroySpace(space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpace(space);
}

XrResult GenValidUsageInputsXrEnumerateViewConfigurations(
XrInstance instance,
XrSystemId systemId,
uint32_t viewConfigurationTypeCapacityInput,
uint32_t* viewConfigurationTypeCountOutput,
XrViewConfigurationType* viewConfigurationTypes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateViewConfigurations-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViewConfigurations",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when viewConfigurationTypeCapacityInput is non-zero
        if (0 != viewConfigurationTypeCapacityInput && nullptr == viewConfigurationTypes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateViewConfigurations-viewConfigurationTypes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViewConfigurations",
                                objects_info,
                                "Command xrEnumerateViewConfigurations param viewConfigurationTypes is NULL, but viewConfigurationTypeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == viewConfigurationTypeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateViewConfigurations-viewConfigurationTypeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViewConfigurations", objects_info,
                                "Invalid NULL for uint32_t \"viewConfigurationTypeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateViewConfigurations-viewConfigurationTypeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateViewConfigurations-viewConfigurationTypes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateViewConfigurations(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t viewConfigurationTypeCapacityInput,
    uint32_t* viewConfigurationTypeCountOutput,
    XrViewConfigurationType* viewConfigurationTypes) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateViewConfigurations(instance, systemId, viewConfigurationTypeCapacityInput, viewConfigurationTypeCountOutput, viewConfigurationTypes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateViewConfigurations(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t viewConfigurationTypeCapacityInput,
    uint32_t* viewConfigurationTypeCountOutput,
    XrViewConfigurationType* viewConfigurationTypes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateViewConfigurations(instance, systemId, viewConfigurationTypeCapacityInput, viewConfigurationTypeCountOutput, viewConfigurationTypes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateViewConfigurations(instance, systemId, viewConfigurationTypeCapacityInput, viewConfigurationTypeCountOutput, viewConfigurationTypes);
}

XrResult GenValidUsageInputsXrGetViewConfigurationProperties(
XrInstance instance,
XrSystemId systemId,
XrViewConfigurationType viewConfigurationType,
XrViewConfigurationProperties* configurationProperties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetViewConfigurationProperties-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetViewConfigurationProperties",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrViewConfigurationType value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetViewConfigurationProperties", "xrGetViewConfigurationProperties", "viewConfigurationType", objects_info, viewConfigurationType)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(viewConfigurationType));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetViewConfigurationProperties-viewConfigurationType-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetViewConfigurationProperties",
                                objects_info, oss_enum.str());
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == configurationProperties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetViewConfigurationProperties-configurationProperties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetViewConfigurationProperties", objects_info,
                                "Invalid NULL for XrViewConfigurationProperties \"configurationProperties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrViewConfigurationProperties is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetViewConfigurationProperties", objects_info,
                                                        false, true, configurationProperties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetViewConfigurationProperties-configurationProperties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetViewConfigurationProperties",
                                objects_info,
                                "Command xrGetViewConfigurationProperties param configurationProperties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetViewConfigurationProperties(
    XrInstance instance,
    XrSystemId systemId,
    XrViewConfigurationType viewConfigurationType,
    XrViewConfigurationProperties* configurationProperties) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetViewConfigurationProperties(instance, systemId, viewConfigurationType, configurationProperties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetViewConfigurationProperties(
    XrInstance instance,
    XrSystemId systemId,
    XrViewConfigurationType viewConfigurationType,
    XrViewConfigurationProperties* configurationProperties) {
    XrResult test_result = GenValidUsageInputsXrGetViewConfigurationProperties(instance, systemId, viewConfigurationType, configurationProperties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetViewConfigurationProperties(instance, systemId, viewConfigurationType, configurationProperties);
}

XrResult GenValidUsageInputsXrEnumerateViewConfigurationViews(
XrInstance instance,
XrSystemId systemId,
XrViewConfigurationType viewConfigurationType,
uint32_t viewCapacityInput,
uint32_t* viewCountOutput,
XrViewConfigurationView* views) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateViewConfigurationViews-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViewConfigurationViews",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrViewConfigurationType value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrEnumerateViewConfigurationViews", "xrEnumerateViewConfigurationViews", "viewConfigurationType", objects_info, viewConfigurationType)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(viewConfigurationType));
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateViewConfigurationViews-viewConfigurationType-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrEnumerateViewConfigurationViews",
                                objects_info, oss_enum.str());
        }
        // Optional array must be non-NULL when viewCapacityInput is non-zero
        if (0 != viewCapacityInput && nullptr == views) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateViewConfigurationViews-views-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViewConfigurationViews",
                                objects_info,
                                "Command xrEnumerateViewConfigurationViews param views is NULL, but viewCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == viewCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateViewConfigurationViews-viewCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViewConfigurationViews", objects_info,
                                "Invalid NULL for uint32_t \"viewCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateViewConfigurationViews-viewCountOutput-parameter" type
        if (views) {
            for (uint32_t value_views_inc = 0; value_views_inc < viewCapacityInput; ++value_views_inc) {
                // Validate that the structure XrViewConfigurationView is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateViewConfigurationViews", objects_info,
                                                                true, true, &views[value_views_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateViewConfigurationViews-views-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViewConfigurationViews",
                                        objects_info,
                                        "Command xrEnumerateViewConfigurationViews param views is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateViewConfigurationViews(
    XrInstance instance,
    XrSystemId systemId,
    XrViewConfigurationType viewConfigurationType,
    uint32_t viewCapacityInput,
    uint32_t* viewCountOutput,
    XrViewConfigurationView* views) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateViewConfigurationViews(instance, systemId, viewConfigurationType, viewCapacityInput, viewCountOutput, views);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateViewConfigurationViews(
    XrInstance instance,
    XrSystemId systemId,
    XrViewConfigurationType viewConfigurationType,
    uint32_t viewCapacityInput,
    uint32_t* viewCountOutput,
    XrViewConfigurationView* views) {
    XrResult test_result = GenValidUsageInputsXrEnumerateViewConfigurationViews(instance, systemId, viewConfigurationType, viewCapacityInput, viewCountOutput, views);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateViewConfigurationViews(instance, systemId, viewConfigurationType, viewCapacityInput, viewCountOutput, views);
}

XrResult GenValidUsageInputsXrEnumerateSwapchainFormats(
XrSession session,
uint32_t formatCapacityInput,
uint32_t* formatCountOutput,
int64_t* formats) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSwapchainFormats-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainFormats",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when formatCapacityInput is non-zero
        if (0 != formatCapacityInput && nullptr == formats) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainFormats-formats-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainFormats",
                                objects_info,
                                "Command xrEnumerateSwapchainFormats param formats is NULL, but formatCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == formatCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainFormats-formatCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainFormats", objects_info,
                                "Invalid NULL for uint32_t \"formatCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSwapchainFormats-formatCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrEnumerateSwapchainFormats-formats-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSwapchainFormats(
    XrSession session,
    uint32_t formatCapacityInput,
    uint32_t* formatCountOutput,
    int64_t* formats) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateSwapchainFormats(session, formatCapacityInput, formatCountOutput, formats);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSwapchainFormats(
    XrSession session,
    uint32_t formatCapacityInput,
    uint32_t* formatCountOutput,
    int64_t* formats) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSwapchainFormats(session, formatCapacityInput, formatCountOutput, formats);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSwapchainFormats(session, formatCapacityInput, formatCountOutput, formats);
}

XrResult GenValidUsageInputsXrCreateSwapchain(
XrSession session,
const XrSwapchainCreateInfo* createInfo,
XrSwapchain* swapchain) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSwapchain-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSwapchain",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSwapchain-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSwapchain", objects_info,
                                "Invalid NULL for XrSwapchainCreateInfo \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSwapchainCreateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSwapchain", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSwapchain-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSwapchain",
                                objects_info,
                                "Command xrCreateSwapchain param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == swapchain) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSwapchain-swapchain-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSwapchain", objects_info,
                                "Invalid NULL for XrSwapchain \"swapchain\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSwapchain(
    XrSession session,
    const XrSwapchainCreateInfo* createInfo,
    XrSwapchain* swapchain) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSwapchain(session, createInfo, swapchain);
        if (XR_SUCCESS == result && nullptr != swapchain) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_swapchain_info.insert(*swapchain, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSwapchain(
    XrSession session,
    const XrSwapchainCreateInfo* createInfo,
    XrSwapchain* swapchain) {
    XrResult test_result = GenValidUsageInputsXrCreateSwapchain(session, createInfo, swapchain);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSwapchain(session, createInfo, swapchain);
}

XrResult GenValidUsageInputsXrDestroySwapchain(
XrSwapchain swapchain) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_SWAPCHAIN);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSwapchainHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSwapchain handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySwapchain-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySwapchain",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySwapchain(
    XrSwapchain swapchain) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySwapchain(swapchain);
        if (XR_SUCCEEDED(result)) {
            g_swapchain_info.erase(swapchain);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySwapchain(
    XrSwapchain swapchain) {
    XrResult test_result = GenValidUsageInputsXrDestroySwapchain(swapchain);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySwapchain(swapchain);
}

XrResult GenValidUsageInputsXrEnumerateSwapchainImages(
XrSwapchain swapchain,
uint32_t imageCapacityInput,
uint32_t* imageCountOutput,
XrSwapchainImageBaseHeader* images) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_SWAPCHAIN);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSwapchainHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSwapchain handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSwapchainImages-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when imageCapacityInput is non-zero
        if (0 != imageCapacityInput && nullptr == images) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainImages-images-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages",
                                objects_info,
                                "Command xrEnumerateSwapchainImages param images is NULL, but imageCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == imageCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainImages-imageCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages", objects_info,
                                "Invalid NULL for uint32_t \"imageCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSwapchainImages-imageCountOutput-parameter" type
        if (images) {
            for (uint32_t value_images_inc = 0; value_images_inc < imageCapacityInput; ++value_images_inc) {
#if defined(XR_USE_GRAPHICS_API_OPENGL)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageOpenGLKHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageOpenGLKHR* new_swapchainimageopenglkhr_value = reinterpret_cast<XrSwapchainImageOpenGLKHR*>(images);
                        if (new_swapchainimageopenglkhr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) {
                            if (nullptr != new_swapchainimageopenglkhr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateSwapchainImages",
                                                                                objects_info, false, true, &new_swapchainimageopenglkhr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateSwapchainImages param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainImages-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageOpenGLESKHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageOpenGLESKHR* new_swapchainimageopengleskhr_value = reinterpret_cast<XrSwapchainImageOpenGLESKHR*>(images);
                        if (new_swapchainimageopengleskhr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) {
                            if (nullptr != new_swapchainimageopengleskhr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateSwapchainImages",
                                                                                objects_info, false, true, &new_swapchainimageopengleskhr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateSwapchainImages param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainImages-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageVulkanKHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageVulkanKHR* new_swapchainimagevulkankhr_value = reinterpret_cast<XrSwapchainImageVulkanKHR*>(images);
                        if (new_swapchainimagevulkankhr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) {
                            if (nullptr != new_swapchainimagevulkankhr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateSwapchainImages",
                                                                                objects_info, false, true, &new_swapchainimagevulkankhr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateSwapchainImages param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainImages-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_D3D11)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageD3D11KHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageD3D11KHR* new_swapchainimaged3d11khr_value = reinterpret_cast<XrSwapchainImageD3D11KHR*>(images);
                        if (new_swapchainimaged3d11khr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) {
                            if (nullptr != new_swapchainimaged3d11khr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateSwapchainImages",
                                                                                objects_info, false, true, &new_swapchainimaged3d11khr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateSwapchainImages param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainImages-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D12)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageD3D12KHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageD3D12KHR* new_swapchainimaged3d12khr_value = reinterpret_cast<XrSwapchainImageD3D12KHR*>(images);
                        if (new_swapchainimaged3d12khr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) {
                            if (nullptr != new_swapchainimaged3d12khr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateSwapchainImages",
                                                                                objects_info, false, true, &new_swapchainimaged3d12khr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateSwapchainImages param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainImages-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_METAL)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageMetalKHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageMetalKHR* new_swapchainimagemetalkhr_value = reinterpret_cast<XrSwapchainImageMetalKHR*>(images);
                        if (new_swapchainimagemetalkhr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR) {
                            if (nullptr != new_swapchainimagemetalkhr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateSwapchainImages",
                                                                                objects_info, false, true, &new_swapchainimagemetalkhr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateSwapchainImages param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainImages-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_METAL)
                // Validate that the base-structure XrSwapchainImageBaseHeader is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateSwapchainImages", objects_info,
                                                                true, true, &images[value_images_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSwapchainImages-images-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSwapchainImages",
                                        objects_info,
                                        "Command xrEnumerateSwapchainImages param images is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSwapchainImages(
    XrSwapchain swapchain,
    uint32_t imageCapacityInput,
    uint32_t* imageCountOutput,
    XrSwapchainImageBaseHeader* images) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateSwapchainImages(swapchain, imageCapacityInput, imageCountOutput, images);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSwapchainImages(
    XrSwapchain swapchain,
    uint32_t imageCapacityInput,
    uint32_t* imageCountOutput,
    XrSwapchainImageBaseHeader* images) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSwapchainImages(swapchain, imageCapacityInput, imageCountOutput, images);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSwapchainImages(swapchain, imageCapacityInput, imageCountOutput, images);
}

XrResult GenValidUsageInputsXrAcquireSwapchainImage(
XrSwapchain swapchain,
const XrSwapchainImageAcquireInfo* acquireInfo,
uint32_t* index) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_SWAPCHAIN);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSwapchainHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSwapchain handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrAcquireSwapchainImage-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAcquireSwapchainImage",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrSwapchainImageAcquireInfo is valid
        if (nullptr != acquireInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrAcquireSwapchainImage",
                                                            objects_info, false, true, acquireInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrAcquireSwapchainImage-acquireInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAcquireSwapchainImage",
                                    objects_info,
                                    "Command xrAcquireSwapchainImage param acquireInfo is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == index) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAcquireSwapchainImage-index-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAcquireSwapchainImage", objects_info,
                                "Invalid NULL for uint32_t \"index\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrAcquireSwapchainImage-index-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrAcquireSwapchainImage(
    XrSwapchain swapchain,
    const XrSwapchainImageAcquireInfo* acquireInfo,
    uint32_t* index) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->AcquireSwapchainImage(swapchain, acquireInfo, index);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrAcquireSwapchainImage(
    XrSwapchain swapchain,
    const XrSwapchainImageAcquireInfo* acquireInfo,
    uint32_t* index) {
    XrResult test_result = GenValidUsageInputsXrAcquireSwapchainImage(swapchain, acquireInfo, index);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrAcquireSwapchainImage(swapchain, acquireInfo, index);
}

XrResult GenValidUsageInputsXrWaitSwapchainImage(
XrSwapchain swapchain,
const XrSwapchainImageWaitInfo* waitInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_SWAPCHAIN);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSwapchainHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSwapchain handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrWaitSwapchainImage-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrWaitSwapchainImage",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == waitInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrWaitSwapchainImage-waitInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrWaitSwapchainImage", objects_info,
                                "Invalid NULL for XrSwapchainImageWaitInfo \"waitInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSwapchainImageWaitInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrWaitSwapchainImage", objects_info,
                                                        true, true, waitInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrWaitSwapchainImage-waitInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrWaitSwapchainImage",
                                objects_info,
                                "Command xrWaitSwapchainImage param waitInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrWaitSwapchainImage(
    XrSwapchain swapchain,
    const XrSwapchainImageWaitInfo* waitInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->WaitSwapchainImage(swapchain, waitInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrWaitSwapchainImage(
    XrSwapchain swapchain,
    const XrSwapchainImageWaitInfo* waitInfo) {
    XrResult test_result = GenValidUsageInputsXrWaitSwapchainImage(swapchain, waitInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrWaitSwapchainImage(swapchain, waitInfo);
}

XrResult GenValidUsageInputsXrReleaseSwapchainImage(
XrSwapchain swapchain,
const XrSwapchainImageReleaseInfo* releaseInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_SWAPCHAIN);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSwapchainHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSwapchain handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrReleaseSwapchainImage-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrReleaseSwapchainImage",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrSwapchainImageReleaseInfo is valid
        if (nullptr != releaseInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrReleaseSwapchainImage",
                                                            objects_info, false, true, releaseInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrReleaseSwapchainImage-releaseInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrReleaseSwapchainImage",
                                    objects_info,
                                    "Command xrReleaseSwapchainImage param releaseInfo is invalid");
                return xr_result;
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrReleaseSwapchainImage(
    XrSwapchain swapchain,
    const XrSwapchainImageReleaseInfo* releaseInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ReleaseSwapchainImage(swapchain, releaseInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrReleaseSwapchainImage(
    XrSwapchain swapchain,
    const XrSwapchainImageReleaseInfo* releaseInfo) {
    XrResult test_result = GenValidUsageInputsXrReleaseSwapchainImage(swapchain, releaseInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrReleaseSwapchainImage(swapchain, releaseInfo);
}

XrResult GenValidUsageInputsXrBeginSession(
XrSession session,
const XrSessionBeginInfo* beginInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrBeginSession-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrBeginSession",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == beginInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrBeginSession-beginInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrBeginSession", objects_info,
                                "Invalid NULL for XrSessionBeginInfo \"beginInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSessionBeginInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrBeginSession", objects_info,
                                                        true, true, beginInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrBeginSession-beginInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrBeginSession",
                                objects_info,
                                "Command xrBeginSession param beginInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrBeginSession(
    XrSession session,
    const XrSessionBeginInfo* beginInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->BeginSession(session, beginInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrBeginSession(
    XrSession session,
    const XrSessionBeginInfo* beginInfo) {
    XrResult test_result = GenValidUsageInputsXrBeginSession(session, beginInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrBeginSession(session, beginInfo);
}

XrResult GenValidUsageInputsXrEndSession(
XrSession session) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEndSession-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEndSession",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEndSession(
    XrSession session) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EndSession(session);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEndSession(
    XrSession session) {
    XrResult test_result = GenValidUsageInputsXrEndSession(session);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEndSession(session);
}

XrResult GenValidUsageInputsXrRequestExitSession(
XrSession session) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrRequestExitSession-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestExitSession",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestExitSession(
    XrSession session) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestExitSession(session);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestExitSession(
    XrSession session) {
    XrResult test_result = GenValidUsageInputsXrRequestExitSession(session);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestExitSession(session);
}

XrResult GenValidUsageInputsXrWaitFrame(
XrSession session,
const XrFrameWaitInfo* frameWaitInfo,
XrFrameState* frameState) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrWaitFrame-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrWaitFrame",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrFrameWaitInfo is valid
        if (nullptr != frameWaitInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrWaitFrame",
                                                            objects_info, false, true, frameWaitInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrWaitFrame-frameWaitInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrWaitFrame",
                                    objects_info,
                                    "Command xrWaitFrame param frameWaitInfo is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == frameState) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrWaitFrame-frameState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrWaitFrame", objects_info,
                                "Invalid NULL for XrFrameState \"frameState\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFrameState is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrWaitFrame", objects_info,
                                                        false, true, frameState);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrWaitFrame-frameState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrWaitFrame",
                                objects_info,
                                "Command xrWaitFrame param frameState is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrWaitFrame(
    XrSession session,
    const XrFrameWaitInfo* frameWaitInfo,
    XrFrameState* frameState) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->WaitFrame(session, frameWaitInfo, frameState);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrWaitFrame(
    XrSession session,
    const XrFrameWaitInfo* frameWaitInfo,
    XrFrameState* frameState) {
    XrResult test_result = GenValidUsageInputsXrWaitFrame(session, frameWaitInfo, frameState);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrWaitFrame(session, frameWaitInfo, frameState);
}

XrResult GenValidUsageInputsXrBeginFrame(
XrSession session,
const XrFrameBeginInfo* frameBeginInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrBeginFrame-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrBeginFrame",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrFrameBeginInfo is valid
        if (nullptr != frameBeginInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrBeginFrame",
                                                            objects_info, false, true, frameBeginInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrBeginFrame-frameBeginInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrBeginFrame",
                                    objects_info,
                                    "Command xrBeginFrame param frameBeginInfo is invalid");
                return xr_result;
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrBeginFrame(
    XrSession session,
    const XrFrameBeginInfo* frameBeginInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->BeginFrame(session, frameBeginInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrBeginFrame(
    XrSession session,
    const XrFrameBeginInfo* frameBeginInfo) {
    XrResult test_result = GenValidUsageInputsXrBeginFrame(session, frameBeginInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrBeginFrame(session, frameBeginInfo);
}

XrResult GenValidUsageInputsXrEndFrame(
XrSession session,
const XrFrameEndInfo* frameEndInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEndFrame-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEndFrame",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == frameEndInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEndFrame-frameEndInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEndFrame", objects_info,
                                "Invalid NULL for XrFrameEndInfo \"frameEndInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFrameEndInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrEndFrame", objects_info,
                                                        true, true, frameEndInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEndFrame-frameEndInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEndFrame",
                                objects_info,
                                "Command xrEndFrame param frameEndInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEndFrame(
    XrSession session,
    const XrFrameEndInfo* frameEndInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EndFrame(session, frameEndInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEndFrame(
    XrSession session,
    const XrFrameEndInfo* frameEndInfo) {
    XrResult test_result = GenValidUsageInputsXrEndFrame(session, frameEndInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEndFrame(session, frameEndInfo);
}

XrResult GenValidUsageInputsXrLocateViews(
XrSession session,
const XrViewLocateInfo* viewLocateInfo,
XrViewState* viewState,
uint32_t viewCapacityInput,
uint32_t* viewCountOutput,
XrView* views) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrLocateViews-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateViews",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == viewLocateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateViews-viewLocateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateViews", objects_info,
                                "Invalid NULL for XrViewLocateInfo \"viewLocateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrViewLocateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateViews", objects_info,
                                                        true, true, viewLocateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateViews-viewLocateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateViews",
                                objects_info,
                                "Command xrLocateViews param viewLocateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == viewState) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateViews-viewState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateViews", objects_info,
                                "Invalid NULL for XrViewState \"viewState\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrViewState is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateViews", objects_info,
                                                        false, true, viewState);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateViews-viewState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateViews",
                                objects_info,
                                "Command xrLocateViews param viewState is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when viewCapacityInput is non-zero
        if (0 != viewCapacityInput && nullptr == views) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateViews-views-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateViews",
                                objects_info,
                                "Command xrLocateViews param views is NULL, but viewCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == viewCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateViews-viewCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateViews", objects_info,
                                "Invalid NULL for uint32_t \"viewCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrLocateViews-viewCountOutput-parameter" type
        if (views) {
            for (uint32_t value_views_inc = 0; value_views_inc < viewCapacityInput; ++value_views_inc) {
                // Validate that the structure XrView is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrLocateViews", objects_info,
                                                                true, true, &views[value_views_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrLocateViews-views-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateViews",
                                        objects_info,
                                        "Command xrLocateViews param views is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLocateViews(
    XrSession session,
    const XrViewLocateInfo* viewLocateInfo,
    XrViewState* viewState,
    uint32_t viewCapacityInput,
    uint32_t* viewCountOutput,
    XrView* views) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LocateViews(session, viewLocateInfo, viewState, viewCapacityInput, viewCountOutput, views);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLocateViews(
    XrSession session,
    const XrViewLocateInfo* viewLocateInfo,
    XrViewState* viewState,
    uint32_t viewCapacityInput,
    uint32_t* viewCountOutput,
    XrView* views) {
    XrResult test_result = GenValidUsageInputsXrLocateViews(session, viewLocateInfo, viewState, viewCapacityInput, viewCountOutput, views);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLocateViews(session, viewLocateInfo, viewState, viewCapacityInput, viewCountOutput, views);
}

XrResult GenValidUsageInputsXrStringToPath(
XrInstance instance,
const char* pathString,
XrPath* path) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrStringToPath-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStringToPath",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == pathString) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStringToPath-pathString-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStringToPath", objects_info,
                                "Invalid NULL for char \"pathString\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrStringToPath-pathString-parameter" null-termination
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == path) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStringToPath-path-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStringToPath", objects_info,
                                "Invalid NULL for XrPath \"path\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrStringToPath-path-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStringToPath(
    XrInstance instance,
    const char* pathString,
    XrPath* path) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->StringToPath(instance, pathString, path);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStringToPath(
    XrInstance instance,
    const char* pathString,
    XrPath* path) {
    XrResult test_result = GenValidUsageInputsXrStringToPath(instance, pathString, path);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStringToPath(instance, pathString, path);
}

XrResult GenValidUsageInputsXrPathToString(
XrInstance instance,
XrPath path,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrPathToString-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPathToString",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPathToString-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPathToString",
                                objects_info,
                                "Command xrPathToString param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPathToString-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPathToString", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrPathToString-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrPathToString-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPathToString(
    XrInstance instance,
    XrPath path,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->PathToString(instance, path, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPathToString(
    XrInstance instance,
    XrPath path,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult test_result = GenValidUsageInputsXrPathToString(instance, path, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPathToString(instance, path, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrCreateActionSet(
XrInstance instance,
const XrActionSetCreateInfo* createInfo,
XrActionSet* actionSet) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrCreateActionSet-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateActionSet",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateActionSet-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateActionSet", objects_info,
                                "Invalid NULL for XrActionSetCreateInfo \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionSetCreateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateActionSet", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateActionSet-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateActionSet",
                                objects_info,
                                "Command xrCreateActionSet param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == actionSet) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateActionSet-actionSet-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateActionSet", objects_info,
                                "Invalid NULL for XrActionSet \"actionSet\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateActionSet(
    XrInstance instance,
    const XrActionSetCreateInfo* createInfo,
    XrActionSet* actionSet) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->CreateActionSet(instance, createInfo, actionSet);
        if (XR_SUCCESS == result && nullptr != actionSet) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_INSTANCE;
            handle_info->direct_parent_handle = MakeHandleGeneric(instance);
            g_actionset_info.insert(*actionSet, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateActionSet(
    XrInstance instance,
    const XrActionSetCreateInfo* createInfo,
    XrActionSet* actionSet) {
    XrResult test_result = GenValidUsageInputsXrCreateActionSet(instance, createInfo, actionSet);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateActionSet(instance, createInfo, actionSet);
}

XrResult GenValidUsageInputsXrDestroyActionSet(
XrActionSet actionSet) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(actionSet, XR_OBJECT_TYPE_ACTION_SET);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrActionSetHandle(&actionSet);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrActionSet handle \"actionSet\" ";
                oss << HandleToHexString(actionSet);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyActionSet-actionSet-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyActionSet",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_actionset_info.getWithInstanceInfo(actionSet);
        GenValidUsageXrHandleInfo *gen_actionset_info = info_with_instance.first;
        (void)gen_actionset_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyActionSet(
    XrActionSet actionSet) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_actionset_info.getWithInstanceInfo(actionSet);
        GenValidUsageXrHandleInfo *gen_actionset_info = info_with_instance.first;
        (void)gen_actionset_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyActionSet(actionSet);
        if (XR_SUCCEEDED(result)) {
            g_actionset_info.erase(actionSet);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyActionSet(
    XrActionSet actionSet) {
    XrResult test_result = GenValidUsageInputsXrDestroyActionSet(actionSet);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyActionSet(actionSet);
}

XrResult GenValidUsageInputsXrCreateAction(
XrActionSet actionSet,
const XrActionCreateInfo* createInfo,
XrAction* action) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(actionSet, XR_OBJECT_TYPE_ACTION_SET);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrActionSetHandle(&actionSet);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrActionSet handle \"actionSet\" ";
                oss << HandleToHexString(actionSet);
                CoreValidLogMessage(nullptr, "VUID-xrCreateAction-actionSet-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAction",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_actionset_info.getWithInstanceInfo(actionSet);
        GenValidUsageXrHandleInfo *gen_actionset_info = info_with_instance.first;
        (void)gen_actionset_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateAction-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAction", objects_info,
                                "Invalid NULL for XrActionCreateInfo \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionCreateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateAction", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateAction-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAction",
                                objects_info,
                                "Command xrCreateAction param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == action) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateAction-action-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAction", objects_info,
                                "Invalid NULL for XrAction \"action\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateAction(
    XrActionSet actionSet,
    const XrActionCreateInfo* createInfo,
    XrAction* action) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_actionset_info.getWithInstanceInfo(actionSet);
        GenValidUsageXrHandleInfo *gen_actionset_info = info_with_instance.first;
        (void)gen_actionset_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateAction(actionSet, createInfo, action);
        if (XR_SUCCESS == result && nullptr != action) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_ACTION_SET;
            handle_info->direct_parent_handle = MakeHandleGeneric(actionSet);
            g_action_info.insert(*action, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateAction(
    XrActionSet actionSet,
    const XrActionCreateInfo* createInfo,
    XrAction* action) {
    XrResult test_result = GenValidUsageInputsXrCreateAction(actionSet, createInfo, action);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateAction(actionSet, createInfo, action);
}

XrResult GenValidUsageInputsXrDestroyAction(
XrAction action) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(action, XR_OBJECT_TYPE_ACTION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrActionHandle(&action);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrAction handle \"action\" ";
                oss << HandleToHexString(action);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyAction-action-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyAction",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_action_info.getWithInstanceInfo(action);
        GenValidUsageXrHandleInfo *gen_action_info = info_with_instance.first;
        (void)gen_action_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyAction(
    XrAction action) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_action_info.getWithInstanceInfo(action);
        GenValidUsageXrHandleInfo *gen_action_info = info_with_instance.first;
        (void)gen_action_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyAction(action);
        if (XR_SUCCEEDED(result)) {
            g_action_info.erase(action);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyAction(
    XrAction action) {
    XrResult test_result = GenValidUsageInputsXrDestroyAction(action);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyAction(action);
}

XrResult GenValidUsageInputsXrSuggestInteractionProfileBindings(
XrInstance instance,
const XrInteractionProfileSuggestedBinding* suggestedBindings) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrSuggestInteractionProfileBindings-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSuggestInteractionProfileBindings",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == suggestedBindings) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSuggestInteractionProfileBindings-suggestedBindings-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSuggestInteractionProfileBindings", objects_info,
                                "Invalid NULL for XrInteractionProfileSuggestedBinding \"suggestedBindings\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrInteractionProfileSuggestedBinding is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSuggestInteractionProfileBindings", objects_info,
                                                        true, true, suggestedBindings);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSuggestInteractionProfileBindings-suggestedBindings-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSuggestInteractionProfileBindings",
                                objects_info,
                                "Command xrSuggestInteractionProfileBindings param suggestedBindings is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSuggestInteractionProfileBindings(
    XrInstance instance,
    const XrInteractionProfileSuggestedBinding* suggestedBindings) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->SuggestInteractionProfileBindings(instance, suggestedBindings);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSuggestInteractionProfileBindings(
    XrInstance instance,
    const XrInteractionProfileSuggestedBinding* suggestedBindings) {
    XrResult test_result = GenValidUsageInputsXrSuggestInteractionProfileBindings(instance, suggestedBindings);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSuggestInteractionProfileBindings(instance, suggestedBindings);
}

XrResult GenValidUsageInputsXrAttachSessionActionSets(
XrSession session,
const XrSessionActionSetsAttachInfo* attachInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrAttachSessionActionSets-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAttachSessionActionSets",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == attachInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAttachSessionActionSets-attachInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAttachSessionActionSets", objects_info,
                                "Invalid NULL for XrSessionActionSetsAttachInfo \"attachInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSessionActionSetsAttachInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrAttachSessionActionSets", objects_info,
                                                        true, true, attachInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAttachSessionActionSets-attachInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAttachSessionActionSets",
                                objects_info,
                                "Command xrAttachSessionActionSets param attachInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrAttachSessionActionSets(
    XrSession session,
    const XrSessionActionSetsAttachInfo* attachInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->AttachSessionActionSets(session, attachInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrAttachSessionActionSets(
    XrSession session,
    const XrSessionActionSetsAttachInfo* attachInfo) {
    XrResult test_result = GenValidUsageInputsXrAttachSessionActionSets(session, attachInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrAttachSessionActionSets(session, attachInfo);
}

XrResult GenValidUsageInputsXrGetCurrentInteractionProfile(
XrSession session,
XrPath topLevelUserPath,
XrInteractionProfileState* interactionProfile) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetCurrentInteractionProfile-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetCurrentInteractionProfile",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == interactionProfile) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetCurrentInteractionProfile-interactionProfile-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetCurrentInteractionProfile", objects_info,
                                "Invalid NULL for XrInteractionProfileState \"interactionProfile\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrInteractionProfileState is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetCurrentInteractionProfile", objects_info,
                                                        false, true, interactionProfile);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetCurrentInteractionProfile-interactionProfile-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetCurrentInteractionProfile",
                                objects_info,
                                "Command xrGetCurrentInteractionProfile param interactionProfile is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetCurrentInteractionProfile(
    XrSession session,
    XrPath topLevelUserPath,
    XrInteractionProfileState* interactionProfile) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetCurrentInteractionProfile(session, topLevelUserPath, interactionProfile);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetCurrentInteractionProfile(
    XrSession session,
    XrPath topLevelUserPath,
    XrInteractionProfileState* interactionProfile) {
    XrResult test_result = GenValidUsageInputsXrGetCurrentInteractionProfile(session, topLevelUserPath, interactionProfile);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetCurrentInteractionProfile(session, topLevelUserPath, interactionProfile);
}

XrResult GenValidUsageInputsXrGetActionStateBoolean(
XrSession session,
const XrActionStateGetInfo* getInfo,
XrActionStateBoolean* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetActionStateBoolean-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateBoolean",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateBoolean-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateBoolean", objects_info,
                                "Invalid NULL for XrActionStateGetInfo \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionStateGetInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetActionStateBoolean", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateBoolean-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateBoolean",
                                objects_info,
                                "Command xrGetActionStateBoolean param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateBoolean-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateBoolean", objects_info,
                                "Invalid NULL for XrActionStateBoolean \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionStateBoolean is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetActionStateBoolean", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateBoolean-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateBoolean",
                                objects_info,
                                "Command xrGetActionStateBoolean param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetActionStateBoolean(
    XrSession session,
    const XrActionStateGetInfo* getInfo,
    XrActionStateBoolean* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetActionStateBoolean(session, getInfo, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetActionStateBoolean(
    XrSession session,
    const XrActionStateGetInfo* getInfo,
    XrActionStateBoolean* state) {
    XrResult test_result = GenValidUsageInputsXrGetActionStateBoolean(session, getInfo, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetActionStateBoolean(session, getInfo, state);
}

XrResult GenValidUsageInputsXrGetActionStateFloat(
XrSession session,
const XrActionStateGetInfo* getInfo,
XrActionStateFloat* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetActionStateFloat-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateFloat",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateFloat-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateFloat", objects_info,
                                "Invalid NULL for XrActionStateGetInfo \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionStateGetInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetActionStateFloat", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateFloat-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateFloat",
                                objects_info,
                                "Command xrGetActionStateFloat param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateFloat-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateFloat", objects_info,
                                "Invalid NULL for XrActionStateFloat \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionStateFloat is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetActionStateFloat", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateFloat-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateFloat",
                                objects_info,
                                "Command xrGetActionStateFloat param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetActionStateFloat(
    XrSession session,
    const XrActionStateGetInfo* getInfo,
    XrActionStateFloat* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetActionStateFloat(session, getInfo, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetActionStateFloat(
    XrSession session,
    const XrActionStateGetInfo* getInfo,
    XrActionStateFloat* state) {
    XrResult test_result = GenValidUsageInputsXrGetActionStateFloat(session, getInfo, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetActionStateFloat(session, getInfo, state);
}

XrResult GenValidUsageInputsXrGetActionStateVector2f(
XrSession session,
const XrActionStateGetInfo* getInfo,
XrActionStateVector2f* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetActionStateVector2f-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateVector2f",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateVector2f-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateVector2f", objects_info,
                                "Invalid NULL for XrActionStateGetInfo \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionStateGetInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetActionStateVector2f", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateVector2f-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateVector2f",
                                objects_info,
                                "Command xrGetActionStateVector2f param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateVector2f-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateVector2f", objects_info,
                                "Invalid NULL for XrActionStateVector2f \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionStateVector2f is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetActionStateVector2f", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStateVector2f-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStateVector2f",
                                objects_info,
                                "Command xrGetActionStateVector2f param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetActionStateVector2f(
    XrSession session,
    const XrActionStateGetInfo* getInfo,
    XrActionStateVector2f* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetActionStateVector2f(session, getInfo, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetActionStateVector2f(
    XrSession session,
    const XrActionStateGetInfo* getInfo,
    XrActionStateVector2f* state) {
    XrResult test_result = GenValidUsageInputsXrGetActionStateVector2f(session, getInfo, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetActionStateVector2f(session, getInfo, state);
}

XrResult GenValidUsageInputsXrGetActionStatePose(
XrSession session,
const XrActionStateGetInfo* getInfo,
XrActionStatePose* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetActionStatePose-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStatePose",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStatePose-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStatePose", objects_info,
                                "Invalid NULL for XrActionStateGetInfo \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionStateGetInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetActionStatePose", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStatePose-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStatePose",
                                objects_info,
                                "Command xrGetActionStatePose param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStatePose-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStatePose", objects_info,
                                "Invalid NULL for XrActionStatePose \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionStatePose is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetActionStatePose", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetActionStatePose-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetActionStatePose",
                                objects_info,
                                "Command xrGetActionStatePose param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetActionStatePose(
    XrSession session,
    const XrActionStateGetInfo* getInfo,
    XrActionStatePose* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetActionStatePose(session, getInfo, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetActionStatePose(
    XrSession session,
    const XrActionStateGetInfo* getInfo,
    XrActionStatePose* state) {
    XrResult test_result = GenValidUsageInputsXrGetActionStatePose(session, getInfo, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetActionStatePose(session, getInfo, state);
}

XrResult GenValidUsageInputsXrSyncActions(
XrSession session,
const XrActionsSyncInfo* syncInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSyncActions-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSyncActions",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == syncInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSyncActions-syncInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSyncActions", objects_info,
                                "Invalid NULL for XrActionsSyncInfo \"syncInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrActionsSyncInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSyncActions", objects_info,
                                                        true, true, syncInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSyncActions-syncInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSyncActions",
                                objects_info,
                                "Command xrSyncActions param syncInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSyncActions(
    XrSession session,
    const XrActionsSyncInfo* syncInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SyncActions(session, syncInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSyncActions(
    XrSession session,
    const XrActionsSyncInfo* syncInfo) {
    XrResult test_result = GenValidUsageInputsXrSyncActions(session, syncInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSyncActions(session, syncInfo);
}

XrResult GenValidUsageInputsXrEnumerateBoundSourcesForAction(
XrSession session,
const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
uint32_t sourceCapacityInput,
uint32_t* sourceCountOutput,
XrPath* sources) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateBoundSourcesForAction-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateBoundSourcesForAction",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == enumerateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateBoundSourcesForAction-enumerateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateBoundSourcesForAction", objects_info,
                                "Invalid NULL for XrBoundSourcesForActionEnumerateInfo \"enumerateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBoundSourcesForActionEnumerateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateBoundSourcesForAction", objects_info,
                                                        true, true, enumerateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateBoundSourcesForAction-enumerateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateBoundSourcesForAction",
                                objects_info,
                                "Command xrEnumerateBoundSourcesForAction param enumerateInfo is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when sourceCapacityInput is non-zero
        if (0 != sourceCapacityInput && nullptr == sources) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateBoundSourcesForAction-sources-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateBoundSourcesForAction",
                                objects_info,
                                "Command xrEnumerateBoundSourcesForAction param sources is NULL, but sourceCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == sourceCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateBoundSourcesForAction-sourceCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateBoundSourcesForAction", objects_info,
                                "Invalid NULL for uint32_t \"sourceCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateBoundSourcesForAction-sourceCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrEnumerateBoundSourcesForAction-sources-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateBoundSourcesForAction(
    XrSession session,
    const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
    uint32_t sourceCapacityInput,
    uint32_t* sourceCountOutput,
    XrPath* sources) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateBoundSourcesForAction(session, enumerateInfo, sourceCapacityInput, sourceCountOutput, sources);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateBoundSourcesForAction(
    XrSession session,
    const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
    uint32_t sourceCapacityInput,
    uint32_t* sourceCountOutput,
    XrPath* sources) {
    XrResult test_result = GenValidUsageInputsXrEnumerateBoundSourcesForAction(session, enumerateInfo, sourceCapacityInput, sourceCountOutput, sources);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateBoundSourcesForAction(session, enumerateInfo, sourceCapacityInput, sourceCountOutput, sources);
}

XrResult GenValidUsageInputsXrGetInputSourceLocalizedName(
XrSession session,
const XrInputSourceLocalizedNameGetInfo* getInfo,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetInputSourceLocalizedName-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInputSourceLocalizedName",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetInputSourceLocalizedName-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInputSourceLocalizedName", objects_info,
                                "Invalid NULL for XrInputSourceLocalizedNameGetInfo \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrInputSourceLocalizedNameGetInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetInputSourceLocalizedName", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetInputSourceLocalizedName-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInputSourceLocalizedName",
                                objects_info,
                                "Command xrGetInputSourceLocalizedName param getInfo is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetInputSourceLocalizedName-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInputSourceLocalizedName",
                                objects_info,
                                "Command xrGetInputSourceLocalizedName param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetInputSourceLocalizedName-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInputSourceLocalizedName", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetInputSourceLocalizedName-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetInputSourceLocalizedName-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetInputSourceLocalizedName(
    XrSession session,
    const XrInputSourceLocalizedNameGetInfo* getInfo,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetInputSourceLocalizedName(session, getInfo, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetInputSourceLocalizedName(
    XrSession session,
    const XrInputSourceLocalizedNameGetInfo* getInfo,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetInputSourceLocalizedName(session, getInfo, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetInputSourceLocalizedName(session, getInfo, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrApplyHapticFeedback(
XrSession session,
const XrHapticActionInfo* hapticActionInfo,
const XrHapticBaseHeader* hapticFeedback) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrApplyHapticFeedback-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyHapticFeedback",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == hapticActionInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrApplyHapticFeedback-hapticActionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyHapticFeedback", objects_info,
                                "Invalid NULL for XrHapticActionInfo \"hapticActionInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHapticActionInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrApplyHapticFeedback", objects_info,
                                                        true, true, hapticActionInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrApplyHapticFeedback-hapticActionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyHapticFeedback",
                                objects_info,
                                "Command xrApplyHapticFeedback param hapticActionInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == hapticFeedback) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrApplyHapticFeedback-hapticFeedback-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyHapticFeedback", objects_info,
                                "Invalid NULL for XrHapticBaseHeader \"hapticFeedback\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate if XrHapticBaseHeader is a child structure of type XrHapticVibration and it is valid
        {
            const XrHapticVibration* new_hapticvibration_value = reinterpret_cast<const XrHapticVibration*>(hapticFeedback);
            if (new_hapticvibration_value->type == XR_TYPE_HAPTIC_VIBRATION) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrApplyHapticFeedback",
                                                                objects_info,false, true, new_hapticvibration_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrApplyHapticFeedback param hapticFeedback";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrApplyHapticFeedback-hapticFeedback-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyHapticFeedback",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
        // Validate if XrHapticBaseHeader is a child structure of type XrHapticAmplitudeEnvelopeVibrationFB and it is valid
        {
            const XrHapticAmplitudeEnvelopeVibrationFB* new_hapticamplitudeenvelopevibrationfb_value = reinterpret_cast<const XrHapticAmplitudeEnvelopeVibrationFB*>(hapticFeedback);
            if (new_hapticamplitudeenvelopevibrationfb_value->type == XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrApplyHapticFeedback",
                                                                objects_info,false, true, new_hapticamplitudeenvelopevibrationfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrApplyHapticFeedback param hapticFeedback";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrApplyHapticFeedback-hapticFeedback-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyHapticFeedback",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
        // Validate if XrHapticBaseHeader is a child structure of type XrHapticPcmVibrationFB and it is valid
        {
            const XrHapticPcmVibrationFB* new_hapticpcmvibrationfb_value = reinterpret_cast<const XrHapticPcmVibrationFB*>(hapticFeedback);
            if (new_hapticpcmvibrationfb_value->type == XR_TYPE_HAPTIC_PCM_VIBRATION_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrApplyHapticFeedback",
                                                                objects_info,false, true, new_hapticpcmvibrationfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrApplyHapticFeedback param hapticFeedback";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrApplyHapticFeedback-hapticFeedback-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyHapticFeedback",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
        // Validate if XrHapticBaseHeader is a child structure of type XrHapticParametricVibrationEXT and it is valid
        {
            const XrHapticParametricVibrationEXT* new_hapticparametricvibrationext_value = reinterpret_cast<const XrHapticParametricVibrationEXT*>(hapticFeedback);
            if (new_hapticparametricvibrationext_value->type == XR_TYPE_HAPTIC_PARAMETRIC_VIBRATION_EXT) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrApplyHapticFeedback",
                                                                objects_info,false, true, new_hapticparametricvibrationext_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrApplyHapticFeedback param hapticFeedback";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrApplyHapticFeedback-hapticFeedback-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyHapticFeedback",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
        // Validate that the base-structure XrHapticBaseHeader is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrApplyHapticFeedback", objects_info,
                                                        true, true, hapticFeedback);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrApplyHapticFeedback-hapticFeedback-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyHapticFeedback",
                                objects_info,
                                "Command xrApplyHapticFeedback param hapticFeedback is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrApplyHapticFeedback(
    XrSession session,
    const XrHapticActionInfo* hapticActionInfo,
    const XrHapticBaseHeader* hapticFeedback) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ApplyHapticFeedback(session, hapticActionInfo, hapticFeedback);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrApplyHapticFeedback(
    XrSession session,
    const XrHapticActionInfo* hapticActionInfo,
    const XrHapticBaseHeader* hapticFeedback) {
    XrResult test_result = GenValidUsageInputsXrApplyHapticFeedback(session, hapticActionInfo, hapticFeedback);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrApplyHapticFeedback(session, hapticActionInfo, hapticFeedback);
}

XrResult GenValidUsageInputsXrStopHapticFeedback(
XrSession session,
const XrHapticActionInfo* hapticActionInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrStopHapticFeedback-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopHapticFeedback",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == hapticActionInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStopHapticFeedback-hapticActionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopHapticFeedback", objects_info,
                                "Invalid NULL for XrHapticActionInfo \"hapticActionInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHapticActionInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrStopHapticFeedback", objects_info,
                                                        true, true, hapticActionInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStopHapticFeedback-hapticActionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopHapticFeedback",
                                objects_info,
                                "Command xrStopHapticFeedback param hapticActionInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStopHapticFeedback(
    XrSession session,
    const XrHapticActionInfo* hapticActionInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StopHapticFeedback(session, hapticActionInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStopHapticFeedback(
    XrSession session,
    const XrHapticActionInfo* hapticActionInfo) {
    XrResult test_result = GenValidUsageInputsXrStopHapticFeedback(session, hapticActionInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStopHapticFeedback(session, hapticActionInfo);
}


// ---- XR_LOADER_VERSION_1_0 extension commands

// ---- Core 1.1 commands
XrResult GenValidUsageInputsXrLocateSpaces(
XrSession session,
const XrSpacesLocateInfo* locateInfo,
XrSpaceLocations* spaceLocations) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrLocateSpaces-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpaces",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpaces-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpaces", objects_info,
                                "Invalid NULL for XrSpacesLocateInfo \"locateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpacesLocateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateSpaces", objects_info,
                                                        true, true, locateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpaces-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpaces",
                                objects_info,
                                "Command xrLocateSpaces param locateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spaceLocations) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpaces-spaceLocations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpaces", objects_info,
                                "Invalid NULL for XrSpaceLocations \"spaceLocations\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceLocations is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateSpaces", objects_info,
                                                        false, true, spaceLocations);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpaces-spaceLocations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpaces",
                                objects_info,
                                "Command xrLocateSpaces param spaceLocations is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLocateSpaces(
    XrSession session,
    const XrSpacesLocateInfo* locateInfo,
    XrSpaceLocations* spaceLocations) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LocateSpaces(session, locateInfo, spaceLocations);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLocateSpaces(
    XrSession session,
    const XrSpacesLocateInfo* locateInfo,
    XrSpaceLocations* spaceLocations) {
    XrResult test_result = GenValidUsageInputsXrLocateSpaces(session, locateInfo, spaceLocations);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLocateSpaces(session, locateInfo, spaceLocations);
}


// ---- XR_KHR_android_thread_settings extension commands
#if defined(XR_USE_PLATFORM_ANDROID)

XrResult GenValidUsageInputsXrSetAndroidApplicationThreadKHR(
XrSession session,
XrAndroidThreadTypeKHR threadType,
uint32_t threadId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetAndroidApplicationThreadKHR-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetAndroidApplicationThreadKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrAndroidThreadTypeKHR value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrSetAndroidApplicationThreadKHR", "xrSetAndroidApplicationThreadKHR", "threadType", objects_info, threadType)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrAndroidThreadTypeKHR \"threadType\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(threadType));
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetAndroidApplicationThreadKHR-threadType-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrSetAndroidApplicationThreadKHR",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetAndroidApplicationThreadKHR(
    XrSession session,
    XrAndroidThreadTypeKHR threadType,
    uint32_t threadId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetAndroidApplicationThreadKHR(session, threadType, threadId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetAndroidApplicationThreadKHR(
    XrSession session,
    XrAndroidThreadTypeKHR threadType,
    uint32_t threadId) {
    XrResult test_result = GenValidUsageInputsXrSetAndroidApplicationThreadKHR(session, threadType, threadId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetAndroidApplicationThreadKHR(session, threadType, threadId);
}

#endif // defined(XR_USE_PLATFORM_ANDROID)


// ---- XR_KHR_android_surface_swapchain extension commands
#if defined(XR_USE_PLATFORM_ANDROID)

XrResult GenValidUsageInputsXrCreateSwapchainAndroidSurfaceKHR(
XrSession session,
const XrSwapchainCreateInfo* info,
XrSwapchain* swapchain,
jobject* surface) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSwapchainAndroidSurfaceKHR-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSwapchainAndroidSurfaceKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSwapchainAndroidSurfaceKHR-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSwapchainAndroidSurfaceKHR", objects_info,
                                "Invalid NULL for XrSwapchainCreateInfo \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSwapchainCreateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSwapchainAndroidSurfaceKHR", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSwapchainAndroidSurfaceKHR-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSwapchainAndroidSurfaceKHR",
                                objects_info,
                                "Command xrCreateSwapchainAndroidSurfaceKHR param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == swapchain) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSwapchainAndroidSurfaceKHR-swapchain-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSwapchainAndroidSurfaceKHR", objects_info,
                                "Invalid NULL for XrSwapchain \"swapchain\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == surface) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSwapchainAndroidSurfaceKHR-surface-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSwapchainAndroidSurfaceKHR", objects_info,
                                "Invalid NULL for jobject \"surface\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSwapchainAndroidSurfaceKHR-surface-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSwapchainAndroidSurfaceKHR(
    XrSession session,
    const XrSwapchainCreateInfo* info,
    XrSwapchain* swapchain,
    jobject* surface) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSwapchainAndroidSurfaceKHR(session, info, swapchain, surface);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSwapchainAndroidSurfaceKHR(
    XrSession session,
    const XrSwapchainCreateInfo* info,
    XrSwapchain* swapchain,
    jobject* surface) {
    XrResult test_result = GenValidUsageInputsXrCreateSwapchainAndroidSurfaceKHR(session, info, swapchain, surface);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSwapchainAndroidSurfaceKHR(session, info, swapchain, surface);
}

#endif // defined(XR_USE_PLATFORM_ANDROID)


// ---- XR_KHR_opengl_enable extension commands
#if defined(XR_USE_GRAPHICS_API_OPENGL)

XrResult GenValidUsageInputsXrGetOpenGLGraphicsRequirementsKHR(
XrInstance instance,
XrSystemId systemId,
XrGraphicsRequirementsOpenGLKHR* graphicsRequirements) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetOpenGLGraphicsRequirementsKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetOpenGLGraphicsRequirementsKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == graphicsRequirements) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetOpenGLGraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetOpenGLGraphicsRequirementsKHR", objects_info,
                                "Invalid NULL for XrGraphicsRequirementsOpenGLKHR \"graphicsRequirements\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrGraphicsRequirementsOpenGLKHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetOpenGLGraphicsRequirementsKHR", objects_info,
                                                        false, true, graphicsRequirements);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetOpenGLGraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetOpenGLGraphicsRequirementsKHR",
                                objects_info,
                                "Command xrGetOpenGLGraphicsRequirementsKHR param graphicsRequirements is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetOpenGLGraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsOpenGLKHR* graphicsRequirements) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetOpenGLGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetOpenGLGraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsOpenGLKHR* graphicsRequirements) {
    XrResult test_result = GenValidUsageInputsXrGetOpenGLGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetOpenGLGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL)


// ---- XR_KHR_opengl_es_enable extension commands
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)

XrResult GenValidUsageInputsXrGetOpenGLESGraphicsRequirementsKHR(
XrInstance instance,
XrSystemId systemId,
XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetOpenGLESGraphicsRequirementsKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetOpenGLESGraphicsRequirementsKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == graphicsRequirements) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetOpenGLESGraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetOpenGLESGraphicsRequirementsKHR", objects_info,
                                "Invalid NULL for XrGraphicsRequirementsOpenGLESKHR \"graphicsRequirements\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrGraphicsRequirementsOpenGLESKHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetOpenGLESGraphicsRequirementsKHR", objects_info,
                                                        false, true, graphicsRequirements);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetOpenGLESGraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetOpenGLESGraphicsRequirementsKHR",
                                objects_info,
                                "Command xrGetOpenGLESGraphicsRequirementsKHR param graphicsRequirements is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetOpenGLESGraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetOpenGLESGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetOpenGLESGraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements) {
    XrResult test_result = GenValidUsageInputsXrGetOpenGLESGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetOpenGLESGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
}

#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)


// ---- XR_KHR_vulkan_enable extension commands
#if defined(XR_USE_GRAPHICS_API_VULKAN)

XrResult GenValidUsageInputsXrGetVulkanInstanceExtensionsKHR(
XrInstance instance,
XrSystemId systemId,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetVulkanInstanceExtensionsKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanInstanceExtensionsKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanInstanceExtensionsKHR-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanInstanceExtensionsKHR",
                                objects_info,
                                "Command xrGetVulkanInstanceExtensionsKHR param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanInstanceExtensionsKHR-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanInstanceExtensionsKHR", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetVulkanInstanceExtensionsKHR-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetVulkanInstanceExtensionsKHR-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVulkanInstanceExtensionsKHR(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetVulkanInstanceExtensionsKHR(instance, systemId, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVulkanInstanceExtensionsKHR(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetVulkanInstanceExtensionsKHR(instance, systemId, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVulkanInstanceExtensionsKHR(instance, systemId, bufferCapacityInput, bufferCountOutput, buffer);
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)

#if defined(XR_USE_GRAPHICS_API_VULKAN)

XrResult GenValidUsageInputsXrGetVulkanDeviceExtensionsKHR(
XrInstance instance,
XrSystemId systemId,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetVulkanDeviceExtensionsKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanDeviceExtensionsKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanDeviceExtensionsKHR-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanDeviceExtensionsKHR",
                                objects_info,
                                "Command xrGetVulkanDeviceExtensionsKHR param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanDeviceExtensionsKHR-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanDeviceExtensionsKHR", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetVulkanDeviceExtensionsKHR-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetVulkanDeviceExtensionsKHR-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVulkanDeviceExtensionsKHR(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetVulkanDeviceExtensionsKHR(instance, systemId, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVulkanDeviceExtensionsKHR(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetVulkanDeviceExtensionsKHR(instance, systemId, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVulkanDeviceExtensionsKHR(instance, systemId, bufferCapacityInput, bufferCountOutput, buffer);
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)

#if defined(XR_USE_GRAPHICS_API_VULKAN)

XrResult GenValidUsageInputsXrGetVulkanGraphicsDeviceKHR(
XrInstance instance,
XrSystemId systemId,
VkInstance vkInstance,
VkPhysicalDevice* vkPhysicalDevice) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetVulkanGraphicsDeviceKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsDeviceKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == vkPhysicalDevice) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanGraphicsDeviceKHR-vkPhysicalDevice-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsDeviceKHR", objects_info,
                                "Invalid NULL for VkPhysicalDevice \"vkPhysicalDevice\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetVulkanGraphicsDeviceKHR-vkPhysicalDevice-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVulkanGraphicsDeviceKHR(
    XrInstance instance,
    XrSystemId systemId,
    VkInstance vkInstance,
    VkPhysicalDevice* vkPhysicalDevice) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetVulkanGraphicsDeviceKHR(instance, systemId, vkInstance, vkPhysicalDevice);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVulkanGraphicsDeviceKHR(
    XrInstance instance,
    XrSystemId systemId,
    VkInstance vkInstance,
    VkPhysicalDevice* vkPhysicalDevice) {
    XrResult test_result = GenValidUsageInputsXrGetVulkanGraphicsDeviceKHR(instance, systemId, vkInstance, vkPhysicalDevice);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVulkanGraphicsDeviceKHR(instance, systemId, vkInstance, vkPhysicalDevice);
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)

#if defined(XR_USE_GRAPHICS_API_VULKAN)

XrResult GenValidUsageInputsXrGetVulkanGraphicsRequirementsKHR(
XrInstance instance,
XrSystemId systemId,
XrGraphicsRequirementsVulkanKHR* graphicsRequirements) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetVulkanGraphicsRequirementsKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsRequirementsKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == graphicsRequirements) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanGraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsRequirementsKHR", objects_info,
                                "Invalid NULL for XrGraphicsRequirementsVulkanKHR \"graphicsRequirements\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrGraphicsRequirementsVulkanKHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetVulkanGraphicsRequirementsKHR", objects_info,
                                                        false, true, graphicsRequirements);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanGraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsRequirementsKHR",
                                objects_info,
                                "Command xrGetVulkanGraphicsRequirementsKHR param graphicsRequirements is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVulkanGraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsVulkanKHR* graphicsRequirements) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetVulkanGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVulkanGraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsVulkanKHR* graphicsRequirements) {
    XrResult test_result = GenValidUsageInputsXrGetVulkanGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVulkanGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)


// ---- XR_KHR_D3D11_enable extension commands
#if defined(XR_USE_GRAPHICS_API_D3D11)

XrResult GenValidUsageInputsXrGetD3D11GraphicsRequirementsKHR(
XrInstance instance,
XrSystemId systemId,
XrGraphicsRequirementsD3D11KHR* graphicsRequirements) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetD3D11GraphicsRequirementsKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetD3D11GraphicsRequirementsKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == graphicsRequirements) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetD3D11GraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetD3D11GraphicsRequirementsKHR", objects_info,
                                "Invalid NULL for XrGraphicsRequirementsD3D11KHR \"graphicsRequirements\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrGraphicsRequirementsD3D11KHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetD3D11GraphicsRequirementsKHR", objects_info,
                                                        false, true, graphicsRequirements);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetD3D11GraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetD3D11GraphicsRequirementsKHR",
                                objects_info,
                                "Command xrGetD3D11GraphicsRequirementsKHR param graphicsRequirements is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetD3D11GraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsD3D11KHR* graphicsRequirements) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetD3D11GraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetD3D11GraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsD3D11KHR* graphicsRequirements) {
    XrResult test_result = GenValidUsageInputsXrGetD3D11GraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetD3D11GraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
}

#endif // defined(XR_USE_GRAPHICS_API_D3D11)


// ---- XR_KHR_D3D12_enable extension commands
#if defined(XR_USE_GRAPHICS_API_D3D12)

XrResult GenValidUsageInputsXrGetD3D12GraphicsRequirementsKHR(
XrInstance instance,
XrSystemId systemId,
XrGraphicsRequirementsD3D12KHR* graphicsRequirements) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetD3D12GraphicsRequirementsKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetD3D12GraphicsRequirementsKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == graphicsRequirements) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetD3D12GraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetD3D12GraphicsRequirementsKHR", objects_info,
                                "Invalid NULL for XrGraphicsRequirementsD3D12KHR \"graphicsRequirements\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrGraphicsRequirementsD3D12KHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetD3D12GraphicsRequirementsKHR", objects_info,
                                                        false, true, graphicsRequirements);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetD3D12GraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetD3D12GraphicsRequirementsKHR",
                                objects_info,
                                "Command xrGetD3D12GraphicsRequirementsKHR param graphicsRequirements is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetD3D12GraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsD3D12KHR* graphicsRequirements) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetD3D12GraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetD3D12GraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsD3D12KHR* graphicsRequirements) {
    XrResult test_result = GenValidUsageInputsXrGetD3D12GraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetD3D12GraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
}

#endif // defined(XR_USE_GRAPHICS_API_D3D12)


// ---- XR_KHR_metal_enable extension commands
#if defined(XR_USE_GRAPHICS_API_METAL)

XrResult GenValidUsageInputsXrGetMetalGraphicsRequirementsKHR(
XrInstance instance,
XrSystemId systemId,
XrGraphicsRequirementsMetalKHR* graphicsRequirements) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetMetalGraphicsRequirementsKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMetalGraphicsRequirementsKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == graphicsRequirements) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMetalGraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMetalGraphicsRequirementsKHR", objects_info,
                                "Invalid NULL for XrGraphicsRequirementsMetalKHR \"graphicsRequirements\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrGraphicsRequirementsMetalKHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetMetalGraphicsRequirementsKHR", objects_info,
                                                        false, true, graphicsRequirements);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMetalGraphicsRequirementsKHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMetalGraphicsRequirementsKHR",
                                objects_info,
                                "Command xrGetMetalGraphicsRequirementsKHR param graphicsRequirements is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetMetalGraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsMetalKHR* graphicsRequirements) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetMetalGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetMetalGraphicsRequirementsKHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsMetalKHR* graphicsRequirements) {
    XrResult test_result = GenValidUsageInputsXrGetMetalGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetMetalGraphicsRequirementsKHR(instance, systemId, graphicsRequirements);
}

#endif // defined(XR_USE_GRAPHICS_API_METAL)


// ---- XR_KHR_visibility_mask extension commands
XrResult GenValidUsageInputsXrGetVisibilityMaskKHR(
XrSession session,
XrViewConfigurationType viewConfigurationType,
uint32_t viewIndex,
XrVisibilityMaskTypeKHR visibilityMaskType,
XrVisibilityMaskKHR* visibilityMask) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetVisibilityMaskKHR-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVisibilityMaskKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrViewConfigurationType value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetVisibilityMaskKHR", "xrGetVisibilityMaskKHR", "viewConfigurationType", objects_info, viewConfigurationType)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(viewConfigurationType));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVisibilityMaskKHR-viewConfigurationType-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetVisibilityMaskKHR",
                                objects_info, oss_enum.str());
        }
        // Make sure the enum type XrVisibilityMaskTypeKHR value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetVisibilityMaskKHR", "xrGetVisibilityMaskKHR", "visibilityMaskType", objects_info, visibilityMaskType)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrVisibilityMaskTypeKHR \"visibilityMaskType\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(visibilityMaskType));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVisibilityMaskKHR-visibilityMaskType-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetVisibilityMaskKHR",
                                objects_info, oss_enum.str());
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == visibilityMask) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVisibilityMaskKHR-visibilityMask-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVisibilityMaskKHR", objects_info,
                                "Invalid NULL for XrVisibilityMaskKHR \"visibilityMask\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVisibilityMaskKHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetVisibilityMaskKHR", objects_info,
                                                        false, true, visibilityMask);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVisibilityMaskKHR-visibilityMask-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVisibilityMaskKHR",
                                objects_info,
                                "Command xrGetVisibilityMaskKHR param visibilityMask is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVisibilityMaskKHR(
    XrSession session,
    XrViewConfigurationType viewConfigurationType,
    uint32_t viewIndex,
    XrVisibilityMaskTypeKHR visibilityMaskType,
    XrVisibilityMaskKHR* visibilityMask) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetVisibilityMaskKHR(session, viewConfigurationType, viewIndex, visibilityMaskType, visibilityMask);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVisibilityMaskKHR(
    XrSession session,
    XrViewConfigurationType viewConfigurationType,
    uint32_t viewIndex,
    XrVisibilityMaskTypeKHR visibilityMaskType,
    XrVisibilityMaskKHR* visibilityMask) {
    XrResult test_result = GenValidUsageInputsXrGetVisibilityMaskKHR(session, viewConfigurationType, viewIndex, visibilityMaskType, visibilityMask);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVisibilityMaskKHR(session, viewConfigurationType, viewIndex, visibilityMaskType, visibilityMask);
}


// ---- XR_KHR_win32_convert_performance_counter_time extension commands
#if defined(XR_USE_PLATFORM_WIN32)

XrResult GenValidUsageInputsXrConvertWin32PerformanceCounterToTimeKHR(
XrInstance instance,
const LARGE_INTEGER* performanceCounter,
XrTime* time) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrConvertWin32PerformanceCounterToTimeKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertWin32PerformanceCounterToTimeKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == performanceCounter) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrConvertWin32PerformanceCounterToTimeKHR-performanceCounter-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertWin32PerformanceCounterToTimeKHR", objects_info,
                                "Invalid NULL for LARGE_INTEGER \"performanceCounter\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrConvertWin32PerformanceCounterToTimeKHR-performanceCounter-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == time) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrConvertWin32PerformanceCounterToTimeKHR-time-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertWin32PerformanceCounterToTimeKHR", objects_info,
                                "Invalid NULL for XrTime \"time\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrConvertWin32PerformanceCounterToTimeKHR-time-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrConvertWin32PerformanceCounterToTimeKHR(
    XrInstance instance,
    const LARGE_INTEGER* performanceCounter,
    XrTime* time) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->ConvertWin32PerformanceCounterToTimeKHR(instance, performanceCounter, time);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrConvertWin32PerformanceCounterToTimeKHR(
    XrInstance instance,
    const LARGE_INTEGER* performanceCounter,
    XrTime* time) {
    XrResult test_result = GenValidUsageInputsXrConvertWin32PerformanceCounterToTimeKHR(instance, performanceCounter, time);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrConvertWin32PerformanceCounterToTimeKHR(instance, performanceCounter, time);
}

#endif // defined(XR_USE_PLATFORM_WIN32)

#if defined(XR_USE_PLATFORM_WIN32)

XrResult GenValidUsageInputsXrConvertTimeToWin32PerformanceCounterKHR(
XrInstance instance,
XrTime time,
LARGE_INTEGER* performanceCounter) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrConvertTimeToWin32PerformanceCounterKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertTimeToWin32PerformanceCounterKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == performanceCounter) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrConvertTimeToWin32PerformanceCounterKHR-performanceCounter-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertTimeToWin32PerformanceCounterKHR", objects_info,
                                "Invalid NULL for LARGE_INTEGER \"performanceCounter\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrConvertTimeToWin32PerformanceCounterKHR-performanceCounter-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrConvertTimeToWin32PerformanceCounterKHR(
    XrInstance instance,
    XrTime time,
    LARGE_INTEGER* performanceCounter) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->ConvertTimeToWin32PerformanceCounterKHR(instance, time, performanceCounter);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrConvertTimeToWin32PerformanceCounterKHR(
    XrInstance instance,
    XrTime time,
    LARGE_INTEGER* performanceCounter) {
    XrResult test_result = GenValidUsageInputsXrConvertTimeToWin32PerformanceCounterKHR(instance, time, performanceCounter);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrConvertTimeToWin32PerformanceCounterKHR(instance, time, performanceCounter);
}

#endif // defined(XR_USE_PLATFORM_WIN32)


// ---- XR_KHR_convert_timespec_time extension commands
#if defined(XR_USE_TIMESPEC)

XrResult GenValidUsageInputsXrConvertTimespecTimeToTimeKHR(
XrInstance instance,
const struct timespec* timespecTime,
XrTime* time) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrConvertTimespecTimeToTimeKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertTimespecTimeToTimeKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == timespecTime) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrConvertTimespecTimeToTimeKHR-timespecTime-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertTimespecTimeToTimeKHR", objects_info,
                                "Invalid NULL for timespec \"timespecTime\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrConvertTimespecTimeToTimeKHR-timespecTime-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == time) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrConvertTimespecTimeToTimeKHR-time-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertTimespecTimeToTimeKHR", objects_info,
                                "Invalid NULL for XrTime \"time\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrConvertTimespecTimeToTimeKHR-time-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrConvertTimespecTimeToTimeKHR(
    XrInstance instance,
    const struct timespec* timespecTime,
    XrTime* time) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->ConvertTimespecTimeToTimeKHR(instance, timespecTime, time);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrConvertTimespecTimeToTimeKHR(
    XrInstance instance,
    const struct timespec* timespecTime,
    XrTime* time) {
    XrResult test_result = GenValidUsageInputsXrConvertTimespecTimeToTimeKHR(instance, timespecTime, time);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrConvertTimespecTimeToTimeKHR(instance, timespecTime, time);
}

#endif // defined(XR_USE_TIMESPEC)

#if defined(XR_USE_TIMESPEC)

XrResult GenValidUsageInputsXrConvertTimeToTimespecTimeKHR(
XrInstance instance,
XrTime time,
struct timespec* timespecTime) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrConvertTimeToTimespecTimeKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertTimeToTimespecTimeKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == timespecTime) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrConvertTimeToTimespecTimeKHR-timespecTime-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrConvertTimeToTimespecTimeKHR", objects_info,
                                "Invalid NULL for timespec \"timespecTime\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrConvertTimeToTimespecTimeKHR-timespecTime-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrConvertTimeToTimespecTimeKHR(
    XrInstance instance,
    XrTime time,
    struct timespec* timespecTime) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->ConvertTimeToTimespecTimeKHR(instance, time, timespecTime);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrConvertTimeToTimespecTimeKHR(
    XrInstance instance,
    XrTime time,
    struct timespec* timespecTime) {
    XrResult test_result = GenValidUsageInputsXrConvertTimeToTimespecTimeKHR(instance, time, timespecTime);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrConvertTimeToTimespecTimeKHR(instance, time, timespecTime);
}

#endif // defined(XR_USE_TIMESPEC)


// ---- XR_KHR_loader_init extension commands

// ---- XR_KHR_vulkan_enable2 extension commands
#if defined(XR_USE_GRAPHICS_API_VULKAN)

XrResult GenValidUsageInputsXrCreateVulkanInstanceKHR(
XrInstance instance,
const XrVulkanInstanceCreateInfoKHR* createInfo,
VkInstance* vulkanInstance,
VkResult* vulkanResult) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrCreateVulkanInstanceKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanInstanceKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVulkanInstanceKHR-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanInstanceKHR", objects_info,
                                "Invalid NULL for XrVulkanInstanceCreateInfoKHR \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVulkanInstanceCreateInfoKHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateVulkanInstanceKHR", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVulkanInstanceKHR-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanInstanceKHR",
                                objects_info,
                                "Command xrCreateVulkanInstanceKHR param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == vulkanInstance) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVulkanInstanceKHR-vulkanInstance-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanInstanceKHR", objects_info,
                                "Invalid NULL for VkInstance \"vulkanInstance\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateVulkanInstanceKHR-vulkanInstance-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == vulkanResult) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVulkanInstanceKHR-vulkanResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanInstanceKHR", objects_info,
                                "Invalid NULL for VkResult \"vulkanResult\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateVulkanInstanceKHR-vulkanResult-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateVulkanInstanceKHR(
    XrInstance instance,
    const XrVulkanInstanceCreateInfoKHR* createInfo,
    VkInstance* vulkanInstance,
    VkResult* vulkanResult) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->CreateVulkanInstanceKHR(instance, createInfo, vulkanInstance, vulkanResult);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateVulkanInstanceKHR(
    XrInstance instance,
    const XrVulkanInstanceCreateInfoKHR* createInfo,
    VkInstance* vulkanInstance,
    VkResult* vulkanResult) {
    XrResult test_result = GenValidUsageInputsXrCreateVulkanInstanceKHR(instance, createInfo, vulkanInstance, vulkanResult);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateVulkanInstanceKHR(instance, createInfo, vulkanInstance, vulkanResult);
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)

#if defined(XR_USE_GRAPHICS_API_VULKAN)

XrResult GenValidUsageInputsXrCreateVulkanDeviceKHR(
XrInstance instance,
const XrVulkanDeviceCreateInfoKHR* createInfo,
VkDevice* vulkanDevice,
VkResult* vulkanResult) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrCreateVulkanDeviceKHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanDeviceKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVulkanDeviceKHR-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanDeviceKHR", objects_info,
                                "Invalid NULL for XrVulkanDeviceCreateInfoKHR \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVulkanDeviceCreateInfoKHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateVulkanDeviceKHR", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVulkanDeviceKHR-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanDeviceKHR",
                                objects_info,
                                "Command xrCreateVulkanDeviceKHR param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == vulkanDevice) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVulkanDeviceKHR-vulkanDevice-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanDeviceKHR", objects_info,
                                "Invalid NULL for VkDevice \"vulkanDevice\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateVulkanDeviceKHR-vulkanDevice-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == vulkanResult) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVulkanDeviceKHR-vulkanResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVulkanDeviceKHR", objects_info,
                                "Invalid NULL for VkResult \"vulkanResult\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateVulkanDeviceKHR-vulkanResult-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateVulkanDeviceKHR(
    XrInstance instance,
    const XrVulkanDeviceCreateInfoKHR* createInfo,
    VkDevice* vulkanDevice,
    VkResult* vulkanResult) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->CreateVulkanDeviceKHR(instance, createInfo, vulkanDevice, vulkanResult);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateVulkanDeviceKHR(
    XrInstance instance,
    const XrVulkanDeviceCreateInfoKHR* createInfo,
    VkDevice* vulkanDevice,
    VkResult* vulkanResult) {
    XrResult test_result = GenValidUsageInputsXrCreateVulkanDeviceKHR(instance, createInfo, vulkanDevice, vulkanResult);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateVulkanDeviceKHR(instance, createInfo, vulkanDevice, vulkanResult);
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)

#if defined(XR_USE_GRAPHICS_API_VULKAN)

XrResult GenValidUsageInputsXrGetVulkanGraphicsDevice2KHR(
XrInstance instance,
const XrVulkanGraphicsDeviceGetInfoKHR* getInfo,
VkPhysicalDevice* vulkanPhysicalDevice) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetVulkanGraphicsDevice2KHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsDevice2KHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanGraphicsDevice2KHR-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsDevice2KHR", objects_info,
                                "Invalid NULL for XrVulkanGraphicsDeviceGetInfoKHR \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVulkanGraphicsDeviceGetInfoKHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetVulkanGraphicsDevice2KHR", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanGraphicsDevice2KHR-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsDevice2KHR",
                                objects_info,
                                "Command xrGetVulkanGraphicsDevice2KHR param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == vulkanPhysicalDevice) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanGraphicsDevice2KHR-vulkanPhysicalDevice-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsDevice2KHR", objects_info,
                                "Invalid NULL for VkPhysicalDevice \"vulkanPhysicalDevice\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetVulkanGraphicsDevice2KHR-vulkanPhysicalDevice-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVulkanGraphicsDevice2KHR(
    XrInstance instance,
    const XrVulkanGraphicsDeviceGetInfoKHR* getInfo,
    VkPhysicalDevice* vulkanPhysicalDevice) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetVulkanGraphicsDevice2KHR(instance, getInfo, vulkanPhysicalDevice);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVulkanGraphicsDevice2KHR(
    XrInstance instance,
    const XrVulkanGraphicsDeviceGetInfoKHR* getInfo,
    VkPhysicalDevice* vulkanPhysicalDevice) {
    XrResult test_result = GenValidUsageInputsXrGetVulkanGraphicsDevice2KHR(instance, getInfo, vulkanPhysicalDevice);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVulkanGraphicsDevice2KHR(instance, getInfo, vulkanPhysicalDevice);
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)

#if defined(XR_USE_GRAPHICS_API_VULKAN)

XrResult GenValidUsageInputsXrGetVulkanGraphicsRequirements2KHR(
XrInstance instance,
XrSystemId systemId,
XrGraphicsRequirementsVulkanKHR* graphicsRequirements) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetVulkanGraphicsRequirements2KHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsRequirements2KHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == graphicsRequirements) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanGraphicsRequirements2KHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsRequirements2KHR", objects_info,
                                "Invalid NULL for XrGraphicsRequirementsVulkanKHR \"graphicsRequirements\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrGraphicsRequirementsVulkanKHR is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetVulkanGraphicsRequirements2KHR", objects_info,
                                                        false, true, graphicsRequirements);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVulkanGraphicsRequirements2KHR-graphicsRequirements-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVulkanGraphicsRequirements2KHR",
                                objects_info,
                                "Command xrGetVulkanGraphicsRequirements2KHR param graphicsRequirements is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVulkanGraphicsRequirements2KHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsVulkanKHR* graphicsRequirements) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetVulkanGraphicsRequirements2KHR(instance, systemId, graphicsRequirements);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVulkanGraphicsRequirements2KHR(
    XrInstance instance,
    XrSystemId systemId,
    XrGraphicsRequirementsVulkanKHR* graphicsRequirements) {
    XrResult test_result = GenValidUsageInputsXrGetVulkanGraphicsRequirements2KHR(instance, systemId, graphicsRequirements);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVulkanGraphicsRequirements2KHR(instance, systemId, graphicsRequirements);
}

#endif // defined(XR_USE_GRAPHICS_API_VULKAN)


// ---- XR_KHR_extended_struct_name_lengths extension commands
XrResult GenValidUsageInputsXrStructureTypeToString2KHR(
XrInstance instance,
XrStructureType value,
char buffer[XR_MAX_STRUCTURE_NAME_SIZE_EXTENDED_KHR]) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrStructureTypeToString2KHR-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStructureTypeToString2KHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // NOTE: Skipping enum validation for xrStructureTypeToString2KHR value - toString functions accept any value
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStructureTypeToString2KHR(
    XrInstance instance,
    XrStructureType value,
    char buffer[XR_MAX_STRUCTURE_NAME_SIZE_EXTENDED_KHR]) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->StructureTypeToString2KHR(instance, value, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStructureTypeToString2KHR(
    XrInstance instance,
    XrStructureType value,
    char buffer[XR_MAX_STRUCTURE_NAME_SIZE_EXTENDED_KHR]) {
    XrResult test_result = GenValidUsageInputsXrStructureTypeToString2KHR(instance, value, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStructureTypeToString2KHR(instance, value, buffer);
}


// ---- XR_KHR_locate_spaces extension commands
XrResult GenValidUsageInputsXrLocateSpacesKHR(
XrSession session,
const XrSpacesLocateInfo* locateInfo,
XrSpaceLocations* spaceLocations) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrLocateSpacesKHR-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpacesKHR",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpacesKHR-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpacesKHR", objects_info,
                                "Invalid NULL for XrSpacesLocateInfo \"locateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpacesLocateInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateSpacesKHR", objects_info,
                                                        true, true, locateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpacesKHR-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpacesKHR",
                                objects_info,
                                "Command xrLocateSpacesKHR param locateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spaceLocations) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpacesKHR-spaceLocations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpacesKHR", objects_info,
                                "Invalid NULL for XrSpaceLocations \"spaceLocations\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceLocations is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateSpacesKHR", objects_info,
                                                        false, true, spaceLocations);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSpacesKHR-spaceLocations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSpacesKHR",
                                objects_info,
                                "Command xrLocateSpacesKHR param spaceLocations is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLocateSpacesKHR(
    XrSession session,
    const XrSpacesLocateInfo* locateInfo,
    XrSpaceLocations* spaceLocations) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LocateSpacesKHR(session, locateInfo, spaceLocations);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLocateSpacesKHR(
    XrSession session,
    const XrSpacesLocateInfo* locateInfo,
    XrSpaceLocations* spaceLocations) {
    XrResult test_result = GenValidUsageInputsXrLocateSpacesKHR(session, locateInfo, spaceLocations);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLocateSpacesKHR(session, locateInfo, spaceLocations);
}


// ---- XR_EXT_performance_settings extension commands
XrResult GenValidUsageInputsXrPerfSettingsSetPerformanceLevelEXT(
XrSession session,
XrPerfSettingsDomainEXT domain,
XrPerfSettingsLevelEXT level) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrPerfSettingsSetPerformanceLevelEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPerfSettingsSetPerformanceLevelEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrPerfSettingsDomainEXT value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrPerfSettingsSetPerformanceLevelEXT", "xrPerfSettingsSetPerformanceLevelEXT", "domain", objects_info, domain)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrPerfSettingsDomainEXT \"domain\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(domain));
            CoreValidLogMessage(gen_instance_info, "VUID-xrPerfSettingsSetPerformanceLevelEXT-domain-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrPerfSettingsSetPerformanceLevelEXT",
                                objects_info, oss_enum.str());
        }
        // Make sure the enum type XrPerfSettingsLevelEXT value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrPerfSettingsSetPerformanceLevelEXT", "xrPerfSettingsSetPerformanceLevelEXT", "level", objects_info, level)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrPerfSettingsLevelEXT \"level\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(level));
            CoreValidLogMessage(gen_instance_info, "VUID-xrPerfSettingsSetPerformanceLevelEXT-level-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrPerfSettingsSetPerformanceLevelEXT",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPerfSettingsSetPerformanceLevelEXT(
    XrSession session,
    XrPerfSettingsDomainEXT domain,
    XrPerfSettingsLevelEXT level) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PerfSettingsSetPerformanceLevelEXT(session, domain, level);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPerfSettingsSetPerformanceLevelEXT(
    XrSession session,
    XrPerfSettingsDomainEXT domain,
    XrPerfSettingsLevelEXT level) {
    XrResult test_result = GenValidUsageInputsXrPerfSettingsSetPerformanceLevelEXT(session, domain, level);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPerfSettingsSetPerformanceLevelEXT(session, domain, level);
}


// ---- XR_EXT_thermal_query extension commands
XrResult GenValidUsageInputsXrThermalGetTemperatureTrendEXT(
XrSession session,
XrPerfSettingsDomainEXT domain,
XrPerfSettingsNotificationLevelEXT* notificationLevel,
float* tempHeadroom,
float* tempSlope) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrThermalGetTemperatureTrendEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrThermalGetTemperatureTrendEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrPerfSettingsDomainEXT value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrThermalGetTemperatureTrendEXT", "xrThermalGetTemperatureTrendEXT", "domain", objects_info, domain)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrPerfSettingsDomainEXT \"domain\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(domain));
            CoreValidLogMessage(gen_instance_info, "VUID-xrThermalGetTemperatureTrendEXT-domain-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrThermalGetTemperatureTrendEXT",
                                objects_info, oss_enum.str());
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == notificationLevel) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrThermalGetTemperatureTrendEXT-notificationLevel-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrThermalGetTemperatureTrendEXT", objects_info,
                                "Invalid NULL for XrPerfSettingsNotificationLevelEXT \"notificationLevel\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Make sure the enum type XrPerfSettingsNotificationLevelEXT value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrThermalGetTemperatureTrendEXT", "xrThermalGetTemperatureTrendEXT", "notificationLevel", objects_info, *notificationLevel)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrPerfSettingsNotificationLevelEXT \"notificationLevel\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(*notificationLevel));
            CoreValidLogMessage(gen_instance_info, "VUID-xrThermalGetTemperatureTrendEXT-notificationLevel-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrThermalGetTemperatureTrendEXT",
                                objects_info, oss_enum.str());
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == tempHeadroom) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrThermalGetTemperatureTrendEXT-tempHeadroom-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrThermalGetTemperatureTrendEXT", objects_info,
                                "Invalid NULL for float \"tempHeadroom\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrThermalGetTemperatureTrendEXT-tempHeadroom-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == tempSlope) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrThermalGetTemperatureTrendEXT-tempSlope-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrThermalGetTemperatureTrendEXT", objects_info,
                                "Invalid NULL for float \"tempSlope\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrThermalGetTemperatureTrendEXT-tempSlope-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrThermalGetTemperatureTrendEXT(
    XrSession session,
    XrPerfSettingsDomainEXT domain,
    XrPerfSettingsNotificationLevelEXT* notificationLevel,
    float* tempHeadroom,
    float* tempSlope) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ThermalGetTemperatureTrendEXT(session, domain, notificationLevel, tempHeadroom, tempSlope);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrThermalGetTemperatureTrendEXT(
    XrSession session,
    XrPerfSettingsDomainEXT domain,
    XrPerfSettingsNotificationLevelEXT* notificationLevel,
    float* tempHeadroom,
    float* tempSlope) {
    XrResult test_result = GenValidUsageInputsXrThermalGetTemperatureTrendEXT(session, domain, notificationLevel, tempHeadroom, tempSlope);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrThermalGetTemperatureTrendEXT(session, domain, notificationLevel, tempHeadroom, tempSlope);
}


// ---- XR_EXT_debug_utils extension commands
XrResult GenValidUsageInputsXrSetDebugUtilsObjectNameEXT(
XrInstance instance,
const XrDebugUtilsObjectNameInfoEXT* nameInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrSetDebugUtilsObjectNameEXT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetDebugUtilsObjectNameEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == nameInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetDebugUtilsObjectNameEXT-nameInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetDebugUtilsObjectNameEXT", objects_info,
                                "Invalid NULL for XrDebugUtilsObjectNameInfoEXT \"nameInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrDebugUtilsObjectNameInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetDebugUtilsObjectNameEXT", objects_info,
                                                        true, true, nameInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetDebugUtilsObjectNameEXT-nameInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetDebugUtilsObjectNameEXT",
                                objects_info,
                                "Command xrSetDebugUtilsObjectNameEXT param nameInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetDebugUtilsObjectNameEXT(
    XrInstance instance,
    const XrDebugUtilsObjectNameInfoEXT* nameInfo) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->SetDebugUtilsObjectNameEXT(instance, nameInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XrResult GenValidUsageInputsXrCreateDebugUtilsMessengerEXT(
XrInstance instance,
const XrDebugUtilsMessengerCreateInfoEXT* createInfo,
XrDebugUtilsMessengerEXT* messenger) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrCreateDebugUtilsMessengerEXT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateDebugUtilsMessengerEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateDebugUtilsMessengerEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateDebugUtilsMessengerEXT", objects_info,
                                "Invalid NULL for XrDebugUtilsMessengerCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrDebugUtilsMessengerCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateDebugUtilsMessengerEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateDebugUtilsMessengerEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateDebugUtilsMessengerEXT",
                                objects_info,
                                "Command xrCreateDebugUtilsMessengerEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == messenger) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateDebugUtilsMessengerEXT-messenger-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateDebugUtilsMessengerEXT", objects_info,
                                "Invalid NULL for XrDebugUtilsMessengerEXT \"messenger\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateDebugUtilsMessengerEXT(
    XrInstance instance,
    const XrDebugUtilsMessengerCreateInfoEXT* createInfo,
    XrDebugUtilsMessengerEXT* messenger) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->CreateDebugUtilsMessengerEXT(instance, createInfo, messenger);
        if (XR_SUCCESS == result && nullptr != messenger) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_INSTANCE;
            handle_info->direct_parent_handle = MakeHandleGeneric(instance);
            g_debugutilsmessengerext_info.insert(*messenger, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XrResult GenValidUsageInputsXrDestroyDebugUtilsMessengerEXT(
XrDebugUtilsMessengerEXT messenger) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(messenger, XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrDebugUtilsMessengerEXTHandle(&messenger);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrDebugUtilsMessengerEXT handle \"messenger\" ";
                oss << HandleToHexString(messenger);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyDebugUtilsMessengerEXT-messenger-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyDebugUtilsMessengerEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_debugutilsmessengerext_info.getWithInstanceInfo(messenger);
        GenValidUsageXrHandleInfo *gen_debugutilsmessengerext_info = info_with_instance.first;
        (void)gen_debugutilsmessengerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyDebugUtilsMessengerEXT(
    XrDebugUtilsMessengerEXT messenger) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_debugutilsmessengerext_info.getWithInstanceInfo(messenger);
        GenValidUsageXrHandleInfo *gen_debugutilsmessengerext_info = info_with_instance.first;
        (void)gen_debugutilsmessengerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyDebugUtilsMessengerEXT(messenger);
        if (XR_SUCCEEDED(result)) {
            g_debugutilsmessengerext_info.erase(messenger);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XrResult GenValidUsageInputsXrSubmitDebugUtilsMessageEXT(
XrInstance instance,
XrDebugUtilsMessageSeverityFlagsEXT messageSeverity,
XrDebugUtilsMessageTypeFlagsEXT messageTypes,
const XrDebugUtilsMessengerCallbackDataEXT* callbackData) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrSubmitDebugUtilsMessageEXT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitDebugUtilsMessageEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        ValidateXrFlagsResult debug_utils_message_severity_flags_ext_result = ValidateXrDebugUtilsMessageSeverityFlagsEXT(messageSeverity);
        // Flags must be non-zero in this case.
        if (VALIDATE_XR_FLAGS_ZERO == debug_utils_message_severity_flags_ext_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitDebugUtilsMessageEXT-messageSeverity-requiredbitmask",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitDebugUtilsMessageEXT",
                                objects_info, "XrDebugUtilsMessageSeverityFlagsEXT \"messageSeverity\" flag must be non-zero");
            return XR_ERROR_VALIDATION_FAILURE;
        } else if (VALIDATE_XR_FLAGS_SUCCESS != debug_utils_message_severity_flags_ext_result) {
            // Otherwise, flags must be valid.
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrDebugUtilsMessageSeverityFlagsEXT \"messageSeverity\" flag value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(messageSeverity));
            oss_enum <<" contains illegal bit";
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitDebugUtilsMessageEXT-messageSeverity-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitDebugUtilsMessageEXT",
                                objects_info, oss_enum.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        ValidateXrFlagsResult debug_utils_message_type_flags_ext_result = ValidateXrDebugUtilsMessageTypeFlagsEXT(messageTypes);
        // Flags must be non-zero in this case.
        if (VALIDATE_XR_FLAGS_ZERO == debug_utils_message_type_flags_ext_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitDebugUtilsMessageEXT-messageTypes-requiredbitmask",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitDebugUtilsMessageEXT",
                                objects_info, "XrDebugUtilsMessageTypeFlagsEXT \"messageTypes\" flag must be non-zero");
            return XR_ERROR_VALIDATION_FAILURE;
        } else if (VALIDATE_XR_FLAGS_SUCCESS != debug_utils_message_type_flags_ext_result) {
            // Otherwise, flags must be valid.
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrDebugUtilsMessageTypeFlagsEXT \"messageTypes\" flag value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(messageTypes));
            oss_enum <<" contains illegal bit";
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitDebugUtilsMessageEXT-messageTypes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitDebugUtilsMessageEXT",
                                objects_info, oss_enum.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == callbackData) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitDebugUtilsMessageEXT-callbackData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitDebugUtilsMessageEXT", objects_info,
                                "Invalid NULL for XrDebugUtilsMessengerCallbackDataEXT \"callbackData\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrDebugUtilsMessengerCallbackDataEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSubmitDebugUtilsMessageEXT", objects_info,
                                                        true, true, callbackData);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitDebugUtilsMessageEXT-callbackData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitDebugUtilsMessageEXT",
                                objects_info,
                                "Command xrSubmitDebugUtilsMessageEXT param callbackData is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSubmitDebugUtilsMessageEXT(
    XrInstance instance,
    XrDebugUtilsMessageSeverityFlagsEXT messageSeverity,
    XrDebugUtilsMessageTypeFlagsEXT messageTypes,
    const XrDebugUtilsMessengerCallbackDataEXT* callbackData) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, callbackData);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSubmitDebugUtilsMessageEXT(
    XrInstance instance,
    XrDebugUtilsMessageSeverityFlagsEXT messageSeverity,
    XrDebugUtilsMessageTypeFlagsEXT messageTypes,
    const XrDebugUtilsMessengerCallbackDataEXT* callbackData) {
    XrResult test_result = GenValidUsageInputsXrSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, callbackData);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, callbackData);
}

XrResult GenValidUsageInputsXrSessionBeginDebugUtilsLabelRegionEXT(
XrSession session,
const XrDebugUtilsLabelEXT* labelInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSessionBeginDebugUtilsLabelRegionEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSessionBeginDebugUtilsLabelRegionEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == labelInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSessionBeginDebugUtilsLabelRegionEXT-labelInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSessionBeginDebugUtilsLabelRegionEXT", objects_info,
                                "Invalid NULL for XrDebugUtilsLabelEXT \"labelInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrDebugUtilsLabelEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSessionBeginDebugUtilsLabelRegionEXT", objects_info,
                                                        true, true, labelInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSessionBeginDebugUtilsLabelRegionEXT-labelInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSessionBeginDebugUtilsLabelRegionEXT",
                                objects_info,
                                "Command xrSessionBeginDebugUtilsLabelRegionEXT param labelInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSessionBeginDebugUtilsLabelRegionEXT(
    XrSession session,
    const XrDebugUtilsLabelEXT* labelInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SessionBeginDebugUtilsLabelRegionEXT(session, labelInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XrResult GenValidUsageInputsXrSessionEndDebugUtilsLabelRegionEXT(
XrSession session) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSessionEndDebugUtilsLabelRegionEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSessionEndDebugUtilsLabelRegionEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSessionEndDebugUtilsLabelRegionEXT(
    XrSession session) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SessionEndDebugUtilsLabelRegionEXT(session);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XrResult GenValidUsageInputsXrSessionInsertDebugUtilsLabelEXT(
XrSession session,
const XrDebugUtilsLabelEXT* labelInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSessionInsertDebugUtilsLabelEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSessionInsertDebugUtilsLabelEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == labelInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSessionInsertDebugUtilsLabelEXT-labelInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSessionInsertDebugUtilsLabelEXT", objects_info,
                                "Invalid NULL for XrDebugUtilsLabelEXT \"labelInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrDebugUtilsLabelEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSessionInsertDebugUtilsLabelEXT", objects_info,
                                                        true, true, labelInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSessionInsertDebugUtilsLabelEXT-labelInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSessionInsertDebugUtilsLabelEXT",
                                objects_info,
                                "Command xrSessionInsertDebugUtilsLabelEXT param labelInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSessionInsertDebugUtilsLabelEXT(
    XrSession session,
    const XrDebugUtilsLabelEXT* labelInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SessionInsertDebugUtilsLabelEXT(session, labelInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}


// ---- XR_MSFT_spatial_anchor extension commands
XrResult GenValidUsageInputsXrCreateSpatialAnchorMSFT(
XrSession session,
const XrSpatialAnchorCreateInfoMSFT* createInfo,
XrSpatialAnchorMSFT* anchor) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorMSFT", objects_info,
                                "Invalid NULL for XrSpatialAnchorCreateInfoMSFT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorCreateInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorMSFT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorMSFT",
                                objects_info,
                                "Command xrCreateSpatialAnchorMSFT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchor) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorMSFT-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorMSFT", objects_info,
                                "Invalid NULL for XrSpatialAnchorMSFT \"anchor\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorMSFT(
    XrSession session,
    const XrSpatialAnchorCreateInfoMSFT* createInfo,
    XrSpatialAnchorMSFT* anchor) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorMSFT(session, createInfo, anchor);
        if (XR_SUCCESS == result && nullptr != anchor) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_spatialanchormsft_info.insert(*anchor, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorMSFT(
    XrSession session,
    const XrSpatialAnchorCreateInfoMSFT* createInfo,
    XrSpatialAnchorMSFT* anchor) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorMSFT(session, createInfo, anchor);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorMSFT(session, createInfo, anchor);
}

XrResult GenValidUsageInputsXrCreateSpatialAnchorSpaceMSFT(
XrSession session,
const XrSpatialAnchorSpaceCreateInfoMSFT* createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorSpaceMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceMSFT", objects_info,
                                "Invalid NULL for XrSpatialAnchorSpaceCreateInfoMSFT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorSpaceCreateInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorSpaceMSFT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceMSFT",
                                objects_info,
                                "Command xrCreateSpatialAnchorSpaceMSFT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceMSFT-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceMSFT", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorSpaceMSFT(
    XrSession session,
    const XrSpatialAnchorSpaceCreateInfoMSFT* createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorSpaceMSFT(session, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorSpaceMSFT(
    XrSession session,
    const XrSpatialAnchorSpaceCreateInfoMSFT* createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorSpaceMSFT(session, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorSpaceMSFT(session, createInfo, space);
}

XrResult GenValidUsageInputsXrDestroySpatialAnchorMSFT(
XrSpatialAnchorMSFT anchor) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(anchor, XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorMSFTHandle(&anchor);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorMSFT handle \"anchor\" ";
                oss << HandleToHexString(anchor);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpatialAnchorMSFT-anchor-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpatialAnchorMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchormsft_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_spatialanchormsft_info = info_with_instance.first;
        (void)gen_spatialanchormsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpatialAnchorMSFT(
    XrSpatialAnchorMSFT anchor) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchormsft_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_spatialanchormsft_info = info_with_instance.first;
        (void)gen_spatialanchormsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpatialAnchorMSFT(anchor);
        if (XR_SUCCEEDED(result)) {
            g_spatialanchormsft_info.erase(anchor);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpatialAnchorMSFT(
    XrSpatialAnchorMSFT anchor) {
    XrResult test_result = GenValidUsageInputsXrDestroySpatialAnchorMSFT(anchor);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpatialAnchorMSFT(anchor);
}


// ---- XR_EXT_conformance_automation extension commands
XrResult GenValidUsageInputsXrSetInputDeviceActiveEXT(
XrSession session,
XrPath interactionProfile,
XrPath topLevelPath,
XrBool32 isActive) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetInputDeviceActiveEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetInputDeviceActiveEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetInputDeviceActiveEXT(
    XrSession session,
    XrPath interactionProfile,
    XrPath topLevelPath,
    XrBool32 isActive) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetInputDeviceActiveEXT(session, interactionProfile, topLevelPath, isActive);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetInputDeviceActiveEXT(
    XrSession session,
    XrPath interactionProfile,
    XrPath topLevelPath,
    XrBool32 isActive) {
    XrResult test_result = GenValidUsageInputsXrSetInputDeviceActiveEXT(session, interactionProfile, topLevelPath, isActive);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetInputDeviceActiveEXT(session, interactionProfile, topLevelPath, isActive);
}

XrResult GenValidUsageInputsXrSetInputDeviceStateBoolEXT(
XrSession session,
XrPath topLevelPath,
XrPath inputSourcePath,
XrBool32 state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetInputDeviceStateBoolEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetInputDeviceStateBoolEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetInputDeviceStateBoolEXT(
    XrSession session,
    XrPath topLevelPath,
    XrPath inputSourcePath,
    XrBool32 state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetInputDeviceStateBoolEXT(session, topLevelPath, inputSourcePath, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetInputDeviceStateBoolEXT(
    XrSession session,
    XrPath topLevelPath,
    XrPath inputSourcePath,
    XrBool32 state) {
    XrResult test_result = GenValidUsageInputsXrSetInputDeviceStateBoolEXT(session, topLevelPath, inputSourcePath, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetInputDeviceStateBoolEXT(session, topLevelPath, inputSourcePath, state);
}

XrResult GenValidUsageInputsXrSetInputDeviceStateFloatEXT(
XrSession session,
XrPath topLevelPath,
XrPath inputSourcePath,
float state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetInputDeviceStateFloatEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetInputDeviceStateFloatEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetInputDeviceStateFloatEXT(
    XrSession session,
    XrPath topLevelPath,
    XrPath inputSourcePath,
    float state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetInputDeviceStateFloatEXT(session, topLevelPath, inputSourcePath, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetInputDeviceStateFloatEXT(
    XrSession session,
    XrPath topLevelPath,
    XrPath inputSourcePath,
    float state) {
    XrResult test_result = GenValidUsageInputsXrSetInputDeviceStateFloatEXT(session, topLevelPath, inputSourcePath, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetInputDeviceStateFloatEXT(session, topLevelPath, inputSourcePath, state);
}

XrResult GenValidUsageInputsXrSetInputDeviceStateVector2fEXT(
XrSession session,
XrPath topLevelPath,
XrPath inputSourcePath,
XrVector2f state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetInputDeviceStateVector2fEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetInputDeviceStateVector2fEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetInputDeviceStateVector2fEXT(
    XrSession session,
    XrPath topLevelPath,
    XrPath inputSourcePath,
    XrVector2f state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetInputDeviceStateVector2fEXT(session, topLevelPath, inputSourcePath, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetInputDeviceStateVector2fEXT(
    XrSession session,
    XrPath topLevelPath,
    XrPath inputSourcePath,
    XrVector2f state) {
    XrResult test_result = GenValidUsageInputsXrSetInputDeviceStateVector2fEXT(session, topLevelPath, inputSourcePath, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetInputDeviceStateVector2fEXT(session, topLevelPath, inputSourcePath, state);
}

XrResult GenValidUsageInputsXrSetInputDeviceLocationEXT(
XrSession session,
XrPath topLevelPath,
XrPath inputSourcePath,
XrSpace space,
XrPosef pose) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetInputDeviceLocationEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetInputDeviceLocationEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(gen_instance_info, "VUID-xrSetInputDeviceLocationEXT-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetInputDeviceLocationEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(space), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpace ";
            oss_error << HandleToHexString(space);
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetInputDeviceLocationEXT-space-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetInputDeviceLocationEXT",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetInputDeviceLocationEXT(
    XrSession session,
    XrPath topLevelPath,
    XrPath inputSourcePath,
    XrSpace space,
    XrPosef pose) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetInputDeviceLocationEXT(session, topLevelPath, inputSourcePath, space, pose);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetInputDeviceLocationEXT(
    XrSession session,
    XrPath topLevelPath,
    XrPath inputSourcePath,
    XrSpace space,
    XrPosef pose) {
    XrResult test_result = GenValidUsageInputsXrSetInputDeviceLocationEXT(session, topLevelPath, inputSourcePath, space, pose);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetInputDeviceLocationEXT(session, topLevelPath, inputSourcePath, space, pose);
}


// ---- XR_MSFT_spatial_graph_bridge extension commands
XrResult GenValidUsageInputsXrCreateSpatialGraphNodeSpaceMSFT(
XrSession session,
const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialGraphNodeSpaceMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialGraphNodeSpaceMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialGraphNodeSpaceMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialGraphNodeSpaceMSFT", objects_info,
                                "Invalid NULL for XrSpatialGraphNodeSpaceCreateInfoMSFT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialGraphNodeSpaceCreateInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialGraphNodeSpaceMSFT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialGraphNodeSpaceMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialGraphNodeSpaceMSFT",
                                objects_info,
                                "Command xrCreateSpatialGraphNodeSpaceMSFT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialGraphNodeSpaceMSFT-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialGraphNodeSpaceMSFT", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialGraphNodeSpaceMSFT(
    XrSession session,
    const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialGraphNodeSpaceMSFT(session, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialGraphNodeSpaceMSFT(
    XrSession session,
    const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialGraphNodeSpaceMSFT(session, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialGraphNodeSpaceMSFT(session, createInfo, space);
}

XrResult GenValidUsageInputsXrTryCreateSpatialGraphStaticNodeBindingMSFT(
XrSession session,
const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo,
XrSpatialGraphNodeBindingMSFT* nodeBinding) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrTryCreateSpatialGraphStaticNodeBindingMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTryCreateSpatialGraphStaticNodeBindingMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrTryCreateSpatialGraphStaticNodeBindingMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTryCreateSpatialGraphStaticNodeBindingMSFT", objects_info,
                                "Invalid NULL for XrSpatialGraphStaticNodeBindingCreateInfoMSFT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialGraphStaticNodeBindingCreateInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrTryCreateSpatialGraphStaticNodeBindingMSFT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrTryCreateSpatialGraphStaticNodeBindingMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTryCreateSpatialGraphStaticNodeBindingMSFT",
                                objects_info,
                                "Command xrTryCreateSpatialGraphStaticNodeBindingMSFT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == nodeBinding) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrTryCreateSpatialGraphStaticNodeBindingMSFT-nodeBinding-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTryCreateSpatialGraphStaticNodeBindingMSFT", objects_info,
                                "Invalid NULL for XrSpatialGraphNodeBindingMSFT \"nodeBinding\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrTryCreateSpatialGraphStaticNodeBindingMSFT(
    XrSession session,
    const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo,
    XrSpatialGraphNodeBindingMSFT* nodeBinding) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->TryCreateSpatialGraphStaticNodeBindingMSFT(session, createInfo, nodeBinding);
        if (XR_SUCCESS == result && nullptr != nodeBinding) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_spatialgraphnodebindingmsft_info.insert(*nodeBinding, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrTryCreateSpatialGraphStaticNodeBindingMSFT(
    XrSession session,
    const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo,
    XrSpatialGraphNodeBindingMSFT* nodeBinding) {
    XrResult test_result = GenValidUsageInputsXrTryCreateSpatialGraphStaticNodeBindingMSFT(session, createInfo, nodeBinding);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrTryCreateSpatialGraphStaticNodeBindingMSFT(session, createInfo, nodeBinding);
}

XrResult GenValidUsageInputsXrDestroySpatialGraphNodeBindingMSFT(
XrSpatialGraphNodeBindingMSFT nodeBinding) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(nodeBinding, XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialGraphNodeBindingMSFTHandle(&nodeBinding);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialGraphNodeBindingMSFT handle \"nodeBinding\" ";
                oss << HandleToHexString(nodeBinding);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpatialGraphNodeBindingMSFT-nodeBinding-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpatialGraphNodeBindingMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialgraphnodebindingmsft_info.getWithInstanceInfo(nodeBinding);
        GenValidUsageXrHandleInfo *gen_spatialgraphnodebindingmsft_info = info_with_instance.first;
        (void)gen_spatialgraphnodebindingmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpatialGraphNodeBindingMSFT(
    XrSpatialGraphNodeBindingMSFT nodeBinding) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialgraphnodebindingmsft_info.getWithInstanceInfo(nodeBinding);
        GenValidUsageXrHandleInfo *gen_spatialgraphnodebindingmsft_info = info_with_instance.first;
        (void)gen_spatialgraphnodebindingmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpatialGraphNodeBindingMSFT(nodeBinding);
        if (XR_SUCCEEDED(result)) {
            g_spatialgraphnodebindingmsft_info.erase(nodeBinding);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpatialGraphNodeBindingMSFT(
    XrSpatialGraphNodeBindingMSFT nodeBinding) {
    XrResult test_result = GenValidUsageInputsXrDestroySpatialGraphNodeBindingMSFT(nodeBinding);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpatialGraphNodeBindingMSFT(nodeBinding);
}

XrResult GenValidUsageInputsXrGetSpatialGraphNodeBindingPropertiesMSFT(
XrSpatialGraphNodeBindingMSFT nodeBinding,
const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo,
XrSpatialGraphNodeBindingPropertiesMSFT* properties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(nodeBinding, XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialGraphNodeBindingMSFTHandle(&nodeBinding);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialGraphNodeBindingMSFT handle \"nodeBinding\" ";
                oss << HandleToHexString(nodeBinding);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialGraphNodeBindingPropertiesMSFT-nodeBinding-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialGraphNodeBindingPropertiesMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialgraphnodebindingmsft_info.getWithInstanceInfo(nodeBinding);
        GenValidUsageXrHandleInfo *gen_spatialgraphnodebindingmsft_info = info_with_instance.first;
        (void)gen_spatialgraphnodebindingmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrSpatialGraphNodeBindingPropertiesGetInfoMSFT is valid
        if (nullptr != getInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialGraphNodeBindingPropertiesMSFT",
                                                            objects_info, false, true, getInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialGraphNodeBindingPropertiesMSFT-getInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialGraphNodeBindingPropertiesMSFT",
                                    objects_info,
                                    "Command xrGetSpatialGraphNodeBindingPropertiesMSFT param getInfo is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == properties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialGraphNodeBindingPropertiesMSFT-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialGraphNodeBindingPropertiesMSFT", objects_info,
                                "Invalid NULL for XrSpatialGraphNodeBindingPropertiesMSFT \"properties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialGraphNodeBindingPropertiesMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialGraphNodeBindingPropertiesMSFT", objects_info,
                                                        false, true, properties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialGraphNodeBindingPropertiesMSFT-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialGraphNodeBindingPropertiesMSFT",
                                objects_info,
                                "Command xrGetSpatialGraphNodeBindingPropertiesMSFT param properties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialGraphNodeBindingPropertiesMSFT(
    XrSpatialGraphNodeBindingMSFT nodeBinding,
    const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo,
    XrSpatialGraphNodeBindingPropertiesMSFT* properties) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialgraphnodebindingmsft_info.getWithInstanceInfo(nodeBinding);
        GenValidUsageXrHandleInfo *gen_spatialgraphnodebindingmsft_info = info_with_instance.first;
        (void)gen_spatialgraphnodebindingmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialGraphNodeBindingPropertiesMSFT(nodeBinding, getInfo, properties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialGraphNodeBindingPropertiesMSFT(
    XrSpatialGraphNodeBindingMSFT nodeBinding,
    const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo,
    XrSpatialGraphNodeBindingPropertiesMSFT* properties) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialGraphNodeBindingPropertiesMSFT(nodeBinding, getInfo, properties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialGraphNodeBindingPropertiesMSFT(nodeBinding, getInfo, properties);
}


// ---- XR_EXT_hand_tracking extension commands
XrResult GenValidUsageInputsXrCreateHandTrackerEXT(
XrSession session,
const XrHandTrackerCreateInfoEXT* createInfo,
XrHandTrackerEXT* handTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateHandTrackerEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateHandTrackerEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateHandTrackerEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateHandTrackerEXT", objects_info,
                                "Invalid NULL for XrHandTrackerCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHandTrackerCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateHandTrackerEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateHandTrackerEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateHandTrackerEXT",
                                objects_info,
                                "Command xrCreateHandTrackerEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == handTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateHandTrackerEXT-handTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateHandTrackerEXT", objects_info,
                                "Invalid NULL for XrHandTrackerEXT \"handTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateHandTrackerEXT(
    XrSession session,
    const XrHandTrackerCreateInfoEXT* createInfo,
    XrHandTrackerEXT* handTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateHandTrackerEXT(session, createInfo, handTracker);
        if (XR_SUCCESS == result && nullptr != handTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_handtrackerext_info.insert(*handTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateHandTrackerEXT(
    XrSession session,
    const XrHandTrackerCreateInfoEXT* createInfo,
    XrHandTrackerEXT* handTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateHandTrackerEXT(session, createInfo, handTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateHandTrackerEXT(session, createInfo, handTracker);
}

XrResult GenValidUsageInputsXrDestroyHandTrackerEXT(
XrHandTrackerEXT handTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handTracker, XR_OBJECT_TYPE_HAND_TRACKER_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrHandTrackerEXTHandle(&handTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrHandTrackerEXT handle \"handTracker\" ";
                oss << HandleToHexString(handTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyHandTrackerEXT-handTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyHandTrackerEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyHandTrackerEXT(
    XrHandTrackerEXT handTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyHandTrackerEXT(handTracker);
        if (XR_SUCCEEDED(result)) {
            g_handtrackerext_info.erase(handTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyHandTrackerEXT(
    XrHandTrackerEXT handTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyHandTrackerEXT(handTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyHandTrackerEXT(handTracker);
}

XrResult GenValidUsageInputsXrLocateHandJointsEXT(
XrHandTrackerEXT handTracker,
const XrHandJointsLocateInfoEXT* locateInfo,
XrHandJointLocationsEXT* locations) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handTracker, XR_OBJECT_TYPE_HAND_TRACKER_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrHandTrackerEXTHandle(&handTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrHandTrackerEXT handle \"handTracker\" ";
                oss << HandleToHexString(handTracker);
                CoreValidLogMessage(nullptr, "VUID-xrLocateHandJointsEXT-handTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateHandJointsEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateHandJointsEXT-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateHandJointsEXT", objects_info,
                                "Invalid NULL for XrHandJointsLocateInfoEXT \"locateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHandJointsLocateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateHandJointsEXT", objects_info,
                                                        true, true, locateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateHandJointsEXT-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateHandJointsEXT",
                                objects_info,
                                "Command xrLocateHandJointsEXT param locateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locations) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateHandJointsEXT-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateHandJointsEXT", objects_info,
                                "Invalid NULL for XrHandJointLocationsEXT \"locations\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHandJointLocationsEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateHandJointsEXT", objects_info,
                                                        false, true, locations);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateHandJointsEXT-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateHandJointsEXT",
                                objects_info,
                                "Command xrLocateHandJointsEXT param locations is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLocateHandJointsEXT(
    XrHandTrackerEXT handTracker,
    const XrHandJointsLocateInfoEXT* locateInfo,
    XrHandJointLocationsEXT* locations) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LocateHandJointsEXT(handTracker, locateInfo, locations);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLocateHandJointsEXT(
    XrHandTrackerEXT handTracker,
    const XrHandJointsLocateInfoEXT* locateInfo,
    XrHandJointLocationsEXT* locations) {
    XrResult test_result = GenValidUsageInputsXrLocateHandJointsEXT(handTracker, locateInfo, locations);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLocateHandJointsEXT(handTracker, locateInfo, locations);
}


// ---- XR_MSFT_hand_tracking_mesh extension commands
XrResult GenValidUsageInputsXrCreateHandMeshSpaceMSFT(
XrHandTrackerEXT handTracker,
const XrHandMeshSpaceCreateInfoMSFT* createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handTracker, XR_OBJECT_TYPE_HAND_TRACKER_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrHandTrackerEXTHandle(&handTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrHandTrackerEXT handle \"handTracker\" ";
                oss << HandleToHexString(handTracker);
                CoreValidLogMessage(nullptr, "VUID-xrCreateHandMeshSpaceMSFT-handTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateHandMeshSpaceMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateHandMeshSpaceMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateHandMeshSpaceMSFT", objects_info,
                                "Invalid NULL for XrHandMeshSpaceCreateInfoMSFT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHandMeshSpaceCreateInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateHandMeshSpaceMSFT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateHandMeshSpaceMSFT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateHandMeshSpaceMSFT",
                                objects_info,
                                "Command xrCreateHandMeshSpaceMSFT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateHandMeshSpaceMSFT-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateHandMeshSpaceMSFT", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateHandMeshSpaceMSFT(
    XrHandTrackerEXT handTracker,
    const XrHandMeshSpaceCreateInfoMSFT* createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateHandMeshSpaceMSFT(handTracker, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_HAND_TRACKER_EXT;
            handle_info->direct_parent_handle = MakeHandleGeneric(handTracker);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateHandMeshSpaceMSFT(
    XrHandTrackerEXT handTracker,
    const XrHandMeshSpaceCreateInfoMSFT* createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateHandMeshSpaceMSFT(handTracker, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateHandMeshSpaceMSFT(handTracker, createInfo, space);
}

XrResult GenValidUsageInputsXrUpdateHandMeshMSFT(
XrHandTrackerEXT handTracker,
const XrHandMeshUpdateInfoMSFT* updateInfo,
XrHandMeshMSFT* handMesh) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handTracker, XR_OBJECT_TYPE_HAND_TRACKER_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrHandTrackerEXTHandle(&handTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrHandTrackerEXT handle \"handTracker\" ";
                oss << HandleToHexString(handTracker);
                CoreValidLogMessage(nullptr, "VUID-xrUpdateHandMeshMSFT-handTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateHandMeshMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == updateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateHandMeshMSFT-updateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateHandMeshMSFT", objects_info,
                                "Invalid NULL for XrHandMeshUpdateInfoMSFT \"updateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHandMeshUpdateInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateHandMeshMSFT", objects_info,
                                                        true, true, updateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateHandMeshMSFT-updateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateHandMeshMSFT",
                                objects_info,
                                "Command xrUpdateHandMeshMSFT param updateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == handMesh) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateHandMeshMSFT-handMesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateHandMeshMSFT", objects_info,
                                "Invalid NULL for XrHandMeshMSFT \"handMesh\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHandMeshMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateHandMeshMSFT", objects_info,
                                                        false, true, handMesh);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateHandMeshMSFT-handMesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateHandMeshMSFT",
                                objects_info,
                                "Command xrUpdateHandMeshMSFT param handMesh is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUpdateHandMeshMSFT(
    XrHandTrackerEXT handTracker,
    const XrHandMeshUpdateInfoMSFT* updateInfo,
    XrHandMeshMSFT* handMesh) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UpdateHandMeshMSFT(handTracker, updateInfo, handMesh);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUpdateHandMeshMSFT(
    XrHandTrackerEXT handTracker,
    const XrHandMeshUpdateInfoMSFT* updateInfo,
    XrHandMeshMSFT* handMesh) {
    XrResult test_result = GenValidUsageInputsXrUpdateHandMeshMSFT(handTracker, updateInfo, handMesh);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUpdateHandMeshMSFT(handTracker, updateInfo, handMesh);
}


// ---- XR_MSFT_controller_model extension commands
XrResult GenValidUsageInputsXrGetControllerModelKeyMSFT(
XrSession session,
XrPath topLevelUserPath,
XrControllerModelKeyStateMSFT* controllerModelKeyState) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetControllerModelKeyMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetControllerModelKeyMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == controllerModelKeyState) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetControllerModelKeyMSFT-controllerModelKeyState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetControllerModelKeyMSFT", objects_info,
                                "Invalid NULL for XrControllerModelKeyStateMSFT \"controllerModelKeyState\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrControllerModelKeyStateMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetControllerModelKeyMSFT", objects_info,
                                                        false, true, controllerModelKeyState);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetControllerModelKeyMSFT-controllerModelKeyState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetControllerModelKeyMSFT",
                                objects_info,
                                "Command xrGetControllerModelKeyMSFT param controllerModelKeyState is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetControllerModelKeyMSFT(
    XrSession session,
    XrPath topLevelUserPath,
    XrControllerModelKeyStateMSFT* controllerModelKeyState) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetControllerModelKeyMSFT(session, topLevelUserPath, controllerModelKeyState);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetControllerModelKeyMSFT(
    XrSession session,
    XrPath topLevelUserPath,
    XrControllerModelKeyStateMSFT* controllerModelKeyState) {
    XrResult test_result = GenValidUsageInputsXrGetControllerModelKeyMSFT(session, topLevelUserPath, controllerModelKeyState);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetControllerModelKeyMSFT(session, topLevelUserPath, controllerModelKeyState);
}

XrResult GenValidUsageInputsXrLoadControllerModelMSFT(
XrSession session,
XrControllerModelKeyMSFT modelKey,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrLoadControllerModelMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLoadControllerModelMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLoadControllerModelMSFT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLoadControllerModelMSFT",
                                objects_info,
                                "Command xrLoadControllerModelMSFT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLoadControllerModelMSFT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLoadControllerModelMSFT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrLoadControllerModelMSFT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrLoadControllerModelMSFT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLoadControllerModelMSFT(
    XrSession session,
    XrControllerModelKeyMSFT modelKey,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint8_t* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LoadControllerModelMSFT(session, modelKey, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLoadControllerModelMSFT(
    XrSession session,
    XrControllerModelKeyMSFT modelKey,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint8_t* buffer) {
    XrResult test_result = GenValidUsageInputsXrLoadControllerModelMSFT(session, modelKey, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLoadControllerModelMSFT(session, modelKey, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrGetControllerModelPropertiesMSFT(
XrSession session,
XrControllerModelKeyMSFT modelKey,
XrControllerModelPropertiesMSFT* properties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetControllerModelPropertiesMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetControllerModelPropertiesMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == properties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetControllerModelPropertiesMSFT-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetControllerModelPropertiesMSFT", objects_info,
                                "Invalid NULL for XrControllerModelPropertiesMSFT \"properties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrControllerModelPropertiesMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetControllerModelPropertiesMSFT", objects_info,
                                                        false, true, properties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetControllerModelPropertiesMSFT-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetControllerModelPropertiesMSFT",
                                objects_info,
                                "Command xrGetControllerModelPropertiesMSFT param properties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetControllerModelPropertiesMSFT(
    XrSession session,
    XrControllerModelKeyMSFT modelKey,
    XrControllerModelPropertiesMSFT* properties) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetControllerModelPropertiesMSFT(session, modelKey, properties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetControllerModelPropertiesMSFT(
    XrSession session,
    XrControllerModelKeyMSFT modelKey,
    XrControllerModelPropertiesMSFT* properties) {
    XrResult test_result = GenValidUsageInputsXrGetControllerModelPropertiesMSFT(session, modelKey, properties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetControllerModelPropertiesMSFT(session, modelKey, properties);
}

XrResult GenValidUsageInputsXrGetControllerModelStateMSFT(
XrSession session,
XrControllerModelKeyMSFT modelKey,
XrControllerModelStateMSFT* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetControllerModelStateMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetControllerModelStateMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetControllerModelStateMSFT-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetControllerModelStateMSFT", objects_info,
                                "Invalid NULL for XrControllerModelStateMSFT \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrControllerModelStateMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetControllerModelStateMSFT", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetControllerModelStateMSFT-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetControllerModelStateMSFT",
                                objects_info,
                                "Command xrGetControllerModelStateMSFT param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetControllerModelStateMSFT(
    XrSession session,
    XrControllerModelKeyMSFT modelKey,
    XrControllerModelStateMSFT* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetControllerModelStateMSFT(session, modelKey, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetControllerModelStateMSFT(
    XrSession session,
    XrControllerModelKeyMSFT modelKey,
    XrControllerModelStateMSFT* state) {
    XrResult test_result = GenValidUsageInputsXrGetControllerModelStateMSFT(session, modelKey, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetControllerModelStateMSFT(session, modelKey, state);
}


// ---- XR_MSFT_perception_anchor_interop extension commands
#if defined(XR_USE_PLATFORM_WIN32)

XrResult GenValidUsageInputsXrCreateSpatialAnchorFromPerceptionAnchorMSFT(
XrSession session,
IUnknown* perceptionAnchor,
XrSpatialAnchorMSFT* anchor) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorFromPerceptionAnchorMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFromPerceptionAnchorMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == perceptionAnchor) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorFromPerceptionAnchorMSFT-perceptionAnchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFromPerceptionAnchorMSFT", objects_info,
                                "Invalid NULL for IUnknown \"perceptionAnchor\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSpatialAnchorFromPerceptionAnchorMSFT-perceptionAnchor-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchor) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorFromPerceptionAnchorMSFT-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFromPerceptionAnchorMSFT", objects_info,
                                "Invalid NULL for XrSpatialAnchorMSFT \"anchor\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorFromPerceptionAnchorMSFT(
    XrSession session,
    IUnknown* perceptionAnchor,
    XrSpatialAnchorMSFT* anchor) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorFromPerceptionAnchorMSFT(session, perceptionAnchor, anchor);
        if (XR_SUCCESS == result && nullptr != anchor) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_spatialanchormsft_info.insert(*anchor, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorFromPerceptionAnchorMSFT(
    XrSession session,
    IUnknown* perceptionAnchor,
    XrSpatialAnchorMSFT* anchor) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorFromPerceptionAnchorMSFT(session, perceptionAnchor, anchor);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorFromPerceptionAnchorMSFT(session, perceptionAnchor, anchor);
}

#endif // defined(XR_USE_PLATFORM_WIN32)

#if defined(XR_USE_PLATFORM_WIN32)

XrResult GenValidUsageInputsXrTryGetPerceptionAnchorFromSpatialAnchorMSFT(
XrSession session,
XrSpatialAnchorMSFT anchor,
IUnknown** perceptionAnchor) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrTryGetPerceptionAnchorFromSpatialAnchorMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTryGetPerceptionAnchorFromSpatialAnchorMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(anchor, XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorMSFTHandle(&anchor);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorMSFT handle \"anchor\" ";
                oss << HandleToHexString(anchor);
                CoreValidLogMessage(gen_instance_info, "VUID-xrTryGetPerceptionAnchorFromSpatialAnchorMSFT-anchor-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTryGetPerceptionAnchorFromSpatialAnchorMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT,  MakeHandleGeneric(anchor), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpatialAnchorMSFT ";
            oss_error << HandleToHexString(anchor);
            CoreValidLogMessage(gen_instance_info, "VUID-xrTryGetPerceptionAnchorFromSpatialAnchorMSFT-anchor-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTryGetPerceptionAnchorFromSpatialAnchorMSFT",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == perceptionAnchor) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrTryGetPerceptionAnchorFromSpatialAnchorMSFT-perceptionAnchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTryGetPerceptionAnchorFromSpatialAnchorMSFT", objects_info,
                                "Invalid NULL for IUnknown \"perceptionAnchor\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrTryGetPerceptionAnchorFromSpatialAnchorMSFT-perceptionAnchor-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrTryGetPerceptionAnchorFromSpatialAnchorMSFT(
    XrSession session,
    XrSpatialAnchorMSFT anchor,
    IUnknown** perceptionAnchor) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->TryGetPerceptionAnchorFromSpatialAnchorMSFT(session, anchor, perceptionAnchor);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrTryGetPerceptionAnchorFromSpatialAnchorMSFT(
    XrSession session,
    XrSpatialAnchorMSFT anchor,
    IUnknown** perceptionAnchor) {
    XrResult test_result = GenValidUsageInputsXrTryGetPerceptionAnchorFromSpatialAnchorMSFT(session, anchor, perceptionAnchor);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrTryGetPerceptionAnchorFromSpatialAnchorMSFT(session, anchor, perceptionAnchor);
}

#endif // defined(XR_USE_PLATFORM_WIN32)


// ---- XR_MSFT_composition_layer_reprojection extension commands
XrResult GenValidUsageInputsXrEnumerateReprojectionModesMSFT(
XrInstance instance,
XrSystemId systemId,
XrViewConfigurationType viewConfigurationType,
uint32_t modeCapacityInput,
uint32_t* modeCountOutput,
XrReprojectionModeMSFT* modes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateReprojectionModesMSFT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateReprojectionModesMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrViewConfigurationType value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrEnumerateReprojectionModesMSFT", "xrEnumerateReprojectionModesMSFT", "viewConfigurationType", objects_info, viewConfigurationType)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrViewConfigurationType \"viewConfigurationType\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(viewConfigurationType));
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateReprojectionModesMSFT-viewConfigurationType-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrEnumerateReprojectionModesMSFT",
                                objects_info, oss_enum.str());
        }
        // Optional array must be non-NULL when modeCapacityInput is non-zero
        if (0 != modeCapacityInput && nullptr == modes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateReprojectionModesMSFT-modes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateReprojectionModesMSFT",
                                objects_info,
                                "Command xrEnumerateReprojectionModesMSFT param modes is NULL, but modeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == modeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateReprojectionModesMSFT-modeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateReprojectionModesMSFT", objects_info,
                                "Invalid NULL for uint32_t \"modeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateReprojectionModesMSFT-modeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateReprojectionModesMSFT-modes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateReprojectionModesMSFT(
    XrInstance instance,
    XrSystemId systemId,
    XrViewConfigurationType viewConfigurationType,
    uint32_t modeCapacityInput,
    uint32_t* modeCountOutput,
    XrReprojectionModeMSFT* modes) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateReprojectionModesMSFT(instance, systemId, viewConfigurationType, modeCapacityInput, modeCountOutput, modes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateReprojectionModesMSFT(
    XrInstance instance,
    XrSystemId systemId,
    XrViewConfigurationType viewConfigurationType,
    uint32_t modeCapacityInput,
    uint32_t* modeCountOutput,
    XrReprojectionModeMSFT* modes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateReprojectionModesMSFT(instance, systemId, viewConfigurationType, modeCapacityInput, modeCountOutput, modes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateReprojectionModesMSFT(instance, systemId, viewConfigurationType, modeCapacityInput, modeCountOutput, modes);
}


// ---- XR_FB_swapchain_update_state extension commands
XrResult GenValidUsageInputsXrUpdateSwapchainFB(
XrSwapchain swapchain,
const XrSwapchainStateBaseHeaderFB* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_SWAPCHAIN);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSwapchainHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSwapchain handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrUpdateSwapchainFB-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSwapchainFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSwapchainFB-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSwapchainFB", objects_info,
                                "Invalid NULL for XrSwapchainStateBaseHeaderFB \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate if XrSwapchainStateBaseHeaderFB is a child structure of type XrSwapchainStateFoveationFB and it is valid
        {
            const XrSwapchainStateFoveationFB* new_swapchainstatefoveationfb_value = reinterpret_cast<const XrSwapchainStateFoveationFB*>(state);
            if (new_swapchainstatefoveationfb_value->type == XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSwapchainFB",
                                                                objects_info,false, true, new_swapchainstatefoveationfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrUpdateSwapchainFB param state";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSwapchainFB-state-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSwapchainFB",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
        // Validate if XrSwapchainStateBaseHeaderFB is a child structure of type XrSwapchainStateAndroidSurfaceDimensionsFB and it is valid
        {
            const XrSwapchainStateAndroidSurfaceDimensionsFB* new_swapchainstateandroidsurfacedimensionsfb_value = reinterpret_cast<const XrSwapchainStateAndroidSurfaceDimensionsFB*>(state);
            if (new_swapchainstateandroidsurfacedimensionsfb_value->type == XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSwapchainFB",
                                                                objects_info,false, true, new_swapchainstateandroidsurfacedimensionsfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrUpdateSwapchainFB param state";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSwapchainFB-state-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSwapchainFB",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
        // Validate if XrSwapchainStateBaseHeaderFB is a child structure of type XrSwapchainStateSamplerOpenGLESFB and it is valid
        {
            const XrSwapchainStateSamplerOpenGLESFB* new_swapchainstatesampleropenglesfb_value = reinterpret_cast<const XrSwapchainStateSamplerOpenGLESFB*>(state);
            if (new_swapchainstatesampleropenglesfb_value->type == XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSwapchainFB",
                                                                objects_info,false, true, new_swapchainstatesampleropenglesfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrUpdateSwapchainFB param state";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSwapchainFB-state-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSwapchainFB",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
        // Validate if XrSwapchainStateBaseHeaderFB is a child structure of type XrSwapchainStateSamplerVulkanFB and it is valid
        {
            const XrSwapchainStateSamplerVulkanFB* new_swapchainstatesamplervulkanfb_value = reinterpret_cast<const XrSwapchainStateSamplerVulkanFB*>(state);
            if (new_swapchainstatesamplervulkanfb_value->type == XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSwapchainFB",
                                                                objects_info,false, true, new_swapchainstatesamplervulkanfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrUpdateSwapchainFB param state";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSwapchainFB-state-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSwapchainFB",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
        // Validate that the base-structure XrSwapchainStateBaseHeaderFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSwapchainFB", objects_info,
                                                        true, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSwapchainFB-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSwapchainFB",
                                objects_info,
                                "Command xrUpdateSwapchainFB param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUpdateSwapchainFB(
    XrSwapchain swapchain,
    const XrSwapchainStateBaseHeaderFB* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UpdateSwapchainFB(swapchain, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUpdateSwapchainFB(
    XrSwapchain swapchain,
    const XrSwapchainStateBaseHeaderFB* state) {
    XrResult test_result = GenValidUsageInputsXrUpdateSwapchainFB(swapchain, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUpdateSwapchainFB(swapchain, state);
}

XrResult GenValidUsageInputsXrGetSwapchainStateFB(
XrSwapchain swapchain,
XrSwapchainStateBaseHeaderFB* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_SWAPCHAIN);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSwapchainHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSwapchain handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrGetSwapchainStateFB-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSwapchainStateFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSwapchainStateFB-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSwapchainStateFB", objects_info,
                                "Invalid NULL for XrSwapchainStateBaseHeaderFB \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate if XrSwapchainStateBaseHeaderFB is a child structure of type XrSwapchainStateFoveationFB and it is valid
        {
            XrSwapchainStateFoveationFB* new_swapchainstatefoveationfb_value = reinterpret_cast<XrSwapchainStateFoveationFB*>(state);
            if (new_swapchainstatefoveationfb_value->type == XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrGetSwapchainStateFB",
                                                                objects_info,false, true, new_swapchainstatefoveationfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrGetSwapchainStateFB param state";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrGetSwapchainStateFB-state-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSwapchainStateFB",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
        // Validate if XrSwapchainStateBaseHeaderFB is a child structure of type XrSwapchainStateAndroidSurfaceDimensionsFB and it is valid
        {
            XrSwapchainStateAndroidSurfaceDimensionsFB* new_swapchainstateandroidsurfacedimensionsfb_value = reinterpret_cast<XrSwapchainStateAndroidSurfaceDimensionsFB*>(state);
            if (new_swapchainstateandroidsurfacedimensionsfb_value->type == XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrGetSwapchainStateFB",
                                                                objects_info,false, true, new_swapchainstateandroidsurfacedimensionsfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrGetSwapchainStateFB param state";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrGetSwapchainStateFB-state-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSwapchainStateFB",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
        // Validate if XrSwapchainStateBaseHeaderFB is a child structure of type XrSwapchainStateSamplerOpenGLESFB and it is valid
        {
            XrSwapchainStateSamplerOpenGLESFB* new_swapchainstatesampleropenglesfb_value = reinterpret_cast<XrSwapchainStateSamplerOpenGLESFB*>(state);
            if (new_swapchainstatesampleropenglesfb_value->type == XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrGetSwapchainStateFB",
                                                                objects_info,false, true, new_swapchainstatesampleropenglesfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrGetSwapchainStateFB param state";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrGetSwapchainStateFB-state-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSwapchainStateFB",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
        // Validate if XrSwapchainStateBaseHeaderFB is a child structure of type XrSwapchainStateSamplerVulkanFB and it is valid
        {
            XrSwapchainStateSamplerVulkanFB* new_swapchainstatesamplervulkanfb_value = reinterpret_cast<XrSwapchainStateSamplerVulkanFB*>(state);
            if (new_swapchainstatesamplervulkanfb_value->type == XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrGetSwapchainStateFB",
                                                                objects_info,false, true, new_swapchainstatesamplervulkanfb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrGetSwapchainStateFB param state";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrGetSwapchainStateFB-state-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSwapchainStateFB",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN) && defined(XR_USE_GRAPHICS_API_VULKAN)
        // Validate that the base-structure XrSwapchainStateBaseHeaderFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSwapchainStateFB", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSwapchainStateFB-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSwapchainStateFB",
                                objects_info,
                                "Command xrGetSwapchainStateFB param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSwapchainStateFB(
    XrSwapchain swapchain,
    XrSwapchainStateBaseHeaderFB* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_swapchain_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_swapchain_info = info_with_instance.first;
        (void)gen_swapchain_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSwapchainStateFB(swapchain, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSwapchainStateFB(
    XrSwapchain swapchain,
    XrSwapchainStateBaseHeaderFB* state) {
    XrResult test_result = GenValidUsageInputsXrGetSwapchainStateFB(swapchain, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSwapchainStateFB(swapchain, state);
}


// ---- XR_FB_body_tracking extension commands
XrResult GenValidUsageInputsXrCreateBodyTrackerFB(
XrSession session,
const XrBodyTrackerCreateInfoFB* createInfo,
XrBodyTrackerFB* bodyTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateBodyTrackerFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateBodyTrackerFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerFB", objects_info,
                                "Invalid NULL for XrBodyTrackerCreateInfoFB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyTrackerCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateBodyTrackerFB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateBodyTrackerFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerFB",
                                objects_info,
                                "Command xrCreateBodyTrackerFB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bodyTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateBodyTrackerFB-bodyTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerFB", objects_info,
                                "Invalid NULL for XrBodyTrackerFB \"bodyTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateBodyTrackerFB(
    XrSession session,
    const XrBodyTrackerCreateInfoFB* createInfo,
    XrBodyTrackerFB* bodyTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateBodyTrackerFB(session, createInfo, bodyTracker);
        if (XR_SUCCESS == result && nullptr != bodyTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_bodytrackerfb_info.insert(*bodyTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateBodyTrackerFB(
    XrSession session,
    const XrBodyTrackerCreateInfoFB* createInfo,
    XrBodyTrackerFB* bodyTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateBodyTrackerFB(session, createInfo, bodyTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateBodyTrackerFB(session, createInfo, bodyTracker);
}

XrResult GenValidUsageInputsXrDestroyBodyTrackerFB(
XrBodyTrackerFB bodyTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerFBHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerFB handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyBodyTrackerFB-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyBodyTrackerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyBodyTrackerFB(
    XrBodyTrackerFB bodyTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyBodyTrackerFB(bodyTracker);
        if (XR_SUCCEEDED(result)) {
            g_bodytrackerfb_info.erase(bodyTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyBodyTrackerFB(
    XrBodyTrackerFB bodyTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyBodyTrackerFB(bodyTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyBodyTrackerFB(bodyTracker);
}

XrResult GenValidUsageInputsXrLocateBodyJointsFB(
XrBodyTrackerFB bodyTracker,
const XrBodyJointsLocateInfoFB* locateInfo,
XrBodyJointLocationsFB* locations) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerFBHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerFB handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrLocateBodyJointsFB-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsFB-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsFB", objects_info,
                                "Invalid NULL for XrBodyJointsLocateInfoFB \"locateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyJointsLocateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateBodyJointsFB", objects_info,
                                                        true, true, locateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsFB-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsFB",
                                objects_info,
                                "Command xrLocateBodyJointsFB param locateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locations) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsFB-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsFB", objects_info,
                                "Invalid NULL for XrBodyJointLocationsFB \"locations\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyJointLocationsFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateBodyJointsFB", objects_info,
                                                        false, true, locations);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsFB-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsFB",
                                objects_info,
                                "Command xrLocateBodyJointsFB param locations is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLocateBodyJointsFB(
    XrBodyTrackerFB bodyTracker,
    const XrBodyJointsLocateInfoFB* locateInfo,
    XrBodyJointLocationsFB* locations) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LocateBodyJointsFB(bodyTracker, locateInfo, locations);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLocateBodyJointsFB(
    XrBodyTrackerFB bodyTracker,
    const XrBodyJointsLocateInfoFB* locateInfo,
    XrBodyJointLocationsFB* locations) {
    XrResult test_result = GenValidUsageInputsXrLocateBodyJointsFB(bodyTracker, locateInfo, locations);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLocateBodyJointsFB(bodyTracker, locateInfo, locations);
}

XrResult GenValidUsageInputsXrGetBodySkeletonFB(
XrBodyTrackerFB bodyTracker,
XrBodySkeletonFB* skeleton) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerFBHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerFB handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetBodySkeletonFB-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetBodySkeletonFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == skeleton) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetBodySkeletonFB-skeleton-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetBodySkeletonFB", objects_info,
                                "Invalid NULL for XrBodySkeletonFB \"skeleton\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodySkeletonFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetBodySkeletonFB", objects_info,
                                                        false, true, skeleton);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetBodySkeletonFB-skeleton-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetBodySkeletonFB",
                                objects_info,
                                "Command xrGetBodySkeletonFB param skeleton is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetBodySkeletonFB(
    XrBodyTrackerFB bodyTracker,
    XrBodySkeletonFB* skeleton) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetBodySkeletonFB(bodyTracker, skeleton);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetBodySkeletonFB(
    XrBodyTrackerFB bodyTracker,
    XrBodySkeletonFB* skeleton) {
    XrResult test_result = GenValidUsageInputsXrGetBodySkeletonFB(bodyTracker, skeleton);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetBodySkeletonFB(bodyTracker, skeleton);
}


// ---- XR_MSFT_scene_understanding extension commands
XrResult GenValidUsageInputsXrEnumerateSceneComputeFeaturesMSFT(
XrInstance instance,
XrSystemId systemId,
uint32_t featureCapacityInput,
uint32_t* featureCountOutput,
XrSceneComputeFeatureMSFT* features) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSceneComputeFeaturesMSFT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSceneComputeFeaturesMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when featureCapacityInput is non-zero
        if (0 != featureCapacityInput && nullptr == features) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSceneComputeFeaturesMSFT-features-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSceneComputeFeaturesMSFT",
                                objects_info,
                                "Command xrEnumerateSceneComputeFeaturesMSFT param features is NULL, but featureCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == featureCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSceneComputeFeaturesMSFT-featureCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSceneComputeFeaturesMSFT", objects_info,
                                "Invalid NULL for uint32_t \"featureCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSceneComputeFeaturesMSFT-featureCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSceneComputeFeaturesMSFT-features-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSceneComputeFeaturesMSFT(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t featureCapacityInput,
    uint32_t* featureCountOutput,
    XrSceneComputeFeatureMSFT* features) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSceneComputeFeaturesMSFT(instance, systemId, featureCapacityInput, featureCountOutput, features);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSceneComputeFeaturesMSFT(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t featureCapacityInput,
    uint32_t* featureCountOutput,
    XrSceneComputeFeatureMSFT* features) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSceneComputeFeaturesMSFT(instance, systemId, featureCapacityInput, featureCountOutput, features);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSceneComputeFeaturesMSFT(instance, systemId, featureCapacityInput, featureCountOutput, features);
}

XrResult GenValidUsageInputsXrCreateSceneObserverMSFT(
XrSession session,
const XrSceneObserverCreateInfoMSFT* createInfo,
XrSceneObserverMSFT* sceneObserver) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSceneObserverMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneObserverMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrSceneObserverCreateInfoMSFT is valid
        if (nullptr != createInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSceneObserverMSFT",
                                                            objects_info, false, true, createInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneObserverMSFT-createInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneObserverMSFT",
                                    objects_info,
                                    "Command xrCreateSceneObserverMSFT param createInfo is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == sceneObserver) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneObserverMSFT-sceneObserver-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneObserverMSFT", objects_info,
                                "Invalid NULL for XrSceneObserverMSFT \"sceneObserver\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSceneObserverMSFT(
    XrSession session,
    const XrSceneObserverCreateInfoMSFT* createInfo,
    XrSceneObserverMSFT* sceneObserver) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSceneObserverMSFT(session, createInfo, sceneObserver);
        if (XR_SUCCESS == result && nullptr != sceneObserver) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_sceneobservermsft_info.insert(*sceneObserver, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSceneObserverMSFT(
    XrSession session,
    const XrSceneObserverCreateInfoMSFT* createInfo,
    XrSceneObserverMSFT* sceneObserver) {
    XrResult test_result = GenValidUsageInputsXrCreateSceneObserverMSFT(session, createInfo, sceneObserver);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSceneObserverMSFT(session, createInfo, sceneObserver);
}

XrResult GenValidUsageInputsXrDestroySceneObserverMSFT(
XrSceneObserverMSFT sceneObserver) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(sceneObserver, XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneObserverMSFTHandle(&sceneObserver);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneObserverMSFT handle \"sceneObserver\" ";
                oss << HandleToHexString(sceneObserver);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySceneObserverMSFT-sceneObserver-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySceneObserverMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySceneObserverMSFT(
    XrSceneObserverMSFT sceneObserver) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySceneObserverMSFT(sceneObserver);
        if (XR_SUCCEEDED(result)) {
            g_sceneobservermsft_info.erase(sceneObserver);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySceneObserverMSFT(
    XrSceneObserverMSFT sceneObserver) {
    XrResult test_result = GenValidUsageInputsXrDestroySceneObserverMSFT(sceneObserver);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySceneObserverMSFT(sceneObserver);
}

XrResult GenValidUsageInputsXrCreateSceneMSFT(
XrSceneObserverMSFT sceneObserver,
const XrSceneCreateInfoMSFT* createInfo,
XrSceneMSFT* scene) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(sceneObserver, XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneObserverMSFTHandle(&sceneObserver);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneObserverMSFT handle \"sceneObserver\" ";
                oss << HandleToHexString(sceneObserver);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSceneMSFT-sceneObserver-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrSceneCreateInfoMSFT is valid
        if (nullptr != createInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSceneMSFT",
                                                            objects_info, false, true, createInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneMSFT-createInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMSFT",
                                    objects_info,
                                    "Command xrCreateSceneMSFT param createInfo is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == scene) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneMSFT-scene-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMSFT", objects_info,
                                "Invalid NULL for XrSceneMSFT \"scene\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSceneMSFT(
    XrSceneObserverMSFT sceneObserver,
    const XrSceneCreateInfoMSFT* createInfo,
    XrSceneMSFT* scene) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSceneMSFT(sceneObserver, createInfo, scene);
        if (XR_SUCCESS == result && nullptr != scene) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT;
            handle_info->direct_parent_handle = MakeHandleGeneric(sceneObserver);
            g_scenemsft_info.insert(*scene, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSceneMSFT(
    XrSceneObserverMSFT sceneObserver,
    const XrSceneCreateInfoMSFT* createInfo,
    XrSceneMSFT* scene) {
    XrResult test_result = GenValidUsageInputsXrCreateSceneMSFT(sceneObserver, createInfo, scene);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSceneMSFT(sceneObserver, createInfo, scene);
}

XrResult GenValidUsageInputsXrDestroySceneMSFT(
XrSceneMSFT scene) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(scene, XR_OBJECT_TYPE_SCENE_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMSFTHandle(&scene);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMSFT handle \"scene\" ";
                oss << HandleToHexString(scene);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySceneMSFT-scene-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySceneMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySceneMSFT(
    XrSceneMSFT scene) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySceneMSFT(scene);
        if (XR_SUCCEEDED(result)) {
            g_scenemsft_info.erase(scene);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySceneMSFT(
    XrSceneMSFT scene) {
    XrResult test_result = GenValidUsageInputsXrDestroySceneMSFT(scene);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySceneMSFT(scene);
}

XrResult GenValidUsageInputsXrComputeNewSceneMSFT(
XrSceneObserverMSFT sceneObserver,
const XrNewSceneComputeInfoMSFT* computeInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(sceneObserver, XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneObserverMSFTHandle(&sceneObserver);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneObserverMSFT handle \"sceneObserver\" ";
                oss << HandleToHexString(sceneObserver);
                CoreValidLogMessage(nullptr, "VUID-xrComputeNewSceneMSFT-sceneObserver-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrComputeNewSceneMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == computeInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrComputeNewSceneMSFT-computeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrComputeNewSceneMSFT", objects_info,
                                "Invalid NULL for XrNewSceneComputeInfoMSFT \"computeInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrNewSceneComputeInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrComputeNewSceneMSFT", objects_info,
                                                        true, true, computeInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrComputeNewSceneMSFT-computeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrComputeNewSceneMSFT",
                                objects_info,
                                "Command xrComputeNewSceneMSFT param computeInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrComputeNewSceneMSFT(
    XrSceneObserverMSFT sceneObserver,
    const XrNewSceneComputeInfoMSFT* computeInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ComputeNewSceneMSFT(sceneObserver, computeInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrComputeNewSceneMSFT(
    XrSceneObserverMSFT sceneObserver,
    const XrNewSceneComputeInfoMSFT* computeInfo) {
    XrResult test_result = GenValidUsageInputsXrComputeNewSceneMSFT(sceneObserver, computeInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrComputeNewSceneMSFT(sceneObserver, computeInfo);
}

XrResult GenValidUsageInputsXrGetSceneComputeStateMSFT(
XrSceneObserverMSFT sceneObserver,
XrSceneComputeStateMSFT* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(sceneObserver, XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneObserverMSFTHandle(&sceneObserver);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneObserverMSFT handle \"sceneObserver\" ";
                oss << HandleToHexString(sceneObserver);
                CoreValidLogMessage(nullptr, "VUID-xrGetSceneComputeStateMSFT-sceneObserver-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneComputeStateMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneComputeStateMSFT-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneComputeStateMSFT", objects_info,
                                "Invalid NULL for XrSceneComputeStateMSFT \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Make sure the enum type XrSceneComputeStateMSFT value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetSceneComputeStateMSFT", "xrGetSceneComputeStateMSFT", "state", objects_info, *state)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrSceneComputeStateMSFT \"state\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(*state));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneComputeStateMSFT-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetSceneComputeStateMSFT",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSceneComputeStateMSFT(
    XrSceneObserverMSFT sceneObserver,
    XrSceneComputeStateMSFT* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSceneComputeStateMSFT(sceneObserver, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSceneComputeStateMSFT(
    XrSceneObserverMSFT sceneObserver,
    XrSceneComputeStateMSFT* state) {
    XrResult test_result = GenValidUsageInputsXrGetSceneComputeStateMSFT(sceneObserver, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSceneComputeStateMSFT(sceneObserver, state);
}

XrResult GenValidUsageInputsXrGetSceneComponentsMSFT(
XrSceneMSFT scene,
const XrSceneComponentsGetInfoMSFT* getInfo,
XrSceneComponentsMSFT* components) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(scene, XR_OBJECT_TYPE_SCENE_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMSFTHandle(&scene);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMSFT handle \"scene\" ";
                oss << HandleToHexString(scene);
                CoreValidLogMessage(nullptr, "VUID-xrGetSceneComponentsMSFT-scene-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneComponentsMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneComponentsMSFT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneComponentsMSFT", objects_info,
                                "Invalid NULL for XrSceneComponentsGetInfoMSFT \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneComponentsGetInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSceneComponentsMSFT", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneComponentsMSFT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneComponentsMSFT",
                                objects_info,
                                "Command xrGetSceneComponentsMSFT param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == components) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneComponentsMSFT-components-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneComponentsMSFT", objects_info,
                                "Invalid NULL for XrSceneComponentsMSFT \"components\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneComponentsMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSceneComponentsMSFT", objects_info,
                                                        false, true, components);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneComponentsMSFT-components-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneComponentsMSFT",
                                objects_info,
                                "Command xrGetSceneComponentsMSFT param components is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSceneComponentsMSFT(
    XrSceneMSFT scene,
    const XrSceneComponentsGetInfoMSFT* getInfo,
    XrSceneComponentsMSFT* components) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSceneComponentsMSFT(scene, getInfo, components);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSceneComponentsMSFT(
    XrSceneMSFT scene,
    const XrSceneComponentsGetInfoMSFT* getInfo,
    XrSceneComponentsMSFT* components) {
    XrResult test_result = GenValidUsageInputsXrGetSceneComponentsMSFT(scene, getInfo, components);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSceneComponentsMSFT(scene, getInfo, components);
}

XrResult GenValidUsageInputsXrLocateSceneComponentsMSFT(
XrSceneMSFT scene,
const XrSceneComponentsLocateInfoMSFT* locateInfo,
XrSceneComponentLocationsMSFT* locations) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(scene, XR_OBJECT_TYPE_SCENE_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMSFTHandle(&scene);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMSFT handle \"scene\" ";
                oss << HandleToHexString(scene);
                CoreValidLogMessage(nullptr, "VUID-xrLocateSceneComponentsMSFT-scene-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSceneComponentsMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSceneComponentsMSFT-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSceneComponentsMSFT", objects_info,
                                "Invalid NULL for XrSceneComponentsLocateInfoMSFT \"locateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneComponentsLocateInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateSceneComponentsMSFT", objects_info,
                                                        true, true, locateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSceneComponentsMSFT-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSceneComponentsMSFT",
                                objects_info,
                                "Command xrLocateSceneComponentsMSFT param locateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locations) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSceneComponentsMSFT-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSceneComponentsMSFT", objects_info,
                                "Invalid NULL for XrSceneComponentLocationsMSFT \"locations\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneComponentLocationsMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateSceneComponentsMSFT", objects_info,
                                                        false, true, locations);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateSceneComponentsMSFT-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateSceneComponentsMSFT",
                                objects_info,
                                "Command xrLocateSceneComponentsMSFT param locations is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLocateSceneComponentsMSFT(
    XrSceneMSFT scene,
    const XrSceneComponentsLocateInfoMSFT* locateInfo,
    XrSceneComponentLocationsMSFT* locations) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LocateSceneComponentsMSFT(scene, locateInfo, locations);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLocateSceneComponentsMSFT(
    XrSceneMSFT scene,
    const XrSceneComponentsLocateInfoMSFT* locateInfo,
    XrSceneComponentLocationsMSFT* locations) {
    XrResult test_result = GenValidUsageInputsXrLocateSceneComponentsMSFT(scene, locateInfo, locations);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLocateSceneComponentsMSFT(scene, locateInfo, locations);
}

XrResult GenValidUsageInputsXrGetSceneMeshBuffersMSFT(
XrSceneMSFT scene,
const XrSceneMeshBuffersGetInfoMSFT* getInfo,
XrSceneMeshBuffersMSFT* buffers) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(scene, XR_OBJECT_TYPE_SCENE_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMSFTHandle(&scene);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMSFT handle \"scene\" ";
                oss << HandleToHexString(scene);
                CoreValidLogMessage(nullptr, "VUID-xrGetSceneMeshBuffersMSFT-scene-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMeshBuffersMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMeshBuffersMSFT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMeshBuffersMSFT", objects_info,
                                "Invalid NULL for XrSceneMeshBuffersGetInfoMSFT \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneMeshBuffersGetInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSceneMeshBuffersMSFT", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMeshBuffersMSFT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMeshBuffersMSFT",
                                objects_info,
                                "Command xrGetSceneMeshBuffersMSFT param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == buffers) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMeshBuffersMSFT-buffers-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMeshBuffersMSFT", objects_info,
                                "Invalid NULL for XrSceneMeshBuffersMSFT \"buffers\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneMeshBuffersMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSceneMeshBuffersMSFT", objects_info,
                                                        false, true, buffers);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMeshBuffersMSFT-buffers-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMeshBuffersMSFT",
                                objects_info,
                                "Command xrGetSceneMeshBuffersMSFT param buffers is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSceneMeshBuffersMSFT(
    XrSceneMSFT scene,
    const XrSceneMeshBuffersGetInfoMSFT* getInfo,
    XrSceneMeshBuffersMSFT* buffers) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSceneMeshBuffersMSFT(scene, getInfo, buffers);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSceneMeshBuffersMSFT(
    XrSceneMSFT scene,
    const XrSceneMeshBuffersGetInfoMSFT* getInfo,
    XrSceneMeshBuffersMSFT* buffers) {
    XrResult test_result = GenValidUsageInputsXrGetSceneMeshBuffersMSFT(scene, getInfo, buffers);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSceneMeshBuffersMSFT(scene, getInfo, buffers);
}


// ---- XR_MSFT_scene_understanding_serialization extension commands
XrResult GenValidUsageInputsXrDeserializeSceneMSFT(
XrSceneObserverMSFT sceneObserver,
const XrSceneDeserializeInfoMSFT* deserializeInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(sceneObserver, XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneObserverMSFTHandle(&sceneObserver);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneObserverMSFT handle \"sceneObserver\" ";
                oss << HandleToHexString(sceneObserver);
                CoreValidLogMessage(nullptr, "VUID-xrDeserializeSceneMSFT-sceneObserver-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeserializeSceneMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == deserializeInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDeserializeSceneMSFT-deserializeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeserializeSceneMSFT", objects_info,
                                "Invalid NULL for XrSceneDeserializeInfoMSFT \"deserializeInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneDeserializeInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrDeserializeSceneMSFT", objects_info,
                                                        true, true, deserializeInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDeserializeSceneMSFT-deserializeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeserializeSceneMSFT",
                                objects_info,
                                "Command xrDeserializeSceneMSFT param deserializeInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDeserializeSceneMSFT(
    XrSceneObserverMSFT sceneObserver,
    const XrSceneDeserializeInfoMSFT* deserializeInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sceneobservermsft_info.getWithInstanceInfo(sceneObserver);
        GenValidUsageXrHandleInfo *gen_sceneobservermsft_info = info_with_instance.first;
        (void)gen_sceneobservermsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DeserializeSceneMSFT(sceneObserver, deserializeInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDeserializeSceneMSFT(
    XrSceneObserverMSFT sceneObserver,
    const XrSceneDeserializeInfoMSFT* deserializeInfo) {
    XrResult test_result = GenValidUsageInputsXrDeserializeSceneMSFT(sceneObserver, deserializeInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDeserializeSceneMSFT(sceneObserver, deserializeInfo);
}

XrResult GenValidUsageInputsXrGetSerializedSceneFragmentDataMSFT(
XrSceneMSFT scene,
const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo,
uint32_t countInput,
uint32_t* readOutput,
uint8_t* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(scene, XR_OBJECT_TYPE_SCENE_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMSFTHandle(&scene);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMSFT handle \"scene\" ";
                oss << HandleToHexString(scene);
                CoreValidLogMessage(nullptr, "VUID-xrGetSerializedSceneFragmentDataMSFT-scene-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSerializedSceneFragmentDataMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSerializedSceneFragmentDataMSFT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSerializedSceneFragmentDataMSFT", objects_info,
                                "Invalid NULL for XrSerializedSceneFragmentDataGetInfoMSFT \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSerializedSceneFragmentDataGetInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSerializedSceneFragmentDataMSFT", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSerializedSceneFragmentDataMSFT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSerializedSceneFragmentDataMSFT",
                                objects_info,
                                "Command xrGetSerializedSceneFragmentDataMSFT param getInfo is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when countInput is non-zero
        if (0 != countInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSerializedSceneFragmentDataMSFT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSerializedSceneFragmentDataMSFT",
                                objects_info,
                                "Command xrGetSerializedSceneFragmentDataMSFT param buffer is NULL, but countInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == readOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSerializedSceneFragmentDataMSFT-readOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSerializedSceneFragmentDataMSFT", objects_info,
                                "Invalid NULL for uint32_t \"readOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSerializedSceneFragmentDataMSFT-readOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSerializedSceneFragmentDataMSFT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSerializedSceneFragmentDataMSFT(
    XrSceneMSFT scene,
    const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo,
    uint32_t countInput,
    uint32_t* readOutput,
    uint8_t* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSerializedSceneFragmentDataMSFT(scene, getInfo, countInput, readOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSerializedSceneFragmentDataMSFT(
    XrSceneMSFT scene,
    const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo,
    uint32_t countInput,
    uint32_t* readOutput,
    uint8_t* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSerializedSceneFragmentDataMSFT(scene, getInfo, countInput, readOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSerializedSceneFragmentDataMSFT(scene, getInfo, countInput, readOutput, buffer);
}


// ---- XR_FB_display_refresh_rate extension commands
XrResult GenValidUsageInputsXrEnumerateDisplayRefreshRatesFB(
XrSession session,
uint32_t displayRefreshRateCapacityInput,
uint32_t* displayRefreshRateCountOutput,
float* displayRefreshRates) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateDisplayRefreshRatesFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateDisplayRefreshRatesFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when displayRefreshRateCapacityInput is non-zero
        if (0 != displayRefreshRateCapacityInput && nullptr == displayRefreshRates) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateDisplayRefreshRatesFB-displayRefreshRates-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateDisplayRefreshRatesFB",
                                objects_info,
                                "Command xrEnumerateDisplayRefreshRatesFB param displayRefreshRates is NULL, but displayRefreshRateCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == displayRefreshRateCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateDisplayRefreshRatesFB-displayRefreshRateCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateDisplayRefreshRatesFB", objects_info,
                                "Invalid NULL for uint32_t \"displayRefreshRateCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateDisplayRefreshRatesFB-displayRefreshRateCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrEnumerateDisplayRefreshRatesFB-displayRefreshRates-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateDisplayRefreshRatesFB(
    XrSession session,
    uint32_t displayRefreshRateCapacityInput,
    uint32_t* displayRefreshRateCountOutput,
    float* displayRefreshRates) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateDisplayRefreshRatesFB(session, displayRefreshRateCapacityInput, displayRefreshRateCountOutput, displayRefreshRates);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateDisplayRefreshRatesFB(
    XrSession session,
    uint32_t displayRefreshRateCapacityInput,
    uint32_t* displayRefreshRateCountOutput,
    float* displayRefreshRates) {
    XrResult test_result = GenValidUsageInputsXrEnumerateDisplayRefreshRatesFB(session, displayRefreshRateCapacityInput, displayRefreshRateCountOutput, displayRefreshRates);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateDisplayRefreshRatesFB(session, displayRefreshRateCapacityInput, displayRefreshRateCountOutput, displayRefreshRates);
}

XrResult GenValidUsageInputsXrGetDisplayRefreshRateFB(
XrSession session,
float* displayRefreshRate) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetDisplayRefreshRateFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetDisplayRefreshRateFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == displayRefreshRate) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetDisplayRefreshRateFB-displayRefreshRate-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetDisplayRefreshRateFB", objects_info,
                                "Invalid NULL for float \"displayRefreshRate\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetDisplayRefreshRateFB-displayRefreshRate-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetDisplayRefreshRateFB(
    XrSession session,
    float* displayRefreshRate) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetDisplayRefreshRateFB(session, displayRefreshRate);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetDisplayRefreshRateFB(
    XrSession session,
    float* displayRefreshRate) {
    XrResult test_result = GenValidUsageInputsXrGetDisplayRefreshRateFB(session, displayRefreshRate);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetDisplayRefreshRateFB(session, displayRefreshRate);
}

XrResult GenValidUsageInputsXrRequestDisplayRefreshRateFB(
XrSession session,
float displayRefreshRate) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrRequestDisplayRefreshRateFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestDisplayRefreshRateFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestDisplayRefreshRateFB(
    XrSession session,
    float displayRefreshRate) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestDisplayRefreshRateFB(session, displayRefreshRate);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestDisplayRefreshRateFB(
    XrSession session,
    float displayRefreshRate) {
    XrResult test_result = GenValidUsageInputsXrRequestDisplayRefreshRateFB(session, displayRefreshRate);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestDisplayRefreshRateFB(session, displayRefreshRate);
}


// ---- XR_HTCX_vive_tracker_interaction extension commands
XrResult GenValidUsageInputsXrEnumerateViveTrackerPathsHTCX(
XrInstance instance,
uint32_t pathCapacityInput,
uint32_t* pathCountOutput,
XrViveTrackerPathsHTCX* paths) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateViveTrackerPathsHTCX-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViveTrackerPathsHTCX",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when pathCapacityInput is non-zero
        if (0 != pathCapacityInput && nullptr == paths) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateViveTrackerPathsHTCX-paths-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViveTrackerPathsHTCX",
                                objects_info,
                                "Command xrEnumerateViveTrackerPathsHTCX param paths is NULL, but pathCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == pathCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateViveTrackerPathsHTCX-pathCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViveTrackerPathsHTCX", objects_info,
                                "Invalid NULL for uint32_t \"pathCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateViveTrackerPathsHTCX-pathCountOutput-parameter" type
        if (paths) {
            for (uint32_t value_paths_inc = 0; value_paths_inc < pathCapacityInput; ++value_paths_inc) {
                // Validate that the structure XrViveTrackerPathsHTCX is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateViveTrackerPathsHTCX", objects_info,
                                                                true, true, &paths[value_paths_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateViveTrackerPathsHTCX-paths-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateViveTrackerPathsHTCX",
                                        objects_info,
                                        "Command xrEnumerateViveTrackerPathsHTCX param paths is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateViveTrackerPathsHTCX(
    XrInstance instance,
    uint32_t pathCapacityInput,
    uint32_t* pathCountOutput,
    XrViveTrackerPathsHTCX* paths) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateViveTrackerPathsHTCX(instance, pathCapacityInput, pathCountOutput, paths);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateViveTrackerPathsHTCX(
    XrInstance instance,
    uint32_t pathCapacityInput,
    uint32_t* pathCountOutput,
    XrViveTrackerPathsHTCX* paths) {
    XrResult test_result = GenValidUsageInputsXrEnumerateViveTrackerPathsHTCX(instance, pathCapacityInput, pathCountOutput, paths);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateViveTrackerPathsHTCX(instance, pathCapacityInput, pathCountOutput, paths);
}


// ---- XR_HTC_facial_tracking extension commands
XrResult GenValidUsageInputsXrCreateFacialTrackerHTC(
XrSession session,
const XrFacialTrackerCreateInfoHTC* createInfo,
XrFacialTrackerHTC* facialTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateFacialTrackerHTC-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFacialTrackerHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFacialTrackerHTC-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFacialTrackerHTC", objects_info,
                                "Invalid NULL for XrFacialTrackerCreateInfoHTC \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFacialTrackerCreateInfoHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateFacialTrackerHTC", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFacialTrackerHTC-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFacialTrackerHTC",
                                objects_info,
                                "Command xrCreateFacialTrackerHTC param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == facialTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFacialTrackerHTC-facialTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFacialTrackerHTC", objects_info,
                                "Invalid NULL for XrFacialTrackerHTC \"facialTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateFacialTrackerHTC(
    XrSession session,
    const XrFacialTrackerCreateInfoHTC* createInfo,
    XrFacialTrackerHTC* facialTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateFacialTrackerHTC(session, createInfo, facialTracker);
        if (XR_SUCCESS == result && nullptr != facialTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_facialtrackerhtc_info.insert(*facialTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateFacialTrackerHTC(
    XrSession session,
    const XrFacialTrackerCreateInfoHTC* createInfo,
    XrFacialTrackerHTC* facialTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateFacialTrackerHTC(session, createInfo, facialTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateFacialTrackerHTC(session, createInfo, facialTracker);
}

XrResult GenValidUsageInputsXrDestroyFacialTrackerHTC(
XrFacialTrackerHTC facialTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(facialTracker, XR_OBJECT_TYPE_FACIAL_TRACKER_HTC);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFacialTrackerHTCHandle(&facialTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFacialTrackerHTC handle \"facialTracker\" ";
                oss << HandleToHexString(facialTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyFacialTrackerHTC-facialTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyFacialTrackerHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facialtrackerhtc_info.getWithInstanceInfo(facialTracker);
        GenValidUsageXrHandleInfo *gen_facialtrackerhtc_info = info_with_instance.first;
        (void)gen_facialtrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyFacialTrackerHTC(
    XrFacialTrackerHTC facialTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facialtrackerhtc_info.getWithInstanceInfo(facialTracker);
        GenValidUsageXrHandleInfo *gen_facialtrackerhtc_info = info_with_instance.first;
        (void)gen_facialtrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyFacialTrackerHTC(facialTracker);
        if (XR_SUCCEEDED(result)) {
            g_facialtrackerhtc_info.erase(facialTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyFacialTrackerHTC(
    XrFacialTrackerHTC facialTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyFacialTrackerHTC(facialTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyFacialTrackerHTC(facialTracker);
}

XrResult GenValidUsageInputsXrGetFacialExpressionsHTC(
XrFacialTrackerHTC facialTracker,
XrFacialExpressionsHTC* facialExpressions) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(facialTracker, XR_OBJECT_TYPE_FACIAL_TRACKER_HTC);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFacialTrackerHTCHandle(&facialTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFacialTrackerHTC handle \"facialTracker\" ";
                oss << HandleToHexString(facialTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetFacialExpressionsHTC-facialTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialExpressionsHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facialtrackerhtc_info.getWithInstanceInfo(facialTracker);
        GenValidUsageXrHandleInfo *gen_facialtrackerhtc_info = info_with_instance.first;
        (void)gen_facialtrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == facialExpressions) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialExpressionsHTC-facialExpressions-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialExpressionsHTC", objects_info,
                                "Invalid NULL for XrFacialExpressionsHTC \"facialExpressions\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFacialExpressionsHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFacialExpressionsHTC", objects_info,
                                                        false, true, facialExpressions);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialExpressionsHTC-facialExpressions-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialExpressionsHTC",
                                objects_info,
                                "Command xrGetFacialExpressionsHTC param facialExpressions is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFacialExpressionsHTC(
    XrFacialTrackerHTC facialTracker,
    XrFacialExpressionsHTC* facialExpressions) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facialtrackerhtc_info.getWithInstanceInfo(facialTracker);
        GenValidUsageXrHandleInfo *gen_facialtrackerhtc_info = info_with_instance.first;
        (void)gen_facialtrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFacialExpressionsHTC(facialTracker, facialExpressions);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFacialExpressionsHTC(
    XrFacialTrackerHTC facialTracker,
    XrFacialExpressionsHTC* facialExpressions) {
    XrResult test_result = GenValidUsageInputsXrGetFacialExpressionsHTC(facialTracker, facialExpressions);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFacialExpressionsHTC(facialTracker, facialExpressions);
}


// ---- XR_FB_color_space extension commands
XrResult GenValidUsageInputsXrEnumerateColorSpacesFB(
XrSession session,
uint32_t colorSpaceCapacityInput,
uint32_t* colorSpaceCountOutput,
XrColorSpaceFB* colorSpaces) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateColorSpacesFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateColorSpacesFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when colorSpaceCapacityInput is non-zero
        if (0 != colorSpaceCapacityInput && nullptr == colorSpaces) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateColorSpacesFB-colorSpaces-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateColorSpacesFB",
                                objects_info,
                                "Command xrEnumerateColorSpacesFB param colorSpaces is NULL, but colorSpaceCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == colorSpaceCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateColorSpacesFB-colorSpaceCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateColorSpacesFB", objects_info,
                                "Invalid NULL for uint32_t \"colorSpaceCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateColorSpacesFB-colorSpaceCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateColorSpacesFB-colorSpaces-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateColorSpacesFB(
    XrSession session,
    uint32_t colorSpaceCapacityInput,
    uint32_t* colorSpaceCountOutput,
    XrColorSpaceFB* colorSpaces) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateColorSpacesFB(session, colorSpaceCapacityInput, colorSpaceCountOutput, colorSpaces);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateColorSpacesFB(
    XrSession session,
    uint32_t colorSpaceCapacityInput,
    uint32_t* colorSpaceCountOutput,
    XrColorSpaceFB* colorSpaces) {
    XrResult test_result = GenValidUsageInputsXrEnumerateColorSpacesFB(session, colorSpaceCapacityInput, colorSpaceCountOutput, colorSpaces);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateColorSpacesFB(session, colorSpaceCapacityInput, colorSpaceCountOutput, colorSpaces);
}

XrResult GenValidUsageInputsXrSetColorSpaceFB(
XrSession session,
const XrColorSpaceFB colorSpace) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetColorSpaceFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetColorSpaceFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrColorSpaceFB value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrSetColorSpaceFB", "xrSetColorSpaceFB", "colorSpace", objects_info, colorSpace)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrColorSpaceFB \"colorSpace\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(colorSpace));
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetColorSpaceFB-colorSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrSetColorSpaceFB",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetColorSpaceFB(
    XrSession session,
    const XrColorSpaceFB colorSpace) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetColorSpaceFB(session, colorSpace);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetColorSpaceFB(
    XrSession session,
    const XrColorSpaceFB colorSpace) {
    XrResult test_result = GenValidUsageInputsXrSetColorSpaceFB(session, colorSpace);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetColorSpaceFB(session, colorSpace);
}


// ---- XR_FB_hand_tracking_mesh extension commands
XrResult GenValidUsageInputsXrGetHandMeshFB(
XrHandTrackerEXT handTracker,
XrHandTrackingMeshFB* mesh) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handTracker, XR_OBJECT_TYPE_HAND_TRACKER_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrHandTrackerEXTHandle(&handTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrHandTrackerEXT handle \"handTracker\" ";
                oss << HandleToHexString(handTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetHandMeshFB-handTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetHandMeshFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == mesh) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetHandMeshFB-mesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetHandMeshFB", objects_info,
                                "Invalid NULL for XrHandTrackingMeshFB \"mesh\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHandTrackingMeshFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetHandMeshFB", objects_info,
                                                        false, true, mesh);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetHandMeshFB-mesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetHandMeshFB",
                                objects_info,
                                "Command xrGetHandMeshFB param mesh is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetHandMeshFB(
    XrHandTrackerEXT handTracker,
    XrHandTrackingMeshFB* mesh) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetHandMeshFB(handTracker, mesh);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetHandMeshFB(
    XrHandTrackerEXT handTracker,
    XrHandTrackingMeshFB* mesh) {
    XrResult test_result = GenValidUsageInputsXrGetHandMeshFB(handTracker, mesh);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetHandMeshFB(handTracker, mesh);
}


// ---- XR_FB_spatial_entity extension commands
XrResult GenValidUsageInputsXrCreateSpatialAnchorFB(
XrSession session,
const XrSpatialAnchorCreateInfoFB* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFB", objects_info,
                                "Invalid NULL for XrSpatialAnchorCreateInfoFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFB",
                                objects_info,
                                "Command xrCreateSpatialAnchorFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorFB-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFB", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSpatialAnchorFB-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorFB(
    XrSession session,
    const XrSpatialAnchorCreateInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorFB(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorFB(
    XrSession session,
    const XrSpatialAnchorCreateInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorFB(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorFB(session, info, requestId);
}

XrResult GenValidUsageInputsXrGetSpaceUuidFB(
XrSpace space,
XrUuidEXT* uuid) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceUuidFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceUuidFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == uuid) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceUuidFB-uuid-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceUuidFB", objects_info,
                                "Invalid NULL for XrUuidEXT \"uuid\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpaceUuidFB-uuid-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceUuidFB(
    XrSpace space,
    XrUuidEXT* uuid) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceUuidFB(space, uuid);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceUuidFB(
    XrSpace space,
    XrUuidEXT* uuid) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceUuidFB(space, uuid);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceUuidFB(space, uuid);
}

XrResult GenValidUsageInputsXrEnumerateSpaceSupportedComponentsFB(
XrSpace space,
uint32_t componentTypeCapacityInput,
uint32_t* componentTypeCountOutput,
XrSpaceComponentTypeFB* componentTypes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSpaceSupportedComponentsFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpaceSupportedComponentsFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when componentTypeCapacityInput is non-zero
        if (0 != componentTypeCapacityInput && nullptr == componentTypes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpaceSupportedComponentsFB-componentTypes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpaceSupportedComponentsFB",
                                objects_info,
                                "Command xrEnumerateSpaceSupportedComponentsFB param componentTypes is NULL, but componentTypeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == componentTypeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpaceSupportedComponentsFB-componentTypeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpaceSupportedComponentsFB", objects_info,
                                "Invalid NULL for uint32_t \"componentTypeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSpaceSupportedComponentsFB-componentTypeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSpaceSupportedComponentsFB-componentTypes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSpaceSupportedComponentsFB(
    XrSpace space,
    uint32_t componentTypeCapacityInput,
    uint32_t* componentTypeCountOutput,
    XrSpaceComponentTypeFB* componentTypes) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateSpaceSupportedComponentsFB(space, componentTypeCapacityInput, componentTypeCountOutput, componentTypes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSpaceSupportedComponentsFB(
    XrSpace space,
    uint32_t componentTypeCapacityInput,
    uint32_t* componentTypeCountOutput,
    XrSpaceComponentTypeFB* componentTypes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSpaceSupportedComponentsFB(space, componentTypeCapacityInput, componentTypeCountOutput, componentTypes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSpaceSupportedComponentsFB(space, componentTypeCapacityInput, componentTypeCountOutput, componentTypes);
}

XrResult GenValidUsageInputsXrSetSpaceComponentStatusFB(
XrSpace space,
const XrSpaceComponentStatusSetInfoFB* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(nullptr, "VUID-xrSetSpaceComponentStatusFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetSpaceComponentStatusFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetSpaceComponentStatusFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetSpaceComponentStatusFB", objects_info,
                                "Invalid NULL for XrSpaceComponentStatusSetInfoFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceComponentStatusSetInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetSpaceComponentStatusFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetSpaceComponentStatusFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetSpaceComponentStatusFB",
                                objects_info,
                                "Command xrSetSpaceComponentStatusFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetSpaceComponentStatusFB-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetSpaceComponentStatusFB", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrSetSpaceComponentStatusFB-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetSpaceComponentStatusFB(
    XrSpace space,
    const XrSpaceComponentStatusSetInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetSpaceComponentStatusFB(space, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetSpaceComponentStatusFB(
    XrSpace space,
    const XrSpaceComponentStatusSetInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrSetSpaceComponentStatusFB(space, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetSpaceComponentStatusFB(space, info, requestId);
}

XrResult GenValidUsageInputsXrGetSpaceComponentStatusFB(
XrSpace space,
XrSpaceComponentTypeFB componentType,
XrSpaceComponentStatusFB* status) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceComponentStatusFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceComponentStatusFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrSpaceComponentTypeFB value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetSpaceComponentStatusFB", "xrGetSpaceComponentStatusFB", "componentType", objects_info, componentType)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrSpaceComponentTypeFB \"componentType\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(componentType));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceComponentStatusFB-componentType-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetSpaceComponentStatusFB",
                                objects_info, oss_enum.str());
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == status) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceComponentStatusFB-status-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceComponentStatusFB", objects_info,
                                "Invalid NULL for XrSpaceComponentStatusFB \"status\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceComponentStatusFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceComponentStatusFB", objects_info,
                                                        false, true, status);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceComponentStatusFB-status-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceComponentStatusFB",
                                objects_info,
                                "Command xrGetSpaceComponentStatusFB param status is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceComponentStatusFB(
    XrSpace space,
    XrSpaceComponentTypeFB componentType,
    XrSpaceComponentStatusFB* status) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceComponentStatusFB(space, componentType, status);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceComponentStatusFB(
    XrSpace space,
    XrSpaceComponentTypeFB componentType,
    XrSpaceComponentStatusFB* status) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceComponentStatusFB(space, componentType, status);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceComponentStatusFB(space, componentType, status);
}


// ---- XR_FB_foveation extension commands
XrResult GenValidUsageInputsXrCreateFoveationProfileFB(
XrSession session,
const XrFoveationProfileCreateInfoFB* createInfo,
XrFoveationProfileFB* profile) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateFoveationProfileFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFoveationProfileFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFoveationProfileFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFoveationProfileFB", objects_info,
                                "Invalid NULL for XrFoveationProfileCreateInfoFB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFoveationProfileCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateFoveationProfileFB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFoveationProfileFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFoveationProfileFB",
                                objects_info,
                                "Command xrCreateFoveationProfileFB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == profile) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFoveationProfileFB-profile-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFoveationProfileFB", objects_info,
                                "Invalid NULL for XrFoveationProfileFB \"profile\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateFoveationProfileFB(
    XrSession session,
    const XrFoveationProfileCreateInfoFB* createInfo,
    XrFoveationProfileFB* profile) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateFoveationProfileFB(session, createInfo, profile);
        if (XR_SUCCESS == result && nullptr != profile) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_foveationprofilefb_info.insert(*profile, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateFoveationProfileFB(
    XrSession session,
    const XrFoveationProfileCreateInfoFB* createInfo,
    XrFoveationProfileFB* profile) {
    XrResult test_result = GenValidUsageInputsXrCreateFoveationProfileFB(session, createInfo, profile);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateFoveationProfileFB(session, createInfo, profile);
}

XrResult GenValidUsageInputsXrDestroyFoveationProfileFB(
XrFoveationProfileFB profile) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(profile, XR_OBJECT_TYPE_FOVEATION_PROFILE_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFoveationProfileFBHandle(&profile);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFoveationProfileFB handle \"profile\" ";
                oss << HandleToHexString(profile);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyFoveationProfileFB-profile-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyFoveationProfileFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_foveationprofilefb_info.getWithInstanceInfo(profile);
        GenValidUsageXrHandleInfo *gen_foveationprofilefb_info = info_with_instance.first;
        (void)gen_foveationprofilefb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyFoveationProfileFB(
    XrFoveationProfileFB profile) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_foveationprofilefb_info.getWithInstanceInfo(profile);
        GenValidUsageXrHandleInfo *gen_foveationprofilefb_info = info_with_instance.first;
        (void)gen_foveationprofilefb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyFoveationProfileFB(profile);
        if (XR_SUCCEEDED(result)) {
            g_foveationprofilefb_info.erase(profile);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyFoveationProfileFB(
    XrFoveationProfileFB profile) {
    XrResult test_result = GenValidUsageInputsXrDestroyFoveationProfileFB(profile);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyFoveationProfileFB(profile);
}


// ---- XR_FB_keyboard_tracking extension commands
XrResult GenValidUsageInputsXrQuerySystemTrackedKeyboardFB(
XrSession session,
const XrKeyboardTrackingQueryFB* queryInfo,
XrKeyboardTrackingDescriptionFB* keyboard) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrQuerySystemTrackedKeyboardFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySystemTrackedKeyboardFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == queryInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySystemTrackedKeyboardFB-queryInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySystemTrackedKeyboardFB", objects_info,
                                "Invalid NULL for XrKeyboardTrackingQueryFB \"queryInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrKeyboardTrackingQueryFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySystemTrackedKeyboardFB", objects_info,
                                                        true, true, queryInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySystemTrackedKeyboardFB-queryInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySystemTrackedKeyboardFB",
                                objects_info,
                                "Command xrQuerySystemTrackedKeyboardFB param queryInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == keyboard) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySystemTrackedKeyboardFB-keyboard-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySystemTrackedKeyboardFB", objects_info,
                                "Invalid NULL for XrKeyboardTrackingDescriptionFB \"keyboard\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrKeyboardTrackingDescriptionFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySystemTrackedKeyboardFB", objects_info,
                                                        false, true, keyboard);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySystemTrackedKeyboardFB-keyboard-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySystemTrackedKeyboardFB",
                                objects_info,
                                "Command xrQuerySystemTrackedKeyboardFB param keyboard is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQuerySystemTrackedKeyboardFB(
    XrSession session,
    const XrKeyboardTrackingQueryFB* queryInfo,
    XrKeyboardTrackingDescriptionFB* keyboard) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QuerySystemTrackedKeyboardFB(session, queryInfo, keyboard);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQuerySystemTrackedKeyboardFB(
    XrSession session,
    const XrKeyboardTrackingQueryFB* queryInfo,
    XrKeyboardTrackingDescriptionFB* keyboard) {
    XrResult test_result = GenValidUsageInputsXrQuerySystemTrackedKeyboardFB(session, queryInfo, keyboard);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQuerySystemTrackedKeyboardFB(session, queryInfo, keyboard);
}

XrResult GenValidUsageInputsXrCreateKeyboardSpaceFB(
XrSession session,
const XrKeyboardSpaceCreateInfoFB* createInfo,
XrSpace* keyboardSpace) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateKeyboardSpaceFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateKeyboardSpaceFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateKeyboardSpaceFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateKeyboardSpaceFB", objects_info,
                                "Invalid NULL for XrKeyboardSpaceCreateInfoFB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrKeyboardSpaceCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateKeyboardSpaceFB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateKeyboardSpaceFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateKeyboardSpaceFB",
                                objects_info,
                                "Command xrCreateKeyboardSpaceFB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == keyboardSpace) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateKeyboardSpaceFB-keyboardSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateKeyboardSpaceFB", objects_info,
                                "Invalid NULL for XrSpace \"keyboardSpace\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateKeyboardSpaceFB(
    XrSession session,
    const XrKeyboardSpaceCreateInfoFB* createInfo,
    XrSpace* keyboardSpace) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateKeyboardSpaceFB(session, createInfo, keyboardSpace);
        if (XR_SUCCESS == result && nullptr != keyboardSpace) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*keyboardSpace, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateKeyboardSpaceFB(
    XrSession session,
    const XrKeyboardSpaceCreateInfoFB* createInfo,
    XrSpace* keyboardSpace) {
    XrResult test_result = GenValidUsageInputsXrCreateKeyboardSpaceFB(session, createInfo, keyboardSpace);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateKeyboardSpaceFB(session, createInfo, keyboardSpace);
}


// ---- XR_FB_triangle_mesh extension commands
XrResult GenValidUsageInputsXrCreateTriangleMeshFB(
XrSession session,
const XrTriangleMeshCreateInfoFB* createInfo,
XrTriangleMeshFB* outTriangleMesh) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateTriangleMeshFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTriangleMeshFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTriangleMeshFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTriangleMeshFB", objects_info,
                                "Invalid NULL for XrTriangleMeshCreateInfoFB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTriangleMeshCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateTriangleMeshFB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTriangleMeshFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTriangleMeshFB",
                                objects_info,
                                "Command xrCreateTriangleMeshFB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outTriangleMesh) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTriangleMeshFB-outTriangleMesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTriangleMeshFB", objects_info,
                                "Invalid NULL for XrTriangleMeshFB \"outTriangleMesh\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateTriangleMeshFB(
    XrSession session,
    const XrTriangleMeshCreateInfoFB* createInfo,
    XrTriangleMeshFB* outTriangleMesh) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateTriangleMeshFB(session, createInfo, outTriangleMesh);
        if (XR_SUCCESS == result && nullptr != outTriangleMesh) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_trianglemeshfb_info.insert(*outTriangleMesh, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateTriangleMeshFB(
    XrSession session,
    const XrTriangleMeshCreateInfoFB* createInfo,
    XrTriangleMeshFB* outTriangleMesh) {
    XrResult test_result = GenValidUsageInputsXrCreateTriangleMeshFB(session, createInfo, outTriangleMesh);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateTriangleMeshFB(session, createInfo, outTriangleMesh);
}

XrResult GenValidUsageInputsXrDestroyTriangleMeshFB(
XrTriangleMeshFB mesh) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(mesh, XR_OBJECT_TYPE_TRIANGLE_MESH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTriangleMeshFBHandle(&mesh);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTriangleMeshFB handle \"mesh\" ";
                oss << HandleToHexString(mesh);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyTriangleMeshFB-mesh-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyTriangleMeshFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyTriangleMeshFB(
    XrTriangleMeshFB mesh) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyTriangleMeshFB(mesh);
        if (XR_SUCCEEDED(result)) {
            g_trianglemeshfb_info.erase(mesh);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyTriangleMeshFB(
    XrTriangleMeshFB mesh) {
    XrResult test_result = GenValidUsageInputsXrDestroyTriangleMeshFB(mesh);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyTriangleMeshFB(mesh);
}

XrResult GenValidUsageInputsXrTriangleMeshGetVertexBufferFB(
XrTriangleMeshFB mesh,
XrVector3f** outVertexBuffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(mesh, XR_OBJECT_TYPE_TRIANGLE_MESH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTriangleMeshFBHandle(&mesh);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTriangleMeshFB handle \"mesh\" ";
                oss << HandleToHexString(mesh);
                CoreValidLogMessage(nullptr, "VUID-xrTriangleMeshGetVertexBufferFB-mesh-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTriangleMeshGetVertexBufferFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outVertexBuffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrTriangleMeshGetVertexBufferFB-outVertexBuffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTriangleMeshGetVertexBufferFB", objects_info,
                                "Invalid NULL for XrVector3f \"outVertexBuffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrTriangleMeshGetVertexBufferFB-outVertexBuffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrTriangleMeshGetVertexBufferFB(
    XrTriangleMeshFB mesh,
    XrVector3f** outVertexBuffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->TriangleMeshGetVertexBufferFB(mesh, outVertexBuffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrTriangleMeshGetVertexBufferFB(
    XrTriangleMeshFB mesh,
    XrVector3f** outVertexBuffer) {
    XrResult test_result = GenValidUsageInputsXrTriangleMeshGetVertexBufferFB(mesh, outVertexBuffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrTriangleMeshGetVertexBufferFB(mesh, outVertexBuffer);
}

XrResult GenValidUsageInputsXrTriangleMeshGetIndexBufferFB(
XrTriangleMeshFB mesh,
uint32_t** outIndexBuffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(mesh, XR_OBJECT_TYPE_TRIANGLE_MESH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTriangleMeshFBHandle(&mesh);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTriangleMeshFB handle \"mesh\" ";
                oss << HandleToHexString(mesh);
                CoreValidLogMessage(nullptr, "VUID-xrTriangleMeshGetIndexBufferFB-mesh-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTriangleMeshGetIndexBufferFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outIndexBuffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrTriangleMeshGetIndexBufferFB-outIndexBuffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTriangleMeshGetIndexBufferFB", objects_info,
                                "Invalid NULL for uint32_t \"outIndexBuffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrTriangleMeshGetIndexBufferFB-outIndexBuffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrTriangleMeshGetIndexBufferFB(
    XrTriangleMeshFB mesh,
    uint32_t** outIndexBuffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->TriangleMeshGetIndexBufferFB(mesh, outIndexBuffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrTriangleMeshGetIndexBufferFB(
    XrTriangleMeshFB mesh,
    uint32_t** outIndexBuffer) {
    XrResult test_result = GenValidUsageInputsXrTriangleMeshGetIndexBufferFB(mesh, outIndexBuffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrTriangleMeshGetIndexBufferFB(mesh, outIndexBuffer);
}

XrResult GenValidUsageInputsXrTriangleMeshBeginUpdateFB(
XrTriangleMeshFB mesh) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(mesh, XR_OBJECT_TYPE_TRIANGLE_MESH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTriangleMeshFBHandle(&mesh);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTriangleMeshFB handle \"mesh\" ";
                oss << HandleToHexString(mesh);
                CoreValidLogMessage(nullptr, "VUID-xrTriangleMeshBeginUpdateFB-mesh-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTriangleMeshBeginUpdateFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrTriangleMeshBeginUpdateFB(
    XrTriangleMeshFB mesh) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->TriangleMeshBeginUpdateFB(mesh);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrTriangleMeshBeginUpdateFB(
    XrTriangleMeshFB mesh) {
    XrResult test_result = GenValidUsageInputsXrTriangleMeshBeginUpdateFB(mesh);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrTriangleMeshBeginUpdateFB(mesh);
}

XrResult GenValidUsageInputsXrTriangleMeshEndUpdateFB(
XrTriangleMeshFB mesh,
uint32_t vertexCount,
uint32_t triangleCount) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(mesh, XR_OBJECT_TYPE_TRIANGLE_MESH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTriangleMeshFBHandle(&mesh);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTriangleMeshFB handle \"mesh\" ";
                oss << HandleToHexString(mesh);
                CoreValidLogMessage(nullptr, "VUID-xrTriangleMeshEndUpdateFB-mesh-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTriangleMeshEndUpdateFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrTriangleMeshEndUpdateFB(
    XrTriangleMeshFB mesh,
    uint32_t vertexCount,
    uint32_t triangleCount) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->TriangleMeshEndUpdateFB(mesh, vertexCount, triangleCount);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrTriangleMeshEndUpdateFB(
    XrTriangleMeshFB mesh,
    uint32_t vertexCount,
    uint32_t triangleCount) {
    XrResult test_result = GenValidUsageInputsXrTriangleMeshEndUpdateFB(mesh, vertexCount, triangleCount);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrTriangleMeshEndUpdateFB(mesh, vertexCount, triangleCount);
}

XrResult GenValidUsageInputsXrTriangleMeshBeginVertexBufferUpdateFB(
XrTriangleMeshFB mesh,
uint32_t* outVertexCount) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(mesh, XR_OBJECT_TYPE_TRIANGLE_MESH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTriangleMeshFBHandle(&mesh);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTriangleMeshFB handle \"mesh\" ";
                oss << HandleToHexString(mesh);
                CoreValidLogMessage(nullptr, "VUID-xrTriangleMeshBeginVertexBufferUpdateFB-mesh-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTriangleMeshBeginVertexBufferUpdateFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outVertexCount) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrTriangleMeshBeginVertexBufferUpdateFB-outVertexCount-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTriangleMeshBeginVertexBufferUpdateFB", objects_info,
                                "Invalid NULL for uint32_t \"outVertexCount\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrTriangleMeshBeginVertexBufferUpdateFB-outVertexCount-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrTriangleMeshBeginVertexBufferUpdateFB(
    XrTriangleMeshFB mesh,
    uint32_t* outVertexCount) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->TriangleMeshBeginVertexBufferUpdateFB(mesh, outVertexCount);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrTriangleMeshBeginVertexBufferUpdateFB(
    XrTriangleMeshFB mesh,
    uint32_t* outVertexCount) {
    XrResult test_result = GenValidUsageInputsXrTriangleMeshBeginVertexBufferUpdateFB(mesh, outVertexCount);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrTriangleMeshBeginVertexBufferUpdateFB(mesh, outVertexCount);
}

XrResult GenValidUsageInputsXrTriangleMeshEndVertexBufferUpdateFB(
XrTriangleMeshFB mesh) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(mesh, XR_OBJECT_TYPE_TRIANGLE_MESH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTriangleMeshFBHandle(&mesh);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTriangleMeshFB handle \"mesh\" ";
                oss << HandleToHexString(mesh);
                CoreValidLogMessage(nullptr, "VUID-xrTriangleMeshEndVertexBufferUpdateFB-mesh-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrTriangleMeshEndVertexBufferUpdateFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrTriangleMeshEndVertexBufferUpdateFB(
    XrTriangleMeshFB mesh) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trianglemeshfb_info.getWithInstanceInfo(mesh);
        GenValidUsageXrHandleInfo *gen_trianglemeshfb_info = info_with_instance.first;
        (void)gen_trianglemeshfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->TriangleMeshEndVertexBufferUpdateFB(mesh);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrTriangleMeshEndVertexBufferUpdateFB(
    XrTriangleMeshFB mesh) {
    XrResult test_result = GenValidUsageInputsXrTriangleMeshEndVertexBufferUpdateFB(mesh);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrTriangleMeshEndVertexBufferUpdateFB(mesh);
}


// ---- XR_FB_passthrough extension commands
XrResult GenValidUsageInputsXrCreatePassthroughFB(
XrSession session,
const XrPassthroughCreateInfoFB* createInfo,
XrPassthroughFB* outPassthrough) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreatePassthroughFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughFB", objects_info,
                                "Invalid NULL for XrPassthroughCreateInfoFB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreatePassthroughFB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughFB",
                                objects_info,
                                "Command xrCreatePassthroughFB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outPassthrough) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughFB-outPassthrough-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughFB", objects_info,
                                "Invalid NULL for XrPassthroughFB \"outPassthrough\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreatePassthroughFB(
    XrSession session,
    const XrPassthroughCreateInfoFB* createInfo,
    XrPassthroughFB* outPassthrough) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreatePassthroughFB(session, createInfo, outPassthrough);
        if (XR_SUCCESS == result && nullptr != outPassthrough) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_passthroughfb_info.insert(*outPassthrough, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreatePassthroughFB(
    XrSession session,
    const XrPassthroughCreateInfoFB* createInfo,
    XrPassthroughFB* outPassthrough) {
    XrResult test_result = GenValidUsageInputsXrCreatePassthroughFB(session, createInfo, outPassthrough);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreatePassthroughFB(session, createInfo, outPassthrough);
}

XrResult GenValidUsageInputsXrDestroyPassthroughFB(
XrPassthroughFB passthrough) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(passthrough, XR_OBJECT_TYPE_PASSTHROUGH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughFBHandle(&passthrough);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughFB handle \"passthrough\" ";
                oss << HandleToHexString(passthrough);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyPassthroughFB-passthrough-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyPassthroughFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughfb_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughfb_info = info_with_instance.first;
        (void)gen_passthroughfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyPassthroughFB(
    XrPassthroughFB passthrough) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughfb_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughfb_info = info_with_instance.first;
        (void)gen_passthroughfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyPassthroughFB(passthrough);
        if (XR_SUCCEEDED(result)) {
            g_passthroughfb_info.erase(passthrough);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyPassthroughFB(
    XrPassthroughFB passthrough) {
    XrResult test_result = GenValidUsageInputsXrDestroyPassthroughFB(passthrough);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyPassthroughFB(passthrough);
}

XrResult GenValidUsageInputsXrPassthroughStartFB(
XrPassthroughFB passthrough) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(passthrough, XR_OBJECT_TYPE_PASSTHROUGH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughFBHandle(&passthrough);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughFB handle \"passthrough\" ";
                oss << HandleToHexString(passthrough);
                CoreValidLogMessage(nullptr, "VUID-xrPassthroughStartFB-passthrough-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughStartFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughfb_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughfb_info = info_with_instance.first;
        (void)gen_passthroughfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPassthroughStartFB(
    XrPassthroughFB passthrough) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughfb_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughfb_info = info_with_instance.first;
        (void)gen_passthroughfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PassthroughStartFB(passthrough);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPassthroughStartFB(
    XrPassthroughFB passthrough) {
    XrResult test_result = GenValidUsageInputsXrPassthroughStartFB(passthrough);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPassthroughStartFB(passthrough);
}

XrResult GenValidUsageInputsXrPassthroughPauseFB(
XrPassthroughFB passthrough) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(passthrough, XR_OBJECT_TYPE_PASSTHROUGH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughFBHandle(&passthrough);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughFB handle \"passthrough\" ";
                oss << HandleToHexString(passthrough);
                CoreValidLogMessage(nullptr, "VUID-xrPassthroughPauseFB-passthrough-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughPauseFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughfb_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughfb_info = info_with_instance.first;
        (void)gen_passthroughfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPassthroughPauseFB(
    XrPassthroughFB passthrough) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughfb_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughfb_info = info_with_instance.first;
        (void)gen_passthroughfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PassthroughPauseFB(passthrough);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPassthroughPauseFB(
    XrPassthroughFB passthrough) {
    XrResult test_result = GenValidUsageInputsXrPassthroughPauseFB(passthrough);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPassthroughPauseFB(passthrough);
}

XrResult GenValidUsageInputsXrCreatePassthroughLayerFB(
XrSession session,
const XrPassthroughLayerCreateInfoFB* createInfo,
XrPassthroughLayerFB* outLayer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreatePassthroughLayerFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughLayerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughLayerFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughLayerFB", objects_info,
                                "Invalid NULL for XrPassthroughLayerCreateInfoFB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughLayerCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreatePassthroughLayerFB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughLayerFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughLayerFB",
                                objects_info,
                                "Command xrCreatePassthroughLayerFB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outLayer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughLayerFB-outLayer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughLayerFB", objects_info,
                                "Invalid NULL for XrPassthroughLayerFB \"outLayer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreatePassthroughLayerFB(
    XrSession session,
    const XrPassthroughLayerCreateInfoFB* createInfo,
    XrPassthroughLayerFB* outLayer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreatePassthroughLayerFB(session, createInfo, outLayer);
        if (XR_SUCCESS == result && nullptr != outLayer) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_passthroughlayerfb_info.insert(*outLayer, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreatePassthroughLayerFB(
    XrSession session,
    const XrPassthroughLayerCreateInfoFB* createInfo,
    XrPassthroughLayerFB* outLayer) {
    XrResult test_result = GenValidUsageInputsXrCreatePassthroughLayerFB(session, createInfo, outLayer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreatePassthroughLayerFB(session, createInfo, outLayer);
}

XrResult GenValidUsageInputsXrDestroyPassthroughLayerFB(
XrPassthroughLayerFB layer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(layer, XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerFBHandle(&layer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughLayerFB handle \"layer\" ";
                oss << HandleToHexString(layer);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyPassthroughLayerFB-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyPassthroughLayerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyPassthroughLayerFB(
    XrPassthroughLayerFB layer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyPassthroughLayerFB(layer);
        if (XR_SUCCEEDED(result)) {
            g_passthroughlayerfb_info.erase(layer);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyPassthroughLayerFB(
    XrPassthroughLayerFB layer) {
    XrResult test_result = GenValidUsageInputsXrDestroyPassthroughLayerFB(layer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyPassthroughLayerFB(layer);
}

XrResult GenValidUsageInputsXrPassthroughLayerPauseFB(
XrPassthroughLayerFB layer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(layer, XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerFBHandle(&layer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughLayerFB handle \"layer\" ";
                oss << HandleToHexString(layer);
                CoreValidLogMessage(nullptr, "VUID-xrPassthroughLayerPauseFB-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughLayerPauseFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPassthroughLayerPauseFB(
    XrPassthroughLayerFB layer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PassthroughLayerPauseFB(layer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPassthroughLayerPauseFB(
    XrPassthroughLayerFB layer) {
    XrResult test_result = GenValidUsageInputsXrPassthroughLayerPauseFB(layer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPassthroughLayerPauseFB(layer);
}

XrResult GenValidUsageInputsXrPassthroughLayerResumeFB(
XrPassthroughLayerFB layer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(layer, XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerFBHandle(&layer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughLayerFB handle \"layer\" ";
                oss << HandleToHexString(layer);
                CoreValidLogMessage(nullptr, "VUID-xrPassthroughLayerResumeFB-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughLayerResumeFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPassthroughLayerResumeFB(
    XrPassthroughLayerFB layer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PassthroughLayerResumeFB(layer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPassthroughLayerResumeFB(
    XrPassthroughLayerFB layer) {
    XrResult test_result = GenValidUsageInputsXrPassthroughLayerResumeFB(layer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPassthroughLayerResumeFB(layer);
}

XrResult GenValidUsageInputsXrPassthroughLayerSetStyleFB(
XrPassthroughLayerFB layer,
const XrPassthroughStyleFB* style) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(layer, XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerFBHandle(&layer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughLayerFB handle \"layer\" ";
                oss << HandleToHexString(layer);
                CoreValidLogMessage(nullptr, "VUID-xrPassthroughLayerSetStyleFB-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughLayerSetStyleFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == style) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPassthroughLayerSetStyleFB-style-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughLayerSetStyleFB", objects_info,
                                "Invalid NULL for XrPassthroughStyleFB \"style\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughStyleFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPassthroughLayerSetStyleFB", objects_info,
                                                        true, true, style);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPassthroughLayerSetStyleFB-style-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughLayerSetStyleFB",
                                objects_info,
                                "Command xrPassthroughLayerSetStyleFB param style is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPassthroughLayerSetStyleFB(
    XrPassthroughLayerFB layer,
    const XrPassthroughStyleFB* style) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PassthroughLayerSetStyleFB(layer, style);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPassthroughLayerSetStyleFB(
    XrPassthroughLayerFB layer,
    const XrPassthroughStyleFB* style) {
    XrResult test_result = GenValidUsageInputsXrPassthroughLayerSetStyleFB(layer, style);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPassthroughLayerSetStyleFB(layer, style);
}

XrResult GenValidUsageInputsXrCreateGeometryInstanceFB(
XrSession session,
const XrGeometryInstanceCreateInfoFB* createInfo,
XrGeometryInstanceFB* outGeometryInstance) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateGeometryInstanceFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateGeometryInstanceFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateGeometryInstanceFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateGeometryInstanceFB", objects_info,
                                "Invalid NULL for XrGeometryInstanceCreateInfoFB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrGeometryInstanceCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateGeometryInstanceFB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateGeometryInstanceFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateGeometryInstanceFB",
                                objects_info,
                                "Command xrCreateGeometryInstanceFB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outGeometryInstance) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateGeometryInstanceFB-outGeometryInstance-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateGeometryInstanceFB", objects_info,
                                "Invalid NULL for XrGeometryInstanceFB \"outGeometryInstance\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateGeometryInstanceFB(
    XrSession session,
    const XrGeometryInstanceCreateInfoFB* createInfo,
    XrGeometryInstanceFB* outGeometryInstance) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateGeometryInstanceFB(session, createInfo, outGeometryInstance);
        if (XR_SUCCESS == result && nullptr != outGeometryInstance) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_geometryinstancefb_info.insert(*outGeometryInstance, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateGeometryInstanceFB(
    XrSession session,
    const XrGeometryInstanceCreateInfoFB* createInfo,
    XrGeometryInstanceFB* outGeometryInstance) {
    XrResult test_result = GenValidUsageInputsXrCreateGeometryInstanceFB(session, createInfo, outGeometryInstance);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateGeometryInstanceFB(session, createInfo, outGeometryInstance);
}

XrResult GenValidUsageInputsXrDestroyGeometryInstanceFB(
XrGeometryInstanceFB instance) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrGeometryInstanceFBHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrGeometryInstanceFB handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyGeometryInstanceFB-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyGeometryInstanceFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_geometryinstancefb_info.getWithInstanceInfo(instance);
        GenValidUsageXrHandleInfo *gen_geometryinstancefb_info = info_with_instance.first;
        (void)gen_geometryinstancefb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyGeometryInstanceFB(
    XrGeometryInstanceFB instance) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_geometryinstancefb_info.getWithInstanceInfo(instance);
        GenValidUsageXrHandleInfo *gen_geometryinstancefb_info = info_with_instance.first;
        (void)gen_geometryinstancefb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyGeometryInstanceFB(instance);
        if (XR_SUCCEEDED(result)) {
            g_geometryinstancefb_info.erase(instance);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyGeometryInstanceFB(
    XrGeometryInstanceFB instance) {
    XrResult test_result = GenValidUsageInputsXrDestroyGeometryInstanceFB(instance);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyGeometryInstanceFB(instance);
}

XrResult GenValidUsageInputsXrGeometryInstanceSetTransformFB(
XrGeometryInstanceFB instance,
const XrGeometryInstanceTransformFB* transformation) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrGeometryInstanceFBHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrGeometryInstanceFB handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGeometryInstanceSetTransformFB-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGeometryInstanceSetTransformFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_geometryinstancefb_info.getWithInstanceInfo(instance);
        GenValidUsageXrHandleInfo *gen_geometryinstancefb_info = info_with_instance.first;
        (void)gen_geometryinstancefb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == transformation) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGeometryInstanceSetTransformFB-transformation-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGeometryInstanceSetTransformFB", objects_info,
                                "Invalid NULL for XrGeometryInstanceTransformFB \"transformation\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrGeometryInstanceTransformFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGeometryInstanceSetTransformFB", objects_info,
                                                        true, true, transformation);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGeometryInstanceSetTransformFB-transformation-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGeometryInstanceSetTransformFB",
                                objects_info,
                                "Command xrGeometryInstanceSetTransformFB param transformation is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGeometryInstanceSetTransformFB(
    XrGeometryInstanceFB instance,
    const XrGeometryInstanceTransformFB* transformation) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_geometryinstancefb_info.getWithInstanceInfo(instance);
        GenValidUsageXrHandleInfo *gen_geometryinstancefb_info = info_with_instance.first;
        (void)gen_geometryinstancefb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GeometryInstanceSetTransformFB(instance, transformation);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGeometryInstanceSetTransformFB(
    XrGeometryInstanceFB instance,
    const XrGeometryInstanceTransformFB* transformation) {
    XrResult test_result = GenValidUsageInputsXrGeometryInstanceSetTransformFB(instance, transformation);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGeometryInstanceSetTransformFB(instance, transformation);
}


// ---- XR_FB_render_model extension commands
XrResult GenValidUsageInputsXrEnumerateRenderModelPathsFB(
XrSession session,
uint32_t pathCapacityInput,
uint32_t* pathCountOutput,
XrRenderModelPathInfoFB* paths) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateRenderModelPathsFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRenderModelPathsFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when pathCapacityInput is non-zero
        if (0 != pathCapacityInput && nullptr == paths) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateRenderModelPathsFB-paths-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRenderModelPathsFB",
                                objects_info,
                                "Command xrEnumerateRenderModelPathsFB param paths is NULL, but pathCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == pathCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateRenderModelPathsFB-pathCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRenderModelPathsFB", objects_info,
                                "Invalid NULL for uint32_t \"pathCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateRenderModelPathsFB-pathCountOutput-parameter" type
        if (paths) {
            for (uint32_t value_paths_inc = 0; value_paths_inc < pathCapacityInput; ++value_paths_inc) {
                // Validate that the structure XrRenderModelPathInfoFB is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateRenderModelPathsFB", objects_info,
                                                                true, true, &paths[value_paths_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateRenderModelPathsFB-paths-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRenderModelPathsFB",
                                        objects_info,
                                        "Command xrEnumerateRenderModelPathsFB param paths is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateRenderModelPathsFB(
    XrSession session,
    uint32_t pathCapacityInput,
    uint32_t* pathCountOutput,
    XrRenderModelPathInfoFB* paths) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateRenderModelPathsFB(session, pathCapacityInput, pathCountOutput, paths);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateRenderModelPathsFB(
    XrSession session,
    uint32_t pathCapacityInput,
    uint32_t* pathCountOutput,
    XrRenderModelPathInfoFB* paths) {
    XrResult test_result = GenValidUsageInputsXrEnumerateRenderModelPathsFB(session, pathCapacityInput, pathCountOutput, paths);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateRenderModelPathsFB(session, pathCapacityInput, pathCountOutput, paths);
}

XrResult GenValidUsageInputsXrGetRenderModelPropertiesFB(
XrSession session,
XrPath path,
XrRenderModelPropertiesFB* properties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetRenderModelPropertiesFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPropertiesFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == properties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelPropertiesFB-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPropertiesFB", objects_info,
                                "Invalid NULL for XrRenderModelPropertiesFB \"properties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelPropertiesFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelPropertiesFB", objects_info,
                                                        false, true, properties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelPropertiesFB-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPropertiesFB",
                                objects_info,
                                "Command xrGetRenderModelPropertiesFB param properties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetRenderModelPropertiesFB(
    XrSession session,
    XrPath path,
    XrRenderModelPropertiesFB* properties) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetRenderModelPropertiesFB(session, path, properties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetRenderModelPropertiesFB(
    XrSession session,
    XrPath path,
    XrRenderModelPropertiesFB* properties) {
    XrResult test_result = GenValidUsageInputsXrGetRenderModelPropertiesFB(session, path, properties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetRenderModelPropertiesFB(session, path, properties);
}

XrResult GenValidUsageInputsXrLoadRenderModelFB(
XrSession session,
const XrRenderModelLoadInfoFB* info,
XrRenderModelBufferFB* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrLoadRenderModelFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLoadRenderModelFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLoadRenderModelFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLoadRenderModelFB", objects_info,
                                "Invalid NULL for XrRenderModelLoadInfoFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelLoadInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLoadRenderModelFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLoadRenderModelFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLoadRenderModelFB",
                                objects_info,
                                "Command xrLoadRenderModelFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLoadRenderModelFB-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLoadRenderModelFB", objects_info,
                                "Invalid NULL for XrRenderModelBufferFB \"buffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelBufferFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLoadRenderModelFB", objects_info,
                                                        false, true, buffer);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLoadRenderModelFB-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLoadRenderModelFB",
                                objects_info,
                                "Command xrLoadRenderModelFB param buffer is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLoadRenderModelFB(
    XrSession session,
    const XrRenderModelLoadInfoFB* info,
    XrRenderModelBufferFB* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LoadRenderModelFB(session, info, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLoadRenderModelFB(
    XrSession session,
    const XrRenderModelLoadInfoFB* info,
    XrRenderModelBufferFB* buffer) {
    XrResult test_result = GenValidUsageInputsXrLoadRenderModelFB(session, info, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLoadRenderModelFB(session, info, buffer);
}


// ---- XR_VARJO_environment_depth_estimation extension commands
XrResult GenValidUsageInputsXrSetEnvironmentDepthEstimationVARJO(
XrSession session,
XrBool32 enabled) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetEnvironmentDepthEstimationVARJO-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetEnvironmentDepthEstimationVARJO",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetEnvironmentDepthEstimationVARJO(
    XrSession session,
    XrBool32 enabled) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetEnvironmentDepthEstimationVARJO(session, enabled);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetEnvironmentDepthEstimationVARJO(
    XrSession session,
    XrBool32 enabled) {
    XrResult test_result = GenValidUsageInputsXrSetEnvironmentDepthEstimationVARJO(session, enabled);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetEnvironmentDepthEstimationVARJO(session, enabled);
}


// ---- XR_VARJO_marker_tracking extension commands
XrResult GenValidUsageInputsXrSetMarkerTrackingVARJO(
XrSession session,
XrBool32 enabled) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetMarkerTrackingVARJO-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetMarkerTrackingVARJO",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetMarkerTrackingVARJO(
    XrSession session,
    XrBool32 enabled) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetMarkerTrackingVARJO(session, enabled);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetMarkerTrackingVARJO(
    XrSession session,
    XrBool32 enabled) {
    XrResult test_result = GenValidUsageInputsXrSetMarkerTrackingVARJO(session, enabled);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetMarkerTrackingVARJO(session, enabled);
}

XrResult GenValidUsageInputsXrSetMarkerTrackingTimeoutVARJO(
XrSession session,
uint64_t markerId,
XrDuration timeout) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetMarkerTrackingTimeoutVARJO-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetMarkerTrackingTimeoutVARJO",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetMarkerTrackingTimeoutVARJO(
    XrSession session,
    uint64_t markerId,
    XrDuration timeout) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetMarkerTrackingTimeoutVARJO(session, markerId, timeout);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetMarkerTrackingTimeoutVARJO(
    XrSession session,
    uint64_t markerId,
    XrDuration timeout) {
    XrResult test_result = GenValidUsageInputsXrSetMarkerTrackingTimeoutVARJO(session, markerId, timeout);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetMarkerTrackingTimeoutVARJO(session, markerId, timeout);
}

XrResult GenValidUsageInputsXrSetMarkerTrackingPredictionVARJO(
XrSession session,
uint64_t markerId,
XrBool32 enable) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetMarkerTrackingPredictionVARJO-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetMarkerTrackingPredictionVARJO",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetMarkerTrackingPredictionVARJO(
    XrSession session,
    uint64_t markerId,
    XrBool32 enable) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetMarkerTrackingPredictionVARJO(session, markerId, enable);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetMarkerTrackingPredictionVARJO(
    XrSession session,
    uint64_t markerId,
    XrBool32 enable) {
    XrResult test_result = GenValidUsageInputsXrSetMarkerTrackingPredictionVARJO(session, markerId, enable);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetMarkerTrackingPredictionVARJO(session, markerId, enable);
}

XrResult GenValidUsageInputsXrGetMarkerSizeVARJO(
XrSession session,
uint64_t markerId,
XrExtent2Df* size) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetMarkerSizeVARJO-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerSizeVARJO",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == size) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkerSizeVARJO-size-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerSizeVARJO", objects_info,
                                "Invalid NULL for XrExtent2Df \"size\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetMarkerSizeVARJO-size-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetMarkerSizeVARJO(
    XrSession session,
    uint64_t markerId,
    XrExtent2Df* size) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetMarkerSizeVARJO(session, markerId, size);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetMarkerSizeVARJO(
    XrSession session,
    uint64_t markerId,
    XrExtent2Df* size) {
    XrResult test_result = GenValidUsageInputsXrGetMarkerSizeVARJO(session, markerId, size);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetMarkerSizeVARJO(session, markerId, size);
}

XrResult GenValidUsageInputsXrCreateMarkerSpaceVARJO(
XrSession session,
const XrMarkerSpaceCreateInfoVARJO* createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateMarkerSpaceVARJO-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerSpaceVARJO",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateMarkerSpaceVARJO-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerSpaceVARJO", objects_info,
                                "Invalid NULL for XrMarkerSpaceCreateInfoVARJO \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrMarkerSpaceCreateInfoVARJO is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateMarkerSpaceVARJO", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateMarkerSpaceVARJO-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerSpaceVARJO",
                                objects_info,
                                "Command xrCreateMarkerSpaceVARJO param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateMarkerSpaceVARJO-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerSpaceVARJO", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateMarkerSpaceVARJO(
    XrSession session,
    const XrMarkerSpaceCreateInfoVARJO* createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateMarkerSpaceVARJO(session, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateMarkerSpaceVARJO(
    XrSession session,
    const XrMarkerSpaceCreateInfoVARJO* createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateMarkerSpaceVARJO(session, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateMarkerSpaceVARJO(session, createInfo, space);
}


// ---- XR_VARJO_view_offset extension commands
XrResult GenValidUsageInputsXrSetViewOffsetVARJO(
XrSession session,
float offset) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetViewOffsetVARJO-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetViewOffsetVARJO",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetViewOffsetVARJO(
    XrSession session,
    float offset) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetViewOffsetVARJO(session, offset);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetViewOffsetVARJO(
    XrSession session,
    float offset) {
    XrResult test_result = GenValidUsageInputsXrSetViewOffsetVARJO(session, offset);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetViewOffsetVARJO(session, offset);
}


// ---- XR_ML_compat extension commands
#if defined(XR_USE_PLATFORM_ML)

XrResult GenValidUsageInputsXrCreateSpaceFromCoordinateFrameUIDML(
XrSession session,
const XrCoordinateSpaceCreateInfoML *createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpaceFromCoordinateFrameUIDML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpaceFromCoordinateFrameUIDML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpaceFromCoordinateFrameUIDML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpaceFromCoordinateFrameUIDML", objects_info,
                                "Invalid NULL for XrCoordinateSpaceCreateInfoML \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrCoordinateSpaceCreateInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpaceFromCoordinateFrameUIDML", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpaceFromCoordinateFrameUIDML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpaceFromCoordinateFrameUIDML",
                                objects_info,
                                "Command xrCreateSpaceFromCoordinateFrameUIDML param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpaceFromCoordinateFrameUIDML-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpaceFromCoordinateFrameUIDML", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpaceFromCoordinateFrameUIDML(
    XrSession session,
    const XrCoordinateSpaceCreateInfoML *createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpaceFromCoordinateFrameUIDML(session, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpaceFromCoordinateFrameUIDML(
    XrSession session,
    const XrCoordinateSpaceCreateInfoML *createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateSpaceFromCoordinateFrameUIDML(session, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpaceFromCoordinateFrameUIDML(session, createInfo, space);
}

#endif // defined(XR_USE_PLATFORM_ML)


// ---- XR_ML_marker_understanding extension commands
XrResult GenValidUsageInputsXrCreateMarkerDetectorML(
XrSession session,
const XrMarkerDetectorCreateInfoML* createInfo,
XrMarkerDetectorML* markerDetector) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateMarkerDetectorML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerDetectorML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateMarkerDetectorML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerDetectorML", objects_info,
                                "Invalid NULL for XrMarkerDetectorCreateInfoML \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrMarkerDetectorCreateInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateMarkerDetectorML", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateMarkerDetectorML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerDetectorML",
                                objects_info,
                                "Command xrCreateMarkerDetectorML param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == markerDetector) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateMarkerDetectorML-markerDetector-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerDetectorML", objects_info,
                                "Invalid NULL for XrMarkerDetectorML \"markerDetector\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateMarkerDetectorML(
    XrSession session,
    const XrMarkerDetectorCreateInfoML* createInfo,
    XrMarkerDetectorML* markerDetector) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateMarkerDetectorML(session, createInfo, markerDetector);
        if (XR_SUCCESS == result && nullptr != markerDetector) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_markerdetectorml_info.insert(*markerDetector, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateMarkerDetectorML(
    XrSession session,
    const XrMarkerDetectorCreateInfoML* createInfo,
    XrMarkerDetectorML* markerDetector) {
    XrResult test_result = GenValidUsageInputsXrCreateMarkerDetectorML(session, createInfo, markerDetector);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateMarkerDetectorML(session, createInfo, markerDetector);
}

XrResult GenValidUsageInputsXrDestroyMarkerDetectorML(
XrMarkerDetectorML markerDetector) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(markerDetector, XR_OBJECT_TYPE_MARKER_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrMarkerDetectorMLHandle(&markerDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrMarkerDetectorML handle \"markerDetector\" ";
                oss << HandleToHexString(markerDetector);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyMarkerDetectorML-markerDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyMarkerDetectorML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyMarkerDetectorML(
    XrMarkerDetectorML markerDetector) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyMarkerDetectorML(markerDetector);
        if (XR_SUCCEEDED(result)) {
            g_markerdetectorml_info.erase(markerDetector);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyMarkerDetectorML(
    XrMarkerDetectorML markerDetector) {
    XrResult test_result = GenValidUsageInputsXrDestroyMarkerDetectorML(markerDetector);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyMarkerDetectorML(markerDetector);
}

XrResult GenValidUsageInputsXrSnapshotMarkerDetectorML(
XrMarkerDetectorML markerDetector,
XrMarkerDetectorSnapshotInfoML* snapshotInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(markerDetector, XR_OBJECT_TYPE_MARKER_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrMarkerDetectorMLHandle(&markerDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrMarkerDetectorML handle \"markerDetector\" ";
                oss << HandleToHexString(markerDetector);
                CoreValidLogMessage(nullptr, "VUID-xrSnapshotMarkerDetectorML-markerDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSnapshotMarkerDetectorML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == snapshotInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSnapshotMarkerDetectorML-snapshotInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSnapshotMarkerDetectorML", objects_info,
                                "Invalid NULL for XrMarkerDetectorSnapshotInfoML \"snapshotInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrMarkerDetectorSnapshotInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSnapshotMarkerDetectorML", objects_info,
                                                        false, true, snapshotInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSnapshotMarkerDetectorML-snapshotInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSnapshotMarkerDetectorML",
                                objects_info,
                                "Command xrSnapshotMarkerDetectorML param snapshotInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSnapshotMarkerDetectorML(
    XrMarkerDetectorML markerDetector,
    XrMarkerDetectorSnapshotInfoML* snapshotInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SnapshotMarkerDetectorML(markerDetector, snapshotInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSnapshotMarkerDetectorML(
    XrMarkerDetectorML markerDetector,
    XrMarkerDetectorSnapshotInfoML* snapshotInfo) {
    XrResult test_result = GenValidUsageInputsXrSnapshotMarkerDetectorML(markerDetector, snapshotInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSnapshotMarkerDetectorML(markerDetector, snapshotInfo);
}

XrResult GenValidUsageInputsXrGetMarkerDetectorStateML(
XrMarkerDetectorML markerDetector,
XrMarkerDetectorStateML* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(markerDetector, XR_OBJECT_TYPE_MARKER_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrMarkerDetectorMLHandle(&markerDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrMarkerDetectorML handle \"markerDetector\" ";
                oss << HandleToHexString(markerDetector);
                CoreValidLogMessage(nullptr, "VUID-xrGetMarkerDetectorStateML-markerDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerDetectorStateML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkerDetectorStateML-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerDetectorStateML", objects_info,
                                "Invalid NULL for XrMarkerDetectorStateML \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrMarkerDetectorStateML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetMarkerDetectorStateML", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkerDetectorStateML-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerDetectorStateML",
                                objects_info,
                                "Command xrGetMarkerDetectorStateML param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetMarkerDetectorStateML(
    XrMarkerDetectorML markerDetector,
    XrMarkerDetectorStateML* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetMarkerDetectorStateML(markerDetector, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetMarkerDetectorStateML(
    XrMarkerDetectorML markerDetector,
    XrMarkerDetectorStateML* state) {
    XrResult test_result = GenValidUsageInputsXrGetMarkerDetectorStateML(markerDetector, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetMarkerDetectorStateML(markerDetector, state);
}

XrResult GenValidUsageInputsXrGetMarkersML(
XrMarkerDetectorML markerDetector,
uint32_t markerCapacityInput,
uint32_t* markerCountOutput,
XrMarkerML* markers) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(markerDetector, XR_OBJECT_TYPE_MARKER_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrMarkerDetectorMLHandle(&markerDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrMarkerDetectorML handle \"markerDetector\" ";
                oss << HandleToHexString(markerDetector);
                CoreValidLogMessage(nullptr, "VUID-xrGetMarkersML-markerDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkersML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when markerCapacityInput is non-zero
        if (0 != markerCapacityInput && nullptr == markers) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkersML-markers-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkersML",
                                objects_info,
                                "Command xrGetMarkersML param markers is NULL, but markerCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == markerCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkersML-markerCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkersML", objects_info,
                                "Invalid NULL for uint32_t \"markerCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetMarkersML-markerCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetMarkersML-markers-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetMarkersML(
    XrMarkerDetectorML markerDetector,
    uint32_t markerCapacityInput,
    uint32_t* markerCountOutput,
    XrMarkerML* markers) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetMarkersML(markerDetector, markerCapacityInput, markerCountOutput, markers);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetMarkersML(
    XrMarkerDetectorML markerDetector,
    uint32_t markerCapacityInput,
    uint32_t* markerCountOutput,
    XrMarkerML* markers) {
    XrResult test_result = GenValidUsageInputsXrGetMarkersML(markerDetector, markerCapacityInput, markerCountOutput, markers);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetMarkersML(markerDetector, markerCapacityInput, markerCountOutput, markers);
}

XrResult GenValidUsageInputsXrGetMarkerReprojectionErrorML(
XrMarkerDetectorML markerDetector,
XrMarkerML marker,
float* reprojectionErrorMeters) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(markerDetector, XR_OBJECT_TYPE_MARKER_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrMarkerDetectorMLHandle(&markerDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrMarkerDetectorML handle \"markerDetector\" ";
                oss << HandleToHexString(markerDetector);
                CoreValidLogMessage(nullptr, "VUID-xrGetMarkerReprojectionErrorML-markerDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerReprojectionErrorML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == reprojectionErrorMeters) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkerReprojectionErrorML-reprojectionErrorMeters-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerReprojectionErrorML", objects_info,
                                "Invalid NULL for float \"reprojectionErrorMeters\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetMarkerReprojectionErrorML-reprojectionErrorMeters-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetMarkerReprojectionErrorML(
    XrMarkerDetectorML markerDetector,
    XrMarkerML marker,
    float* reprojectionErrorMeters) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetMarkerReprojectionErrorML(markerDetector, marker, reprojectionErrorMeters);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetMarkerReprojectionErrorML(
    XrMarkerDetectorML markerDetector,
    XrMarkerML marker,
    float* reprojectionErrorMeters) {
    XrResult test_result = GenValidUsageInputsXrGetMarkerReprojectionErrorML(markerDetector, marker, reprojectionErrorMeters);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetMarkerReprojectionErrorML(markerDetector, marker, reprojectionErrorMeters);
}

XrResult GenValidUsageInputsXrGetMarkerLengthML(
XrMarkerDetectorML markerDetector,
XrMarkerML marker,
float* meters) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(markerDetector, XR_OBJECT_TYPE_MARKER_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrMarkerDetectorMLHandle(&markerDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrMarkerDetectorML handle \"markerDetector\" ";
                oss << HandleToHexString(markerDetector);
                CoreValidLogMessage(nullptr, "VUID-xrGetMarkerLengthML-markerDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerLengthML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == meters) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkerLengthML-meters-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerLengthML", objects_info,
                                "Invalid NULL for float \"meters\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetMarkerLengthML-meters-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetMarkerLengthML(
    XrMarkerDetectorML markerDetector,
    XrMarkerML marker,
    float* meters) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetMarkerLengthML(markerDetector, marker, meters);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetMarkerLengthML(
    XrMarkerDetectorML markerDetector,
    XrMarkerML marker,
    float* meters) {
    XrResult test_result = GenValidUsageInputsXrGetMarkerLengthML(markerDetector, marker, meters);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetMarkerLengthML(markerDetector, marker, meters);
}

XrResult GenValidUsageInputsXrGetMarkerNumberML(
XrMarkerDetectorML markerDetector,
XrMarkerML marker,
uint64_t* number) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(markerDetector, XR_OBJECT_TYPE_MARKER_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrMarkerDetectorMLHandle(&markerDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrMarkerDetectorML handle \"markerDetector\" ";
                oss << HandleToHexString(markerDetector);
                CoreValidLogMessage(nullptr, "VUID-xrGetMarkerNumberML-markerDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerNumberML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == number) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkerNumberML-number-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerNumberML", objects_info,
                                "Invalid NULL for uint64_t \"number\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetMarkerNumberML-number-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetMarkerNumberML(
    XrMarkerDetectorML markerDetector,
    XrMarkerML marker,
    uint64_t* number) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetMarkerNumberML(markerDetector, marker, number);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetMarkerNumberML(
    XrMarkerDetectorML markerDetector,
    XrMarkerML marker,
    uint64_t* number) {
    XrResult test_result = GenValidUsageInputsXrGetMarkerNumberML(markerDetector, marker, number);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetMarkerNumberML(markerDetector, marker, number);
}

XrResult GenValidUsageInputsXrGetMarkerStringML(
XrMarkerDetectorML markerDetector,
XrMarkerML marker,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(markerDetector, XR_OBJECT_TYPE_MARKER_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrMarkerDetectorMLHandle(&markerDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrMarkerDetectorML handle \"markerDetector\" ";
                oss << HandleToHexString(markerDetector);
                CoreValidLogMessage(nullptr, "VUID-xrGetMarkerStringML-markerDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerStringML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkerStringML-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerStringML",
                                objects_info,
                                "Command xrGetMarkerStringML param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetMarkerStringML-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetMarkerStringML", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetMarkerStringML-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetMarkerStringML-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetMarkerStringML(
    XrMarkerDetectorML markerDetector,
    XrMarkerML marker,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_markerdetectorml_info.getWithInstanceInfo(markerDetector);
        GenValidUsageXrHandleInfo *gen_markerdetectorml_info = info_with_instance.first;
        (void)gen_markerdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetMarkerStringML(markerDetector, marker, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetMarkerStringML(
    XrMarkerDetectorML markerDetector,
    XrMarkerML marker,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetMarkerStringML(markerDetector, marker, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetMarkerStringML(markerDetector, marker, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrCreateMarkerSpaceML(
XrSession session,
const XrMarkerSpaceCreateInfoML* createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateMarkerSpaceML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerSpaceML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateMarkerSpaceML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerSpaceML", objects_info,
                                "Invalid NULL for XrMarkerSpaceCreateInfoML \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrMarkerSpaceCreateInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateMarkerSpaceML", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateMarkerSpaceML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerSpaceML",
                                objects_info,
                                "Command xrCreateMarkerSpaceML param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateMarkerSpaceML-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateMarkerSpaceML", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateMarkerSpaceML(
    XrSession session,
    const XrMarkerSpaceCreateInfoML* createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateMarkerSpaceML(session, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateMarkerSpaceML(
    XrSession session,
    const XrMarkerSpaceCreateInfoML* createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateMarkerSpaceML(session, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateMarkerSpaceML(session, createInfo, space);
}


// ---- XR_ML_localization_map extension commands
XrResult GenValidUsageInputsXrEnableLocalizationEventsML(
XrSession session,
const XrLocalizationEnableEventsInfoML * info) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnableLocalizationEventsML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnableLocalizationEventsML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnableLocalizationEventsML-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnableLocalizationEventsML", objects_info,
                                "Invalid NULL for XrLocalizationEnableEventsInfoML \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrLocalizationEnableEventsInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrEnableLocalizationEventsML", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnableLocalizationEventsML-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnableLocalizationEventsML",
                                objects_info,
                                "Command xrEnableLocalizationEventsML param info is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnableLocalizationEventsML(
    XrSession session,
    const XrLocalizationEnableEventsInfoML * info) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnableLocalizationEventsML(session, info);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnableLocalizationEventsML(
    XrSession session,
    const XrLocalizationEnableEventsInfoML * info) {
    XrResult test_result = GenValidUsageInputsXrEnableLocalizationEventsML(session, info);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnableLocalizationEventsML(session, info);
}

XrResult GenValidUsageInputsXrQueryLocalizationMapsML(
XrSession session,
const XrLocalizationMapQueryInfoBaseHeaderML* queryInfo,
uint32_t mapCapacityInput,
uint32_t * mapCountOutput,
XrLocalizationMapML* maps) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrQueryLocalizationMapsML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryLocalizationMapsML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the base-structure XrLocalizationMapQueryInfoBaseHeaderML is valid
        if (nullptr != queryInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrQueryLocalizationMapsML",
                                                            objects_info, false, true, queryInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrQueryLocalizationMapsML-queryInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryLocalizationMapsML",
                                    objects_info,
                                    "Command xrQueryLocalizationMapsML param queryInfo is invalid");
                return xr_result;
            }
        }
        // Optional array must be non-NULL when mapCapacityInput is non-zero
        if (0 != mapCapacityInput && nullptr == maps) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQueryLocalizationMapsML-maps-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryLocalizationMapsML",
                                objects_info,
                                "Command xrQueryLocalizationMapsML param maps is NULL, but mapCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == mapCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQueryLocalizationMapsML-mapCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryLocalizationMapsML", objects_info,
                                "Invalid NULL for uint32_t \"mapCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrQueryLocalizationMapsML-mapCountOutput-parameter" type
        if (maps) {
            for (uint32_t value_maps_inc = 0; value_maps_inc < mapCapacityInput; ++value_maps_inc) {
                // Validate that the structure XrLocalizationMapML is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrQueryLocalizationMapsML", objects_info,
                                                                true, true, &maps[value_maps_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrQueryLocalizationMapsML-maps-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryLocalizationMapsML",
                                        objects_info,
                                        "Command xrQueryLocalizationMapsML param maps is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQueryLocalizationMapsML(
    XrSession session,
    const XrLocalizationMapQueryInfoBaseHeaderML* queryInfo,
    uint32_t mapCapacityInput,
    uint32_t * mapCountOutput,
    XrLocalizationMapML* maps) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QueryLocalizationMapsML(session, queryInfo, mapCapacityInput, mapCountOutput, maps);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQueryLocalizationMapsML(
    XrSession session,
    const XrLocalizationMapQueryInfoBaseHeaderML* queryInfo,
    uint32_t mapCapacityInput,
    uint32_t * mapCountOutput,
    XrLocalizationMapML* maps) {
    XrResult test_result = GenValidUsageInputsXrQueryLocalizationMapsML(session, queryInfo, mapCapacityInput, mapCountOutput, maps);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQueryLocalizationMapsML(session, queryInfo, mapCapacityInput, mapCountOutput, maps);
}

XrResult GenValidUsageInputsXrRequestMapLocalizationML(
XrSession session,
const XrMapLocalizationRequestInfoML* requestInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrRequestMapLocalizationML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestMapLocalizationML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestMapLocalizationML-requestInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestMapLocalizationML", objects_info,
                                "Invalid NULL for XrMapLocalizationRequestInfoML \"requestInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrMapLocalizationRequestInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRequestMapLocalizationML", objects_info,
                                                        true, true, requestInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestMapLocalizationML-requestInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestMapLocalizationML",
                                objects_info,
                                "Command xrRequestMapLocalizationML param requestInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestMapLocalizationML(
    XrSession session,
    const XrMapLocalizationRequestInfoML* requestInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestMapLocalizationML(session, requestInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestMapLocalizationML(
    XrSession session,
    const XrMapLocalizationRequestInfoML* requestInfo) {
    XrResult test_result = GenValidUsageInputsXrRequestMapLocalizationML(session, requestInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestMapLocalizationML(session, requestInfo);
}

XrResult GenValidUsageInputsXrImportLocalizationMapML(
XrSession session,
const XrLocalizationMapImportInfoML* importInfo,
XrUuidEXT* mapUuid) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrImportLocalizationMapML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrImportLocalizationMapML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == importInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrImportLocalizationMapML-importInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrImportLocalizationMapML", objects_info,
                                "Invalid NULL for XrLocalizationMapImportInfoML \"importInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrLocalizationMapImportInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrImportLocalizationMapML", objects_info,
                                                        true, true, importInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrImportLocalizationMapML-importInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrImportLocalizationMapML",
                                objects_info,
                                "Command xrImportLocalizationMapML param importInfo is invalid");
            return xr_result;
        }
        // NOTE: Can't validate "VUID-xrImportLocalizationMapML-mapUuid-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrImportLocalizationMapML(
    XrSession session,
    const XrLocalizationMapImportInfoML* importInfo,
    XrUuidEXT* mapUuid) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ImportLocalizationMapML(session, importInfo, mapUuid);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrImportLocalizationMapML(
    XrSession session,
    const XrLocalizationMapImportInfoML* importInfo,
    XrUuidEXT* mapUuid) {
    XrResult test_result = GenValidUsageInputsXrImportLocalizationMapML(session, importInfo, mapUuid);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrImportLocalizationMapML(session, importInfo, mapUuid);
}

XrResult GenValidUsageInputsXrCreateExportedLocalizationMapML(
XrSession session,
const XrUuidEXT* mapUuid,
XrExportedLocalizationMapML* map) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateExportedLocalizationMapML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateExportedLocalizationMapML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == mapUuid) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateExportedLocalizationMapML-mapUuid-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateExportedLocalizationMapML", objects_info,
                                "Invalid NULL for XrUuidEXT \"mapUuid\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateExportedLocalizationMapML-mapUuid-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == map) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateExportedLocalizationMapML-map-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateExportedLocalizationMapML", objects_info,
                                "Invalid NULL for XrExportedLocalizationMapML \"map\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateExportedLocalizationMapML(
    XrSession session,
    const XrUuidEXT* mapUuid,
    XrExportedLocalizationMapML* map) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateExportedLocalizationMapML(session, mapUuid, map);
        if (XR_SUCCESS == result && nullptr != map) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_exportedlocalizationmapml_info.insert(*map, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateExportedLocalizationMapML(
    XrSession session,
    const XrUuidEXT* mapUuid,
    XrExportedLocalizationMapML* map) {
    XrResult test_result = GenValidUsageInputsXrCreateExportedLocalizationMapML(session, mapUuid, map);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateExportedLocalizationMapML(session, mapUuid, map);
}

XrResult GenValidUsageInputsXrDestroyExportedLocalizationMapML(
XrExportedLocalizationMapML map) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(map, XR_OBJECT_TYPE_EXPORTED_LOCALIZATION_MAP_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrExportedLocalizationMapMLHandle(&map);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrExportedLocalizationMapML handle \"map\" ";
                oss << HandleToHexString(map);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyExportedLocalizationMapML-map-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyExportedLocalizationMapML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_exportedlocalizationmapml_info.getWithInstanceInfo(map);
        GenValidUsageXrHandleInfo *gen_exportedlocalizationmapml_info = info_with_instance.first;
        (void)gen_exportedlocalizationmapml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyExportedLocalizationMapML(
    XrExportedLocalizationMapML map) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_exportedlocalizationmapml_info.getWithInstanceInfo(map);
        GenValidUsageXrHandleInfo *gen_exportedlocalizationmapml_info = info_with_instance.first;
        (void)gen_exportedlocalizationmapml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyExportedLocalizationMapML(map);
        if (XR_SUCCEEDED(result)) {
            g_exportedlocalizationmapml_info.erase(map);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyExportedLocalizationMapML(
    XrExportedLocalizationMapML map) {
    XrResult test_result = GenValidUsageInputsXrDestroyExportedLocalizationMapML(map);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyExportedLocalizationMapML(map);
}

XrResult GenValidUsageInputsXrGetExportedLocalizationMapDataML(
XrExportedLocalizationMapML map,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(map, XR_OBJECT_TYPE_EXPORTED_LOCALIZATION_MAP_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrExportedLocalizationMapMLHandle(&map);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrExportedLocalizationMapML handle \"map\" ";
                oss << HandleToHexString(map);
                CoreValidLogMessage(nullptr, "VUID-xrGetExportedLocalizationMapDataML-map-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetExportedLocalizationMapDataML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_exportedlocalizationmapml_info.getWithInstanceInfo(map);
        GenValidUsageXrHandleInfo *gen_exportedlocalizationmapml_info = info_with_instance.first;
        (void)gen_exportedlocalizationmapml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetExportedLocalizationMapDataML-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetExportedLocalizationMapDataML",
                                objects_info,
                                "Command xrGetExportedLocalizationMapDataML param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetExportedLocalizationMapDataML-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetExportedLocalizationMapDataML", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetExportedLocalizationMapDataML-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetExportedLocalizationMapDataML-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetExportedLocalizationMapDataML(
    XrExportedLocalizationMapML map,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_exportedlocalizationmapml_info.getWithInstanceInfo(map);
        GenValidUsageXrHandleInfo *gen_exportedlocalizationmapml_info = info_with_instance.first;
        (void)gen_exportedlocalizationmapml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetExportedLocalizationMapDataML(map, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetExportedLocalizationMapDataML(
    XrExportedLocalizationMapML map,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetExportedLocalizationMapDataML(map, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetExportedLocalizationMapDataML(map, bufferCapacityInput, bufferCountOutput, buffer);
}


// ---- XR_ML_spatial_anchors extension commands
XrResult GenValidUsageInputsXrCreateSpatialAnchorsAsyncML(
XrSession session,
const XrSpatialAnchorsCreateInfoBaseHeaderML* createInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorsAsyncML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsAsyncML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsAsyncML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsAsyncML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsCreateInfoBaseHeaderML \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate if XrSpatialAnchorsCreateInfoBaseHeaderML is a child structure of type XrSpatialAnchorsCreateInfoFromPoseML and it is valid
        {
            const XrSpatialAnchorsCreateInfoFromPoseML* new_spatialanchorscreateinfofromposeml_value = reinterpret_cast<const XrSpatialAnchorsCreateInfoFromPoseML*>(createInfo);
            if (new_spatialanchorscreateinfofromposeml_value->type == XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorsAsyncML",
                                                                objects_info,false, true, new_spatialanchorscreateinfofromposeml_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrCreateSpatialAnchorsAsyncML param createInfo";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsAsyncML-createInfo-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsAsyncML",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
        // Validate if XrSpatialAnchorsCreateInfoBaseHeaderML is a child structure of type XrSpatialAnchorsCreateInfoFromUuidsML and it is valid
        {
            const XrSpatialAnchorsCreateInfoFromUuidsML* new_spatialanchorscreateinfofromuuidsml_value = reinterpret_cast<const XrSpatialAnchorsCreateInfoFromUuidsML*>(createInfo);
            if (new_spatialanchorscreateinfofromuuidsml_value->type == XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorsAsyncML",
                                                                objects_info,false, true, new_spatialanchorscreateinfofromuuidsml_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrCreateSpatialAnchorsAsyncML param createInfo";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsAsyncML-createInfo-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsAsyncML",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
        // Validate that the base-structure XrSpatialAnchorsCreateInfoBaseHeaderML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorsAsyncML", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsAsyncML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsAsyncML",
                                objects_info,
                                "Command xrCreateSpatialAnchorsAsyncML param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsAsyncML-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsAsyncML", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSpatialAnchorsAsyncML-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorsAsyncML(
    XrSession session,
    const XrSpatialAnchorsCreateInfoBaseHeaderML* createInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorsAsyncML(session, createInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorsAsyncML(
    XrSession session,
    const XrSpatialAnchorsCreateInfoBaseHeaderML* createInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorsAsyncML(session, createInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorsAsyncML(session, createInfo, future);
}

XrResult GenValidUsageInputsXrCreateSpatialAnchorsCompleteML(
XrSession session,
XrFutureEXT future,
XrCreateSpatialAnchorsCompletionML* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorsCompleteML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsCompleteML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsCompleteML", objects_info,
                                "Invalid NULL for XrCreateSpatialAnchorsCompletionML \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrCreateSpatialAnchorsCompletionML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorsCompleteML", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsCompleteML",
                                objects_info,
                                "Command xrCreateSpatialAnchorsCompleteML param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorsCompleteML(
    XrSession session,
    XrFutureEXT future,
    XrCreateSpatialAnchorsCompletionML* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorsCompleteML(session, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorsCompleteML(
    XrSession session,
    XrFutureEXT future,
    XrCreateSpatialAnchorsCompletionML* completion) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorsCompleteML(session, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorsCompleteML(session, future, completion);
}

XrResult GenValidUsageInputsXrGetSpatialAnchorStateML(
XrSpace anchor,
XrSpatialAnchorStateML* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(anchor, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&anchor);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"anchor\" ";
                oss << HandleToHexString(anchor);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialAnchorStateML-anchor-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialAnchorStateML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialAnchorStateML-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialAnchorStateML", objects_info,
                                "Invalid NULL for XrSpatialAnchorStateML \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorStateML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialAnchorStateML", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialAnchorStateML-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialAnchorStateML",
                                objects_info,
                                "Command xrGetSpatialAnchorStateML param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialAnchorStateML(
    XrSpace anchor,
    XrSpatialAnchorStateML* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialAnchorStateML(anchor, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialAnchorStateML(
    XrSpace anchor,
    XrSpatialAnchorStateML* state) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialAnchorStateML(anchor, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialAnchorStateML(anchor, state);
}


// ---- XR_ML_spatial_anchors_storage extension commands
XrResult GenValidUsageInputsXrCreateSpatialAnchorsStorageML(
XrSession session,
const XrSpatialAnchorsCreateStorageInfoML* createInfo,
XrSpatialAnchorsStorageML* storage) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorsStorageML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsStorageML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsStorageML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsStorageML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsCreateStorageInfoML \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorsCreateStorageInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorsStorageML", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsStorageML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsStorageML",
                                objects_info,
                                "Command xrCreateSpatialAnchorsStorageML param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == storage) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorsStorageML-storage-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorsStorageML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsStorageML \"storage\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorsStorageML(
    XrSession session,
    const XrSpatialAnchorsCreateStorageInfoML* createInfo,
    XrSpatialAnchorsStorageML* storage) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorsStorageML(session, createInfo, storage);
        if (XR_SUCCESS == result && nullptr != storage) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_spatialanchorsstorageml_info.insert(*storage, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorsStorageML(
    XrSession session,
    const XrSpatialAnchorsCreateStorageInfoML* createInfo,
    XrSpatialAnchorsStorageML* storage) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorsStorageML(session, createInfo, storage);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorsStorageML(session, createInfo, storage);
}

XrResult GenValidUsageInputsXrDestroySpatialAnchorsStorageML(
XrSpatialAnchorsStorageML storage) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(storage, XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&storage);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
                oss << HandleToHexString(storage);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpatialAnchorsStorageML-storage-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpatialAnchorsStorageML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpatialAnchorsStorageML(
    XrSpatialAnchorsStorageML storage) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpatialAnchorsStorageML(storage);
        if (XR_SUCCEEDED(result)) {
            g_spatialanchorsstorageml_info.erase(storage);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpatialAnchorsStorageML(
    XrSpatialAnchorsStorageML storage) {
    XrResult test_result = GenValidUsageInputsXrDestroySpatialAnchorsStorageML(storage);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpatialAnchorsStorageML(storage);
}

XrResult GenValidUsageInputsXrQuerySpatialAnchorsAsyncML(
XrSpatialAnchorsStorageML storage,
const XrSpatialAnchorsQueryInfoBaseHeaderML* queryInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(storage, XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&storage);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
                oss << HandleToHexString(storage);
                CoreValidLogMessage(nullptr, "VUID-xrQuerySpatialAnchorsAsyncML-storage-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialAnchorsAsyncML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == queryInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialAnchorsAsyncML-queryInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialAnchorsAsyncML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsQueryInfoBaseHeaderML \"queryInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate if XrSpatialAnchorsQueryInfoBaseHeaderML is a child structure of type XrSpatialAnchorsQueryInfoRadiusML and it is valid
        {
            const XrSpatialAnchorsQueryInfoRadiusML* new_spatialanchorsqueryinforadiusml_value = reinterpret_cast<const XrSpatialAnchorsQueryInfoRadiusML*>(queryInfo);
            if (new_spatialanchorsqueryinforadiusml_value->type == XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySpatialAnchorsAsyncML",
                                                                objects_info,false, true, new_spatialanchorsqueryinforadiusml_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrQuerySpatialAnchorsAsyncML param queryInfo";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialAnchorsAsyncML-queryInfo-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialAnchorsAsyncML",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
        // Validate that the base-structure XrSpatialAnchorsQueryInfoBaseHeaderML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySpatialAnchorsAsyncML", objects_info,
                                                        true, true, queryInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialAnchorsAsyncML-queryInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialAnchorsAsyncML",
                                objects_info,
                                "Command xrQuerySpatialAnchorsAsyncML param queryInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialAnchorsAsyncML-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialAnchorsAsyncML", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrQuerySpatialAnchorsAsyncML-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQuerySpatialAnchorsAsyncML(
    XrSpatialAnchorsStorageML storage,
    const XrSpatialAnchorsQueryInfoBaseHeaderML* queryInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QuerySpatialAnchorsAsyncML(storage, queryInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQuerySpatialAnchorsAsyncML(
    XrSpatialAnchorsStorageML storage,
    const XrSpatialAnchorsQueryInfoBaseHeaderML* queryInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrQuerySpatialAnchorsAsyncML(storage, queryInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQuerySpatialAnchorsAsyncML(storage, queryInfo, future);
}

XrResult GenValidUsageInputsXrQuerySpatialAnchorsCompleteML(
XrSpatialAnchorsStorageML storage,
XrFutureEXT future,
XrSpatialAnchorsQueryCompletionML* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(storage, XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&storage);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
                oss << HandleToHexString(storage);
                CoreValidLogMessage(nullptr, "VUID-xrQuerySpatialAnchorsCompleteML-storage-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialAnchorsCompleteML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialAnchorsCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialAnchorsCompleteML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsQueryCompletionML \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorsQueryCompletionML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySpatialAnchorsCompleteML", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialAnchorsCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialAnchorsCompleteML",
                                objects_info,
                                "Command xrQuerySpatialAnchorsCompleteML param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQuerySpatialAnchorsCompleteML(
    XrSpatialAnchorsStorageML storage,
    XrFutureEXT future,
    XrSpatialAnchorsQueryCompletionML* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QuerySpatialAnchorsCompleteML(storage, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQuerySpatialAnchorsCompleteML(
    XrSpatialAnchorsStorageML storage,
    XrFutureEXT future,
    XrSpatialAnchorsQueryCompletionML* completion) {
    XrResult test_result = GenValidUsageInputsXrQuerySpatialAnchorsCompleteML(storage, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQuerySpatialAnchorsCompleteML(storage, future, completion);
}

XrResult GenValidUsageInputsXrPublishSpatialAnchorsAsyncML(
XrSpatialAnchorsStorageML storage,
const XrSpatialAnchorsPublishInfoML* publishInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(storage, XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&storage);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
                oss << HandleToHexString(storage);
                CoreValidLogMessage(nullptr, "VUID-xrPublishSpatialAnchorsAsyncML-storage-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPublishSpatialAnchorsAsyncML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == publishInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPublishSpatialAnchorsAsyncML-publishInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPublishSpatialAnchorsAsyncML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsPublishInfoML \"publishInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorsPublishInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPublishSpatialAnchorsAsyncML", objects_info,
                                                        true, true, publishInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPublishSpatialAnchorsAsyncML-publishInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPublishSpatialAnchorsAsyncML",
                                objects_info,
                                "Command xrPublishSpatialAnchorsAsyncML param publishInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPublishSpatialAnchorsAsyncML-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPublishSpatialAnchorsAsyncML", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrPublishSpatialAnchorsAsyncML-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPublishSpatialAnchorsAsyncML(
    XrSpatialAnchorsStorageML storage,
    const XrSpatialAnchorsPublishInfoML* publishInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PublishSpatialAnchorsAsyncML(storage, publishInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPublishSpatialAnchorsAsyncML(
    XrSpatialAnchorsStorageML storage,
    const XrSpatialAnchorsPublishInfoML* publishInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrPublishSpatialAnchorsAsyncML(storage, publishInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPublishSpatialAnchorsAsyncML(storage, publishInfo, future);
}

XrResult GenValidUsageInputsXrPublishSpatialAnchorsCompleteML(
XrSpatialAnchorsStorageML storage,
XrFutureEXT future,
XrSpatialAnchorsPublishCompletionML* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(storage, XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&storage);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
                oss << HandleToHexString(storage);
                CoreValidLogMessage(nullptr, "VUID-xrPublishSpatialAnchorsCompleteML-storage-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPublishSpatialAnchorsCompleteML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPublishSpatialAnchorsCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPublishSpatialAnchorsCompleteML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsPublishCompletionML \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorsPublishCompletionML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPublishSpatialAnchorsCompleteML", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPublishSpatialAnchorsCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPublishSpatialAnchorsCompleteML",
                                objects_info,
                                "Command xrPublishSpatialAnchorsCompleteML param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPublishSpatialAnchorsCompleteML(
    XrSpatialAnchorsStorageML storage,
    XrFutureEXT future,
    XrSpatialAnchorsPublishCompletionML* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PublishSpatialAnchorsCompleteML(storage, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPublishSpatialAnchorsCompleteML(
    XrSpatialAnchorsStorageML storage,
    XrFutureEXT future,
    XrSpatialAnchorsPublishCompletionML* completion) {
    XrResult test_result = GenValidUsageInputsXrPublishSpatialAnchorsCompleteML(storage, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPublishSpatialAnchorsCompleteML(storage, future, completion);
}

XrResult GenValidUsageInputsXrDeleteSpatialAnchorsAsyncML(
XrSpatialAnchorsStorageML storage,
const XrSpatialAnchorsDeleteInfoML* deleteInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(storage, XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&storage);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
                oss << HandleToHexString(storage);
                CoreValidLogMessage(nullptr, "VUID-xrDeleteSpatialAnchorsAsyncML-storage-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeleteSpatialAnchorsAsyncML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == deleteInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDeleteSpatialAnchorsAsyncML-deleteInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeleteSpatialAnchorsAsyncML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsDeleteInfoML \"deleteInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorsDeleteInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrDeleteSpatialAnchorsAsyncML", objects_info,
                                                        true, true, deleteInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDeleteSpatialAnchorsAsyncML-deleteInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeleteSpatialAnchorsAsyncML",
                                objects_info,
                                "Command xrDeleteSpatialAnchorsAsyncML param deleteInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDeleteSpatialAnchorsAsyncML-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeleteSpatialAnchorsAsyncML", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrDeleteSpatialAnchorsAsyncML-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDeleteSpatialAnchorsAsyncML(
    XrSpatialAnchorsStorageML storage,
    const XrSpatialAnchorsDeleteInfoML* deleteInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DeleteSpatialAnchorsAsyncML(storage, deleteInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDeleteSpatialAnchorsAsyncML(
    XrSpatialAnchorsStorageML storage,
    const XrSpatialAnchorsDeleteInfoML* deleteInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrDeleteSpatialAnchorsAsyncML(storage, deleteInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDeleteSpatialAnchorsAsyncML(storage, deleteInfo, future);
}

XrResult GenValidUsageInputsXrDeleteSpatialAnchorsCompleteML(
XrSpatialAnchorsStorageML storage,
XrFutureEXT future,
XrSpatialAnchorsDeleteCompletionML* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(storage, XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&storage);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
                oss << HandleToHexString(storage);
                CoreValidLogMessage(nullptr, "VUID-xrDeleteSpatialAnchorsCompleteML-storage-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeleteSpatialAnchorsCompleteML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDeleteSpatialAnchorsCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeleteSpatialAnchorsCompleteML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsDeleteCompletionML \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorsDeleteCompletionML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrDeleteSpatialAnchorsCompleteML", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDeleteSpatialAnchorsCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDeleteSpatialAnchorsCompleteML",
                                objects_info,
                                "Command xrDeleteSpatialAnchorsCompleteML param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDeleteSpatialAnchorsCompleteML(
    XrSpatialAnchorsStorageML storage,
    XrFutureEXT future,
    XrSpatialAnchorsDeleteCompletionML* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DeleteSpatialAnchorsCompleteML(storage, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDeleteSpatialAnchorsCompleteML(
    XrSpatialAnchorsStorageML storage,
    XrFutureEXT future,
    XrSpatialAnchorsDeleteCompletionML* completion) {
    XrResult test_result = GenValidUsageInputsXrDeleteSpatialAnchorsCompleteML(storage, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDeleteSpatialAnchorsCompleteML(storage, future, completion);
}

XrResult GenValidUsageInputsXrUpdateSpatialAnchorsExpirationAsyncML(
XrSpatialAnchorsStorageML storage,
const XrSpatialAnchorsUpdateExpirationInfoML* updateInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(storage, XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&storage);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
                oss << HandleToHexString(storage);
                CoreValidLogMessage(nullptr, "VUID-xrUpdateSpatialAnchorsExpirationAsyncML-storage-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSpatialAnchorsExpirationAsyncML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == updateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSpatialAnchorsExpirationAsyncML-updateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSpatialAnchorsExpirationAsyncML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsUpdateExpirationInfoML \"updateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorsUpdateExpirationInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSpatialAnchorsExpirationAsyncML", objects_info,
                                                        true, true, updateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSpatialAnchorsExpirationAsyncML-updateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSpatialAnchorsExpirationAsyncML",
                                objects_info,
                                "Command xrUpdateSpatialAnchorsExpirationAsyncML param updateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSpatialAnchorsExpirationAsyncML-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSpatialAnchorsExpirationAsyncML", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrUpdateSpatialAnchorsExpirationAsyncML-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUpdateSpatialAnchorsExpirationAsyncML(
    XrSpatialAnchorsStorageML storage,
    const XrSpatialAnchorsUpdateExpirationInfoML* updateInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UpdateSpatialAnchorsExpirationAsyncML(storage, updateInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUpdateSpatialAnchorsExpirationAsyncML(
    XrSpatialAnchorsStorageML storage,
    const XrSpatialAnchorsUpdateExpirationInfoML* updateInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrUpdateSpatialAnchorsExpirationAsyncML(storage, updateInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUpdateSpatialAnchorsExpirationAsyncML(storage, updateInfo, future);
}

XrResult GenValidUsageInputsXrUpdateSpatialAnchorsExpirationCompleteML(
XrSpatialAnchorsStorageML storage,
XrFutureEXT future,
XrSpatialAnchorsUpdateExpirationCompletionML* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(storage, XR_OBJECT_TYPE_SPATIAL_ANCHORS_STORAGE_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorsStorageMLHandle(&storage);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorsStorageML handle \"storage\" ";
                oss << HandleToHexString(storage);
                CoreValidLogMessage(nullptr, "VUID-xrUpdateSpatialAnchorsExpirationCompleteML-storage-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSpatialAnchorsExpirationCompleteML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSpatialAnchorsExpirationCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSpatialAnchorsExpirationCompleteML", objects_info,
                                "Invalid NULL for XrSpatialAnchorsUpdateExpirationCompletionML \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorsUpdateExpirationCompletionML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSpatialAnchorsExpirationCompleteML", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSpatialAnchorsExpirationCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSpatialAnchorsExpirationCompleteML",
                                objects_info,
                                "Command xrUpdateSpatialAnchorsExpirationCompleteML param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUpdateSpatialAnchorsExpirationCompleteML(
    XrSpatialAnchorsStorageML storage,
    XrFutureEXT future,
    XrSpatialAnchorsUpdateExpirationCompletionML* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorsstorageml_info.getWithInstanceInfo(storage);
        GenValidUsageXrHandleInfo *gen_spatialanchorsstorageml_info = info_with_instance.first;
        (void)gen_spatialanchorsstorageml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UpdateSpatialAnchorsExpirationCompleteML(storage, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUpdateSpatialAnchorsExpirationCompleteML(
    XrSpatialAnchorsStorageML storage,
    XrFutureEXT future,
    XrSpatialAnchorsUpdateExpirationCompletionML* completion) {
    XrResult test_result = GenValidUsageInputsXrUpdateSpatialAnchorsExpirationCompleteML(storage, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUpdateSpatialAnchorsExpirationCompleteML(storage, future, completion);
}


// ---- XR_MSFT_spatial_anchor_persistence extension commands
XrResult GenValidUsageInputsXrCreateSpatialAnchorStoreConnectionMSFT(
XrSession session,
XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorStoreConnectionMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorStoreConnectionMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spatialAnchorStore) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorStoreConnectionMSFT-spatialAnchorStore-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorStoreConnectionMSFT", objects_info,
                                "Invalid NULL for XrSpatialAnchorStoreConnectionMSFT \"spatialAnchorStore\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorStoreConnectionMSFT(
    XrSession session,
    XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorStoreConnectionMSFT(session, spatialAnchorStore);
        if (XR_SUCCESS == result && nullptr != spatialAnchorStore) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_spatialanchorstoreconnectionmsft_info.insert(*spatialAnchorStore, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorStoreConnectionMSFT(
    XrSession session,
    XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorStoreConnectionMSFT(session, spatialAnchorStore);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorStoreConnectionMSFT(session, spatialAnchorStore);
}

XrResult GenValidUsageInputsXrDestroySpatialAnchorStoreConnectionMSFT(
XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialAnchorStore, XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorStoreConnectionMSFTHandle(&spatialAnchorStore);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorStoreConnectionMSFT handle \"spatialAnchorStore\" ";
                oss << HandleToHexString(spatialAnchorStore);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpatialAnchorStoreConnectionMSFT-spatialAnchorStore-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpatialAnchorStoreConnectionMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpatialAnchorStoreConnectionMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpatialAnchorStoreConnectionMSFT(spatialAnchorStore);
        if (XR_SUCCEEDED(result)) {
            g_spatialanchorstoreconnectionmsft_info.erase(spatialAnchorStore);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpatialAnchorStoreConnectionMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore) {
    XrResult test_result = GenValidUsageInputsXrDestroySpatialAnchorStoreConnectionMSFT(spatialAnchorStore);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpatialAnchorStoreConnectionMSFT(spatialAnchorStore);
}

XrResult GenValidUsageInputsXrPersistSpatialAnchorMSFT(
XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialAnchorStore, XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorStoreConnectionMSFTHandle(&spatialAnchorStore);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorStoreConnectionMSFT handle \"spatialAnchorStore\" ";
                oss << HandleToHexString(spatialAnchorStore);
                CoreValidLogMessage(nullptr, "VUID-xrPersistSpatialAnchorMSFT-spatialAnchorStore-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spatialAnchorPersistenceInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialAnchorMSFT-spatialAnchorPersistenceInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorMSFT", objects_info,
                                "Invalid NULL for XrSpatialAnchorPersistenceInfoMSFT \"spatialAnchorPersistenceInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorPersistenceInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPersistSpatialAnchorMSFT", objects_info,
                                                        true, true, spatialAnchorPersistenceInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialAnchorMSFT-spatialAnchorPersistenceInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorMSFT",
                                objects_info,
                                "Command xrPersistSpatialAnchorMSFT param spatialAnchorPersistenceInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPersistSpatialAnchorMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
    const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PersistSpatialAnchorMSFT(spatialAnchorStore, spatialAnchorPersistenceInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPersistSpatialAnchorMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
    const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo) {
    XrResult test_result = GenValidUsageInputsXrPersistSpatialAnchorMSFT(spatialAnchorStore, spatialAnchorPersistenceInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPersistSpatialAnchorMSFT(spatialAnchorStore, spatialAnchorPersistenceInfo);
}

XrResult GenValidUsageInputsXrEnumeratePersistedSpatialAnchorNamesMSFT(
XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
uint32_t spatialAnchorNameCapacityInput,
uint32_t* spatialAnchorNameCountOutput,
XrSpatialAnchorPersistenceNameMSFT* spatialAnchorNames) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialAnchorStore, XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorStoreConnectionMSFTHandle(&spatialAnchorStore);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorStoreConnectionMSFT handle \"spatialAnchorStore\" ";
                oss << HandleToHexString(spatialAnchorStore);
                CoreValidLogMessage(nullptr, "VUID-xrEnumeratePersistedSpatialAnchorNamesMSFT-spatialAnchorStore-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePersistedSpatialAnchorNamesMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when spatialAnchorNameCapacityInput is non-zero
        if (0 != spatialAnchorNameCapacityInput && nullptr == spatialAnchorNames) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumeratePersistedSpatialAnchorNamesMSFT-spatialAnchorNames-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePersistedSpatialAnchorNamesMSFT",
                                objects_info,
                                "Command xrEnumeratePersistedSpatialAnchorNamesMSFT param spatialAnchorNames is NULL, but spatialAnchorNameCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spatialAnchorNameCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumeratePersistedSpatialAnchorNamesMSFT-spatialAnchorNameCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePersistedSpatialAnchorNamesMSFT", objects_info,
                                "Invalid NULL for uint32_t \"spatialAnchorNameCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumeratePersistedSpatialAnchorNamesMSFT-spatialAnchorNameCountOutput-parameter" type
        if (spatialAnchorNames) {
            for (uint32_t value_spatialanchornames_inc = 0; value_spatialanchornames_inc < spatialAnchorNameCapacityInput; ++value_spatialanchornames_inc) {
                // Validate that the structure XrSpatialAnchorPersistenceNameMSFT is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumeratePersistedSpatialAnchorNamesMSFT", objects_info,
                                                                true, true, &spatialAnchorNames[value_spatialanchornames_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumeratePersistedSpatialAnchorNamesMSFT-spatialAnchorNames-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePersistedSpatialAnchorNamesMSFT",
                                        objects_info,
                                        "Command xrEnumeratePersistedSpatialAnchorNamesMSFT param spatialAnchorNames is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumeratePersistedSpatialAnchorNamesMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
    uint32_t spatialAnchorNameCapacityInput,
    uint32_t* spatialAnchorNameCountOutput,
    XrSpatialAnchorPersistenceNameMSFT* spatialAnchorNames) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumeratePersistedSpatialAnchorNamesMSFT(spatialAnchorStore, spatialAnchorNameCapacityInput, spatialAnchorNameCountOutput, spatialAnchorNames);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumeratePersistedSpatialAnchorNamesMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
    uint32_t spatialAnchorNameCapacityInput,
    uint32_t* spatialAnchorNameCountOutput,
    XrSpatialAnchorPersistenceNameMSFT* spatialAnchorNames) {
    XrResult test_result = GenValidUsageInputsXrEnumeratePersistedSpatialAnchorNamesMSFT(spatialAnchorStore, spatialAnchorNameCapacityInput, spatialAnchorNameCountOutput, spatialAnchorNames);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumeratePersistedSpatialAnchorNamesMSFT(spatialAnchorStore, spatialAnchorNameCapacityInput, spatialAnchorNameCountOutput, spatialAnchorNames);
}

XrResult GenValidUsageInputsXrCreateSpatialAnchorFromPersistedNameMSFT(
XrSession session,
const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo,
XrSpatialAnchorMSFT* spatialAnchor) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorFromPersistedNameMSFT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFromPersistedNameMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spatialAnchorCreateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorFromPersistedNameMSFT-spatialAnchorCreateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFromPersistedNameMSFT", objects_info,
                                "Invalid NULL for XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT \"spatialAnchorCreateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorFromPersistedNameMSFT", objects_info,
                                                        true, true, spatialAnchorCreateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorFromPersistedNameMSFT-spatialAnchorCreateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFromPersistedNameMSFT",
                                objects_info,
                                "Command xrCreateSpatialAnchorFromPersistedNameMSFT param spatialAnchorCreateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spatialAnchor) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorFromPersistedNameMSFT-spatialAnchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorFromPersistedNameMSFT", objects_info,
                                "Invalid NULL for XrSpatialAnchorMSFT \"spatialAnchor\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorFromPersistedNameMSFT(
    XrSession session,
    const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo,
    XrSpatialAnchorMSFT* spatialAnchor) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorFromPersistedNameMSFT(session, spatialAnchorCreateInfo, spatialAnchor);
        if (XR_SUCCESS == result && nullptr != spatialAnchor) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_spatialanchormsft_info.insert(*spatialAnchor, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorFromPersistedNameMSFT(
    XrSession session,
    const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo,
    XrSpatialAnchorMSFT* spatialAnchor) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorFromPersistedNameMSFT(session, spatialAnchorCreateInfo, spatialAnchor);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorFromPersistedNameMSFT(session, spatialAnchorCreateInfo, spatialAnchor);
}

XrResult GenValidUsageInputsXrUnpersistSpatialAnchorMSFT(
XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialAnchorStore, XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorStoreConnectionMSFTHandle(&spatialAnchorStore);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorStoreConnectionMSFT handle \"spatialAnchorStore\" ";
                oss << HandleToHexString(spatialAnchorStore);
                CoreValidLogMessage(nullptr, "VUID-xrUnpersistSpatialAnchorMSFT-spatialAnchorStore-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spatialAnchorPersistenceName) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialAnchorMSFT-spatialAnchorPersistenceName-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorMSFT", objects_info,
                                "Invalid NULL for XrSpatialAnchorPersistenceNameMSFT \"spatialAnchorPersistenceName\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorPersistenceNameMSFT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUnpersistSpatialAnchorMSFT", objects_info,
                                                        true, true, spatialAnchorPersistenceName);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialAnchorMSFT-spatialAnchorPersistenceName-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorMSFT",
                                objects_info,
                                "Command xrUnpersistSpatialAnchorMSFT param spatialAnchorPersistenceName is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUnpersistSpatialAnchorMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
    const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UnpersistSpatialAnchorMSFT(spatialAnchorStore, spatialAnchorPersistenceName);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUnpersistSpatialAnchorMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
    const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName) {
    XrResult test_result = GenValidUsageInputsXrUnpersistSpatialAnchorMSFT(spatialAnchorStore, spatialAnchorPersistenceName);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUnpersistSpatialAnchorMSFT(spatialAnchorStore, spatialAnchorPersistenceName);
}

XrResult GenValidUsageInputsXrClearSpatialAnchorStoreMSFT(
XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialAnchorStore, XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAnchorStoreConnectionMSFTHandle(&spatialAnchorStore);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAnchorStoreConnectionMSFT handle \"spatialAnchorStore\" ";
                oss << HandleToHexString(spatialAnchorStore);
                CoreValidLogMessage(nullptr, "VUID-xrClearSpatialAnchorStoreMSFT-spatialAnchorStore-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrClearSpatialAnchorStoreMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrClearSpatialAnchorStoreMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialanchorstoreconnectionmsft_info.getWithInstanceInfo(spatialAnchorStore);
        GenValidUsageXrHandleInfo *gen_spatialanchorstoreconnectionmsft_info = info_with_instance.first;
        (void)gen_spatialanchorstoreconnectionmsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ClearSpatialAnchorStoreMSFT(spatialAnchorStore);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrClearSpatialAnchorStoreMSFT(
    XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore) {
    XrResult test_result = GenValidUsageInputsXrClearSpatialAnchorStoreMSFT(spatialAnchorStore);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrClearSpatialAnchorStoreMSFT(spatialAnchorStore);
}


// ---- XR_MSFT_scene_marker extension commands
XrResult GenValidUsageInputsXrGetSceneMarkerRawDataMSFT(
XrSceneMSFT scene,
const XrUuidMSFT* markerId,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(scene, XR_OBJECT_TYPE_SCENE_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMSFTHandle(&scene);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMSFT handle \"scene\" ";
                oss << HandleToHexString(scene);
                CoreValidLogMessage(nullptr, "VUID-xrGetSceneMarkerRawDataMSFT-scene-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMarkerRawDataMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == markerId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMarkerRawDataMSFT-markerId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMarkerRawDataMSFT", objects_info,
                                "Invalid NULL for XrUuidMSFT \"markerId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSceneMarkerRawDataMSFT-markerId-parameter" type
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMarkerRawDataMSFT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMarkerRawDataMSFT",
                                objects_info,
                                "Command xrGetSceneMarkerRawDataMSFT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMarkerRawDataMSFT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMarkerRawDataMSFT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSceneMarkerRawDataMSFT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSceneMarkerRawDataMSFT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSceneMarkerRawDataMSFT(
    XrSceneMSFT scene,
    const XrUuidMSFT* markerId,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint8_t* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSceneMarkerRawDataMSFT(scene, markerId, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSceneMarkerRawDataMSFT(
    XrSceneMSFT scene,
    const XrUuidMSFT* markerId,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint8_t* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSceneMarkerRawDataMSFT(scene, markerId, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSceneMarkerRawDataMSFT(scene, markerId, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrGetSceneMarkerDecodedStringMSFT(
XrSceneMSFT scene,
const XrUuidMSFT* markerId,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(scene, XR_OBJECT_TYPE_SCENE_MSFT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMSFTHandle(&scene);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMSFT handle \"scene\" ";
                oss << HandleToHexString(scene);
                CoreValidLogMessage(nullptr, "VUID-xrGetSceneMarkerDecodedStringMSFT-scene-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMarkerDecodedStringMSFT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == markerId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMarkerDecodedStringMSFT-markerId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMarkerDecodedStringMSFT", objects_info,
                                "Invalid NULL for XrUuidMSFT \"markerId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSceneMarkerDecodedStringMSFT-markerId-parameter" type
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMarkerDecodedStringMSFT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMarkerDecodedStringMSFT",
                                objects_info,
                                "Command xrGetSceneMarkerDecodedStringMSFT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSceneMarkerDecodedStringMSFT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSceneMarkerDecodedStringMSFT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSceneMarkerDecodedStringMSFT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSceneMarkerDecodedStringMSFT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSceneMarkerDecodedStringMSFT(
    XrSceneMSFT scene,
    const XrUuidMSFT* markerId,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemsft_info.getWithInstanceInfo(scene);
        GenValidUsageXrHandleInfo *gen_scenemsft_info = info_with_instance.first;
        (void)gen_scenemsft_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSceneMarkerDecodedStringMSFT(scene, markerId, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSceneMarkerDecodedStringMSFT(
    XrSceneMSFT scene,
    const XrUuidMSFT* markerId,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSceneMarkerDecodedStringMSFT(scene, markerId, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSceneMarkerDecodedStringMSFT(scene, markerId, bufferCapacityInput, bufferCountOutput, buffer);
}


// ---- XR_FB_spatial_entity_query extension commands
XrResult GenValidUsageInputsXrQuerySpacesFB(
XrSession session,
const XrSpaceQueryInfoBaseHeaderFB* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrQuerySpacesFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpacesFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpacesFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpacesFB", objects_info,
                                "Invalid NULL for XrSpaceQueryInfoBaseHeaderFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate if XrSpaceQueryInfoBaseHeaderFB is a child structure of type XrSpaceQueryInfoFB and it is valid
        {
            const XrSpaceQueryInfoFB* new_spacequeryinfofb_value = reinterpret_cast<const XrSpaceQueryInfoFB*>(info);
            if (new_spacequeryinfofb_value->type == XR_TYPE_SPACE_QUERY_INFO_FB) {
                xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySpacesFB",
                                                                objects_info,false, true, new_spacequeryinfofb_value);
                if (XR_SUCCESS != xr_result) {
                    std::string error_message = "Command xrQuerySpacesFB param info";
                    error_message += " is invalid";
                    CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpacesFB-info-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpacesFB",
                                        objects_info,
                                        error_message);
                    return XR_ERROR_VALIDATION_FAILURE;
                }
            }
        }
        // Validate that the base-structure XrSpaceQueryInfoBaseHeaderFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySpacesFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpacesFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpacesFB",
                                objects_info,
                                "Command xrQuerySpacesFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpacesFB-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpacesFB", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrQuerySpacesFB-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQuerySpacesFB(
    XrSession session,
    const XrSpaceQueryInfoBaseHeaderFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QuerySpacesFB(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQuerySpacesFB(
    XrSession session,
    const XrSpaceQueryInfoBaseHeaderFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrQuerySpacesFB(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQuerySpacesFB(session, info, requestId);
}

XrResult GenValidUsageInputsXrRetrieveSpaceQueryResultsFB(
XrSession session,
XrAsyncRequestIdFB requestId,
XrSpaceQueryResultsFB* results) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrRetrieveSpaceQueryResultsFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRetrieveSpaceQueryResultsFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == results) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRetrieveSpaceQueryResultsFB-results-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRetrieveSpaceQueryResultsFB", objects_info,
                                "Invalid NULL for XrSpaceQueryResultsFB \"results\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceQueryResultsFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRetrieveSpaceQueryResultsFB", objects_info,
                                                        false, true, results);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRetrieveSpaceQueryResultsFB-results-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRetrieveSpaceQueryResultsFB",
                                objects_info,
                                "Command xrRetrieveSpaceQueryResultsFB param results is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRetrieveSpaceQueryResultsFB(
    XrSession session,
    XrAsyncRequestIdFB requestId,
    XrSpaceQueryResultsFB* results) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RetrieveSpaceQueryResultsFB(session, requestId, results);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRetrieveSpaceQueryResultsFB(
    XrSession session,
    XrAsyncRequestIdFB requestId,
    XrSpaceQueryResultsFB* results) {
    XrResult test_result = GenValidUsageInputsXrRetrieveSpaceQueryResultsFB(session, requestId, results);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRetrieveSpaceQueryResultsFB(session, requestId, results);
}


// ---- XR_FB_spatial_entity_storage extension commands
XrResult GenValidUsageInputsXrSaveSpaceFB(
XrSession session,
const XrSpaceSaveInfoFB* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSaveSpaceFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpaceFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSaveSpaceFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpaceFB", objects_info,
                                "Invalid NULL for XrSpaceSaveInfoFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceSaveInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSaveSpaceFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSaveSpaceFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpaceFB",
                                objects_info,
                                "Command xrSaveSpaceFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSaveSpaceFB-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpaceFB", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrSaveSpaceFB-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSaveSpaceFB(
    XrSession session,
    const XrSpaceSaveInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SaveSpaceFB(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSaveSpaceFB(
    XrSession session,
    const XrSpaceSaveInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrSaveSpaceFB(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSaveSpaceFB(session, info, requestId);
}

XrResult GenValidUsageInputsXrEraseSpaceFB(
XrSession session,
const XrSpaceEraseInfoFB* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEraseSpaceFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEraseSpaceFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEraseSpaceFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEraseSpaceFB", objects_info,
                                "Invalid NULL for XrSpaceEraseInfoFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceEraseInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrEraseSpaceFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEraseSpaceFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEraseSpaceFB",
                                objects_info,
                                "Command xrEraseSpaceFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEraseSpaceFB-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEraseSpaceFB", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEraseSpaceFB-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEraseSpaceFB(
    XrSession session,
    const XrSpaceEraseInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EraseSpaceFB(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEraseSpaceFB(
    XrSession session,
    const XrSpaceEraseInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrEraseSpaceFB(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEraseSpaceFB(session, info, requestId);
}


// ---- XR_OCULUS_audio_device_guid extension commands
#if defined(XR_USE_PLATFORM_WIN32)

XrResult GenValidUsageInputsXrGetAudioOutputDeviceGuidOculus(
XrInstance instance,
wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetAudioOutputDeviceGuidOculus-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAudioOutputDeviceGuidOculus",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetAudioOutputDeviceGuidOculus(
    XrInstance instance,
    wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetAudioOutputDeviceGuidOculus(instance, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetAudioOutputDeviceGuidOculus(
    XrInstance instance,
    wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]) {
    XrResult test_result = GenValidUsageInputsXrGetAudioOutputDeviceGuidOculus(instance, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetAudioOutputDeviceGuidOculus(instance, buffer);
}

#endif // defined(XR_USE_PLATFORM_WIN32)

#if defined(XR_USE_PLATFORM_WIN32)

XrResult GenValidUsageInputsXrGetAudioInputDeviceGuidOculus(
XrInstance instance,
wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrGetAudioInputDeviceGuidOculus-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAudioInputDeviceGuidOculus",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetAudioInputDeviceGuidOculus(
    XrInstance instance,
    wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->GetAudioInputDeviceGuidOculus(instance, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetAudioInputDeviceGuidOculus(
    XrInstance instance,
    wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]) {
    XrResult test_result = GenValidUsageInputsXrGetAudioInputDeviceGuidOculus(instance, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetAudioInputDeviceGuidOculus(instance, buffer);
}

#endif // defined(XR_USE_PLATFORM_WIN32)


// ---- XR_FB_spatial_entity_sharing extension commands
XrResult GenValidUsageInputsXrShareSpacesFB(
XrSession session,
const XrSpaceShareInfoFB* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrShareSpacesFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpacesFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpacesFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpacesFB", objects_info,
                                "Invalid NULL for XrSpaceShareInfoFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceShareInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrShareSpacesFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpacesFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpacesFB",
                                objects_info,
                                "Command xrShareSpacesFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpacesFB-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpacesFB", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrShareSpacesFB-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrShareSpacesFB(
    XrSession session,
    const XrSpaceShareInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ShareSpacesFB(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrShareSpacesFB(
    XrSession session,
    const XrSpaceShareInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrShareSpacesFB(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrShareSpacesFB(session, info, requestId);
}


// ---- XR_FB_scene extension commands
XrResult GenValidUsageInputsXrGetSpaceBoundingBox2DFB(
XrSession session,
XrSpace space,
XrRect2Df* boundingBox2DOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceBoundingBox2DFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundingBox2DFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundingBox2DFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundingBox2DFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(space), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpace ";
            oss_error << HandleToHexString(space);
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundingBox2DFB-space-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundingBox2DFB",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == boundingBox2DOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundingBox2DFB-boundingBox2DOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundingBox2DFB", objects_info,
                                "Invalid NULL for XrRect2Df \"boundingBox2DOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpaceBoundingBox2DFB-boundingBox2DOutput-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceBoundingBox2DFB(
    XrSession session,
    XrSpace space,
    XrRect2Df* boundingBox2DOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceBoundingBox2DFB(session, space, boundingBox2DOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceBoundingBox2DFB(
    XrSession session,
    XrSpace space,
    XrRect2Df* boundingBox2DOutput) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceBoundingBox2DFB(session, space, boundingBox2DOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceBoundingBox2DFB(session, space, boundingBox2DOutput);
}

XrResult GenValidUsageInputsXrGetSpaceBoundingBox3DFB(
XrSession session,
XrSpace space,
XrRect3DfFB* boundingBox3DOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceBoundingBox3DFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundingBox3DFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundingBox3DFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundingBox3DFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(space), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpace ";
            oss_error << HandleToHexString(space);
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundingBox3DFB-space-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundingBox3DFB",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == boundingBox3DOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundingBox3DFB-boundingBox3DOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundingBox3DFB", objects_info,
                                "Invalid NULL for XrRect3DfFB \"boundingBox3DOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpaceBoundingBox3DFB-boundingBox3DOutput-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceBoundingBox3DFB(
    XrSession session,
    XrSpace space,
    XrRect3DfFB* boundingBox3DOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceBoundingBox3DFB(session, space, boundingBox3DOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceBoundingBox3DFB(
    XrSession session,
    XrSpace space,
    XrRect3DfFB* boundingBox3DOutput) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceBoundingBox3DFB(session, space, boundingBox3DOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceBoundingBox3DFB(session, space, boundingBox3DOutput);
}

XrResult GenValidUsageInputsXrGetSpaceSemanticLabelsFB(
XrSession session,
XrSpace space,
XrSemanticLabelsFB* semanticLabelsOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceSemanticLabelsFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceSemanticLabelsFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceSemanticLabelsFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceSemanticLabelsFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(space), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpace ";
            oss_error << HandleToHexString(space);
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceSemanticLabelsFB-space-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceSemanticLabelsFB",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == semanticLabelsOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceSemanticLabelsFB-semanticLabelsOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceSemanticLabelsFB", objects_info,
                                "Invalid NULL for XrSemanticLabelsFB \"semanticLabelsOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSemanticLabelsFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceSemanticLabelsFB", objects_info,
                                                        false, true, semanticLabelsOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceSemanticLabelsFB-semanticLabelsOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceSemanticLabelsFB",
                                objects_info,
                                "Command xrGetSpaceSemanticLabelsFB param semanticLabelsOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceSemanticLabelsFB(
    XrSession session,
    XrSpace space,
    XrSemanticLabelsFB* semanticLabelsOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceSemanticLabelsFB(session, space, semanticLabelsOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceSemanticLabelsFB(
    XrSession session,
    XrSpace space,
    XrSemanticLabelsFB* semanticLabelsOutput) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceSemanticLabelsFB(session, space, semanticLabelsOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceSemanticLabelsFB(session, space, semanticLabelsOutput);
}

XrResult GenValidUsageInputsXrGetSpaceBoundary2DFB(
XrSession session,
XrSpace space,
XrBoundary2DFB* boundary2DOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceBoundary2DFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundary2DFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundary2DFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundary2DFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(space), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpace ";
            oss_error << HandleToHexString(space);
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundary2DFB-space-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundary2DFB",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == boundary2DOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundary2DFB-boundary2DOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundary2DFB", objects_info,
                                "Invalid NULL for XrBoundary2DFB \"boundary2DOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBoundary2DFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceBoundary2DFB", objects_info,
                                                        false, true, boundary2DOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceBoundary2DFB-boundary2DOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceBoundary2DFB",
                                objects_info,
                                "Command xrGetSpaceBoundary2DFB param boundary2DOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceBoundary2DFB(
    XrSession session,
    XrSpace space,
    XrBoundary2DFB* boundary2DOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceBoundary2DFB(session, space, boundary2DOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceBoundary2DFB(
    XrSession session,
    XrSpace space,
    XrBoundary2DFB* boundary2DOutput) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceBoundary2DFB(session, space, boundary2DOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceBoundary2DFB(session, space, boundary2DOutput);
}

XrResult GenValidUsageInputsXrGetSpaceRoomLayoutFB(
XrSession session,
XrSpace space,
XrRoomLayoutFB* roomLayoutOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceRoomLayoutFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomLayoutFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomLayoutFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomLayoutFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(space), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpace ";
            oss_error << HandleToHexString(space);
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomLayoutFB-space-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomLayoutFB",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == roomLayoutOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomLayoutFB-roomLayoutOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomLayoutFB", objects_info,
                                "Invalid NULL for XrRoomLayoutFB \"roomLayoutOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRoomLayoutFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceRoomLayoutFB", objects_info,
                                                        false, true, roomLayoutOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomLayoutFB-roomLayoutOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomLayoutFB",
                                objects_info,
                                "Command xrGetSpaceRoomLayoutFB param roomLayoutOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceRoomLayoutFB(
    XrSession session,
    XrSpace space,
    XrRoomLayoutFB* roomLayoutOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceRoomLayoutFB(session, space, roomLayoutOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceRoomLayoutFB(
    XrSession session,
    XrSpace space,
    XrRoomLayoutFB* roomLayoutOutput) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceRoomLayoutFB(session, space, roomLayoutOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceRoomLayoutFB(session, space, roomLayoutOutput);
}


// ---- XR_ALMALENCE_digital_lens_control extension commands
XrResult GenValidUsageInputsXrSetDigitalLensControlALMALENCE(
XrSession session,
const XrDigitalLensControlALMALENCE* digitalLensControl) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetDigitalLensControlALMALENCE-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetDigitalLensControlALMALENCE",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == digitalLensControl) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetDigitalLensControlALMALENCE-digitalLensControl-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetDigitalLensControlALMALENCE", objects_info,
                                "Invalid NULL for XrDigitalLensControlALMALENCE \"digitalLensControl\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrDigitalLensControlALMALENCE is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetDigitalLensControlALMALENCE", objects_info,
                                                        true, true, digitalLensControl);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetDigitalLensControlALMALENCE-digitalLensControl-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetDigitalLensControlALMALENCE",
                                objects_info,
                                "Command xrSetDigitalLensControlALMALENCE param digitalLensControl is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetDigitalLensControlALMALENCE(
    XrSession session,
    const XrDigitalLensControlALMALENCE* digitalLensControl) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetDigitalLensControlALMALENCE(session, digitalLensControl);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetDigitalLensControlALMALENCE(
    XrSession session,
    const XrDigitalLensControlALMALENCE* digitalLensControl) {
    XrResult test_result = GenValidUsageInputsXrSetDigitalLensControlALMALENCE(session, digitalLensControl);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetDigitalLensControlALMALENCE(session, digitalLensControl);
}


// ---- XR_FB_scene_capture extension commands
XrResult GenValidUsageInputsXrRequestSceneCaptureFB(
XrSession session,
const XrSceneCaptureRequestInfoFB* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrRequestSceneCaptureFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestSceneCaptureFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestSceneCaptureFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestSceneCaptureFB", objects_info,
                                "Invalid NULL for XrSceneCaptureRequestInfoFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneCaptureRequestInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRequestSceneCaptureFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestSceneCaptureFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestSceneCaptureFB",
                                objects_info,
                                "Command xrRequestSceneCaptureFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestSceneCaptureFB-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestSceneCaptureFB", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrRequestSceneCaptureFB-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestSceneCaptureFB(
    XrSession session,
    const XrSceneCaptureRequestInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestSceneCaptureFB(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestSceneCaptureFB(
    XrSession session,
    const XrSceneCaptureRequestInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrRequestSceneCaptureFB(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestSceneCaptureFB(session, info, requestId);
}


// ---- XR_FB_spatial_entity_container extension commands
XrResult GenValidUsageInputsXrGetSpaceContainerFB(
XrSession session,
XrSpace space,
XrSpaceContainerFB* spaceContainerOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceContainerFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceContainerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceContainerFB-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceContainerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(space), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpace ";
            oss_error << HandleToHexString(space);
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceContainerFB-space-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceContainerFB",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spaceContainerOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceContainerFB-spaceContainerOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceContainerFB", objects_info,
                                "Invalid NULL for XrSpaceContainerFB \"spaceContainerOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceContainerFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceContainerFB", objects_info,
                                                        false, true, spaceContainerOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceContainerFB-spaceContainerOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceContainerFB",
                                objects_info,
                                "Command xrGetSpaceContainerFB param spaceContainerOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceContainerFB(
    XrSession session,
    XrSpace space,
    XrSpaceContainerFB* spaceContainerOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceContainerFB(session, space, spaceContainerOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceContainerFB(
    XrSession session,
    XrSpace space,
    XrSpaceContainerFB* spaceContainerOutput) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceContainerFB(session, space, spaceContainerOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceContainerFB(session, space, spaceContainerOutput);
}


// ---- XR_META_foveation_eye_tracked extension commands
XrResult GenValidUsageInputsXrGetFoveationEyeTrackedStateMETA(
XrSession session,
XrFoveationEyeTrackedStateMETA* foveationState) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetFoveationEyeTrackedStateMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFoveationEyeTrackedStateMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == foveationState) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFoveationEyeTrackedStateMETA-foveationState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFoveationEyeTrackedStateMETA", objects_info,
                                "Invalid NULL for XrFoveationEyeTrackedStateMETA \"foveationState\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFoveationEyeTrackedStateMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFoveationEyeTrackedStateMETA", objects_info,
                                                        false, true, foveationState);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFoveationEyeTrackedStateMETA-foveationState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFoveationEyeTrackedStateMETA",
                                objects_info,
                                "Command xrGetFoveationEyeTrackedStateMETA param foveationState is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFoveationEyeTrackedStateMETA(
    XrSession session,
    XrFoveationEyeTrackedStateMETA* foveationState) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFoveationEyeTrackedStateMETA(session, foveationState);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFoveationEyeTrackedStateMETA(
    XrSession session,
    XrFoveationEyeTrackedStateMETA* foveationState) {
    XrResult test_result = GenValidUsageInputsXrGetFoveationEyeTrackedStateMETA(session, foveationState);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFoveationEyeTrackedStateMETA(session, foveationState);
}


// ---- XR_FB_face_tracking extension commands
XrResult GenValidUsageInputsXrCreateFaceTrackerFB(
XrSession session,
const XrFaceTrackerCreateInfoFB* createInfo,
XrFaceTrackerFB* faceTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateFaceTrackerFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTrackerFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerFB", objects_info,
                                "Invalid NULL for XrFaceTrackerCreateInfoFB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceTrackerCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateFaceTrackerFB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTrackerFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerFB",
                                objects_info,
                                "Command xrCreateFaceTrackerFB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == faceTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTrackerFB-faceTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerFB", objects_info,
                                "Invalid NULL for XrFaceTrackerFB \"faceTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateFaceTrackerFB(
    XrSession session,
    const XrFaceTrackerCreateInfoFB* createInfo,
    XrFaceTrackerFB* faceTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateFaceTrackerFB(session, createInfo, faceTracker);
        if (XR_SUCCESS == result && nullptr != faceTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_facetrackerfb_info.insert(*faceTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateFaceTrackerFB(
    XrSession session,
    const XrFaceTrackerCreateInfoFB* createInfo,
    XrFaceTrackerFB* faceTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateFaceTrackerFB(session, createInfo, faceTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateFaceTrackerFB(session, createInfo, faceTracker);
}

XrResult GenValidUsageInputsXrDestroyFaceTrackerFB(
XrFaceTrackerFB faceTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(faceTracker, XR_OBJECT_TYPE_FACE_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTrackerFBHandle(&faceTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTrackerFB handle \"faceTracker\" ";
                oss << HandleToHexString(faceTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyFaceTrackerFB-faceTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyFaceTrackerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetrackerfb_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerfb_info = info_with_instance.first;
        (void)gen_facetrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyFaceTrackerFB(
    XrFaceTrackerFB faceTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetrackerfb_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerfb_info = info_with_instance.first;
        (void)gen_facetrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyFaceTrackerFB(faceTracker);
        if (XR_SUCCEEDED(result)) {
            g_facetrackerfb_info.erase(faceTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyFaceTrackerFB(
    XrFaceTrackerFB faceTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyFaceTrackerFB(faceTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyFaceTrackerFB(faceTracker);
}

XrResult GenValidUsageInputsXrGetFaceExpressionWeightsFB(
XrFaceTrackerFB faceTracker,
const XrFaceExpressionInfoFB* expressionInfo,
XrFaceExpressionWeightsFB* expressionWeights) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(faceTracker, XR_OBJECT_TYPE_FACE_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTrackerFBHandle(&faceTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTrackerFB handle \"faceTracker\" ";
                oss << HandleToHexString(faceTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetFaceExpressionWeightsFB-faceTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeightsFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetrackerfb_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerfb_info = info_with_instance.first;
        (void)gen_facetrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == expressionInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceExpressionWeightsFB-expressionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeightsFB", objects_info,
                                "Invalid NULL for XrFaceExpressionInfoFB \"expressionInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceExpressionInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFaceExpressionWeightsFB", objects_info,
                                                        true, true, expressionInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceExpressionWeightsFB-expressionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeightsFB",
                                objects_info,
                                "Command xrGetFaceExpressionWeightsFB param expressionInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == expressionWeights) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceExpressionWeightsFB-expressionWeights-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeightsFB", objects_info,
                                "Invalid NULL for XrFaceExpressionWeightsFB \"expressionWeights\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceExpressionWeightsFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFaceExpressionWeightsFB", objects_info,
                                                        false, true, expressionWeights);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceExpressionWeightsFB-expressionWeights-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeightsFB",
                                objects_info,
                                "Command xrGetFaceExpressionWeightsFB param expressionWeights is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFaceExpressionWeightsFB(
    XrFaceTrackerFB faceTracker,
    const XrFaceExpressionInfoFB* expressionInfo,
    XrFaceExpressionWeightsFB* expressionWeights) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetrackerfb_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerfb_info = info_with_instance.first;
        (void)gen_facetrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFaceExpressionWeightsFB(faceTracker, expressionInfo, expressionWeights);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFaceExpressionWeightsFB(
    XrFaceTrackerFB faceTracker,
    const XrFaceExpressionInfoFB* expressionInfo,
    XrFaceExpressionWeightsFB* expressionWeights) {
    XrResult test_result = GenValidUsageInputsXrGetFaceExpressionWeightsFB(faceTracker, expressionInfo, expressionWeights);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFaceExpressionWeightsFB(faceTracker, expressionInfo, expressionWeights);
}


// ---- XR_FB_eye_tracking_social extension commands
XrResult GenValidUsageInputsXrCreateEyeTrackerFB(
XrSession session,
const XrEyeTrackerCreateInfoFB* createInfo,
XrEyeTrackerFB* eyeTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateEyeTrackerFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEyeTrackerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEyeTrackerFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEyeTrackerFB", objects_info,
                                "Invalid NULL for XrEyeTrackerCreateInfoFB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEyeTrackerCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateEyeTrackerFB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEyeTrackerFB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEyeTrackerFB",
                                objects_info,
                                "Command xrCreateEyeTrackerFB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == eyeTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEyeTrackerFB-eyeTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEyeTrackerFB", objects_info,
                                "Invalid NULL for XrEyeTrackerFB \"eyeTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateEyeTrackerFB(
    XrSession session,
    const XrEyeTrackerCreateInfoFB* createInfo,
    XrEyeTrackerFB* eyeTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateEyeTrackerFB(session, createInfo, eyeTracker);
        if (XR_SUCCESS == result && nullptr != eyeTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_eyetrackerfb_info.insert(*eyeTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateEyeTrackerFB(
    XrSession session,
    const XrEyeTrackerCreateInfoFB* createInfo,
    XrEyeTrackerFB* eyeTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateEyeTrackerFB(session, createInfo, eyeTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateEyeTrackerFB(session, createInfo, eyeTracker);
}

XrResult GenValidUsageInputsXrDestroyEyeTrackerFB(
XrEyeTrackerFB eyeTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(eyeTracker, XR_OBJECT_TYPE_EYE_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEyeTrackerFBHandle(&eyeTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEyeTrackerFB handle \"eyeTracker\" ";
                oss << HandleToHexString(eyeTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyEyeTrackerFB-eyeTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyEyeTrackerFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_eyetrackerfb_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerfb_info = info_with_instance.first;
        (void)gen_eyetrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyEyeTrackerFB(
    XrEyeTrackerFB eyeTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_eyetrackerfb_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerfb_info = info_with_instance.first;
        (void)gen_eyetrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyEyeTrackerFB(eyeTracker);
        if (XR_SUCCEEDED(result)) {
            g_eyetrackerfb_info.erase(eyeTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyEyeTrackerFB(
    XrEyeTrackerFB eyeTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyEyeTrackerFB(eyeTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyEyeTrackerFB(eyeTracker);
}

XrResult GenValidUsageInputsXrGetEyeGazesFB(
XrEyeTrackerFB eyeTracker,
const XrEyeGazesInfoFB* gazeInfo,
XrEyeGazesFB* eyeGazes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(eyeTracker, XR_OBJECT_TYPE_EYE_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEyeTrackerFBHandle(&eyeTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEyeTrackerFB handle \"eyeTracker\" ";
                oss << HandleToHexString(eyeTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetEyeGazesFB-eyeTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetEyeGazesFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_eyetrackerfb_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerfb_info = info_with_instance.first;
        (void)gen_eyetrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == gazeInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetEyeGazesFB-gazeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetEyeGazesFB", objects_info,
                                "Invalid NULL for XrEyeGazesInfoFB \"gazeInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEyeGazesInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetEyeGazesFB", objects_info,
                                                        true, true, gazeInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetEyeGazesFB-gazeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetEyeGazesFB",
                                objects_info,
                                "Command xrGetEyeGazesFB param gazeInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == eyeGazes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetEyeGazesFB-eyeGazes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetEyeGazesFB", objects_info,
                                "Invalid NULL for XrEyeGazesFB \"eyeGazes\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEyeGazesFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetEyeGazesFB", objects_info,
                                                        false, true, eyeGazes);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetEyeGazesFB-eyeGazes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetEyeGazesFB",
                                objects_info,
                                "Command xrGetEyeGazesFB param eyeGazes is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetEyeGazesFB(
    XrEyeTrackerFB eyeTracker,
    const XrEyeGazesInfoFB* gazeInfo,
    XrEyeGazesFB* eyeGazes) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_eyetrackerfb_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerfb_info = info_with_instance.first;
        (void)gen_eyetrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetEyeGazesFB(eyeTracker, gazeInfo, eyeGazes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetEyeGazesFB(
    XrEyeTrackerFB eyeTracker,
    const XrEyeGazesInfoFB* gazeInfo,
    XrEyeGazesFB* eyeGazes) {
    XrResult test_result = GenValidUsageInputsXrGetEyeGazesFB(eyeTracker, gazeInfo, eyeGazes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetEyeGazesFB(eyeTracker, gazeInfo, eyeGazes);
}


// ---- XR_FB_passthrough_keyboard_hands extension commands
XrResult GenValidUsageInputsXrPassthroughLayerSetKeyboardHandsIntensityFB(
XrPassthroughLayerFB layer,
const XrPassthroughKeyboardHandsIntensityFB* intensity) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(layer, XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerFBHandle(&layer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughLayerFB handle \"layer\" ";
                oss << HandleToHexString(layer);
                CoreValidLogMessage(nullptr, "VUID-xrPassthroughLayerSetKeyboardHandsIntensityFB-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughLayerSetKeyboardHandsIntensityFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == intensity) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPassthroughLayerSetKeyboardHandsIntensityFB-intensity-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughLayerSetKeyboardHandsIntensityFB", objects_info,
                                "Invalid NULL for XrPassthroughKeyboardHandsIntensityFB \"intensity\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughKeyboardHandsIntensityFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPassthroughLayerSetKeyboardHandsIntensityFB", objects_info,
                                                        true, true, intensity);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPassthroughLayerSetKeyboardHandsIntensityFB-intensity-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPassthroughLayerSetKeyboardHandsIntensityFB",
                                objects_info,
                                "Command xrPassthroughLayerSetKeyboardHandsIntensityFB param intensity is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPassthroughLayerSetKeyboardHandsIntensityFB(
    XrPassthroughLayerFB layer,
    const XrPassthroughKeyboardHandsIntensityFB* intensity) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughlayerfb_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerfb_info = info_with_instance.first;
        (void)gen_passthroughlayerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PassthroughLayerSetKeyboardHandsIntensityFB(layer, intensity);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPassthroughLayerSetKeyboardHandsIntensityFB(
    XrPassthroughLayerFB layer,
    const XrPassthroughKeyboardHandsIntensityFB* intensity) {
    XrResult test_result = GenValidUsageInputsXrPassthroughLayerSetKeyboardHandsIntensityFB(layer, intensity);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPassthroughLayerSetKeyboardHandsIntensityFB(layer, intensity);
}


// ---- XR_FB_haptic_pcm extension commands
XrResult GenValidUsageInputsXrGetDeviceSampleRateFB(
XrSession session,
const XrHapticActionInfo* hapticActionInfo,
XrDevicePcmSampleRateGetInfoFB* deviceSampleRate) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetDeviceSampleRateFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetDeviceSampleRateFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == hapticActionInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetDeviceSampleRateFB-hapticActionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetDeviceSampleRateFB", objects_info,
                                "Invalid NULL for XrHapticActionInfo \"hapticActionInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHapticActionInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetDeviceSampleRateFB", objects_info,
                                                        true, true, hapticActionInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetDeviceSampleRateFB-hapticActionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetDeviceSampleRateFB",
                                objects_info,
                                "Command xrGetDeviceSampleRateFB param hapticActionInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == deviceSampleRate) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetDeviceSampleRateFB-deviceSampleRate-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetDeviceSampleRateFB", objects_info,
                                "Invalid NULL for XrDevicePcmSampleRateGetInfoFB \"deviceSampleRate\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetDeviceSampleRateFB-deviceSampleRate-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetDeviceSampleRateFB(
    XrSession session,
    const XrHapticActionInfo* hapticActionInfo,
    XrDevicePcmSampleRateGetInfoFB* deviceSampleRate) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetDeviceSampleRateFB(session, hapticActionInfo, deviceSampleRate);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetDeviceSampleRateFB(
    XrSession session,
    const XrHapticActionInfo* hapticActionInfo,
    XrDevicePcmSampleRateGetInfoFB* deviceSampleRate) {
    XrResult test_result = GenValidUsageInputsXrGetDeviceSampleRateFB(session, hapticActionInfo, deviceSampleRate);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetDeviceSampleRateFB(session, hapticActionInfo, deviceSampleRate);
}


// ---- XR_META_passthrough_preferences extension commands
XrResult GenValidUsageInputsXrGetPassthroughPreferencesMETA(
XrSession session,
XrPassthroughPreferencesMETA* preferences) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetPassthroughPreferencesMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPassthroughPreferencesMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == preferences) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPassthroughPreferencesMETA-preferences-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPassthroughPreferencesMETA", objects_info,
                                "Invalid NULL for XrPassthroughPreferencesMETA \"preferences\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughPreferencesMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetPassthroughPreferencesMETA", objects_info,
                                                        false, true, preferences);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPassthroughPreferencesMETA-preferences-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPassthroughPreferencesMETA",
                                objects_info,
                                "Command xrGetPassthroughPreferencesMETA param preferences is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetPassthroughPreferencesMETA(
    XrSession session,
    XrPassthroughPreferencesMETA* preferences) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetPassthroughPreferencesMETA(session, preferences);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetPassthroughPreferencesMETA(
    XrSession session,
    XrPassthroughPreferencesMETA* preferences) {
    XrResult test_result = GenValidUsageInputsXrGetPassthroughPreferencesMETA(session, preferences);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetPassthroughPreferencesMETA(session, preferences);
}


// ---- XR_META_virtual_keyboard extension commands
XrResult GenValidUsageInputsXrCreateVirtualKeyboardMETA(
XrSession session,
const XrVirtualKeyboardCreateInfoMETA* createInfo,
XrVirtualKeyboardMETA* keyboard) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateVirtualKeyboardMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVirtualKeyboardMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardMETA", objects_info,
                                "Invalid NULL for XrVirtualKeyboardCreateInfoMETA \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVirtualKeyboardCreateInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateVirtualKeyboardMETA", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVirtualKeyboardMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardMETA",
                                objects_info,
                                "Command xrCreateVirtualKeyboardMETA param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == keyboard) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVirtualKeyboardMETA-keyboard-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardMETA", objects_info,
                                "Invalid NULL for XrVirtualKeyboardMETA \"keyboard\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateVirtualKeyboardMETA(
    XrSession session,
    const XrVirtualKeyboardCreateInfoMETA* createInfo,
    XrVirtualKeyboardMETA* keyboard) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateVirtualKeyboardMETA(session, createInfo, keyboard);
        if (XR_SUCCESS == result && nullptr != keyboard) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_virtualkeyboardmeta_info.insert(*keyboard, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateVirtualKeyboardMETA(
    XrSession session,
    const XrVirtualKeyboardCreateInfoMETA* createInfo,
    XrVirtualKeyboardMETA* keyboard) {
    XrResult test_result = GenValidUsageInputsXrCreateVirtualKeyboardMETA(session, createInfo, keyboard);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateVirtualKeyboardMETA(session, createInfo, keyboard);
}

XrResult GenValidUsageInputsXrDestroyVirtualKeyboardMETA(
XrVirtualKeyboardMETA keyboard) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyVirtualKeyboardMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyVirtualKeyboardMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyVirtualKeyboardMETA(
    XrVirtualKeyboardMETA keyboard) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyVirtualKeyboardMETA(keyboard);
        if (XR_SUCCEEDED(result)) {
            g_virtualkeyboardmeta_info.erase(keyboard);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyVirtualKeyboardMETA(
    XrVirtualKeyboardMETA keyboard) {
    XrResult test_result = GenValidUsageInputsXrDestroyVirtualKeyboardMETA(keyboard);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyVirtualKeyboardMETA(keyboard);
}

XrResult GenValidUsageInputsXrCreateVirtualKeyboardSpaceMETA(
XrSession session,
XrVirtualKeyboardMETA keyboard,
const XrVirtualKeyboardSpaceCreateInfoMETA* createInfo,
XrSpace* keyboardSpace) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateVirtualKeyboardSpaceMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardSpaceMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVirtualKeyboardSpaceMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardSpaceMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META,  MakeHandleGeneric(keyboard), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrVirtualKeyboardMETA ";
            oss_error << HandleToHexString(keyboard);
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVirtualKeyboardSpaceMETA-keyboard-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardSpaceMETA",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVirtualKeyboardSpaceMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardSpaceMETA", objects_info,
                                "Invalid NULL for XrVirtualKeyboardSpaceCreateInfoMETA \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVirtualKeyboardSpaceCreateInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateVirtualKeyboardSpaceMETA", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVirtualKeyboardSpaceMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardSpaceMETA",
                                objects_info,
                                "Command xrCreateVirtualKeyboardSpaceMETA param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == keyboardSpace) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateVirtualKeyboardSpaceMETA-keyboardSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateVirtualKeyboardSpaceMETA", objects_info,
                                "Invalid NULL for XrSpace \"keyboardSpace\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateVirtualKeyboardSpaceMETA(
    XrSession session,
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardSpaceCreateInfoMETA* createInfo,
    XrSpace* keyboardSpace) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateVirtualKeyboardSpaceMETA(session, keyboard, createInfo, keyboardSpace);
        if (XR_SUCCESS == result && nullptr != keyboardSpace) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*keyboardSpace, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateVirtualKeyboardSpaceMETA(
    XrSession session,
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardSpaceCreateInfoMETA* createInfo,
    XrSpace* keyboardSpace) {
    XrResult test_result = GenValidUsageInputsXrCreateVirtualKeyboardSpaceMETA(session, keyboard, createInfo, keyboardSpace);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateVirtualKeyboardSpaceMETA(session, keyboard, createInfo, keyboardSpace);
}

XrResult GenValidUsageInputsXrSuggestVirtualKeyboardLocationMETA(
XrVirtualKeyboardMETA keyboard,
const XrVirtualKeyboardLocationInfoMETA* locationInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(nullptr, "VUID-xrSuggestVirtualKeyboardLocationMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSuggestVirtualKeyboardLocationMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locationInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSuggestVirtualKeyboardLocationMETA-locationInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSuggestVirtualKeyboardLocationMETA", objects_info,
                                "Invalid NULL for XrVirtualKeyboardLocationInfoMETA \"locationInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVirtualKeyboardLocationInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSuggestVirtualKeyboardLocationMETA", objects_info,
                                                        true, true, locationInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSuggestVirtualKeyboardLocationMETA-locationInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSuggestVirtualKeyboardLocationMETA",
                                objects_info,
                                "Command xrSuggestVirtualKeyboardLocationMETA param locationInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSuggestVirtualKeyboardLocationMETA(
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardLocationInfoMETA* locationInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SuggestVirtualKeyboardLocationMETA(keyboard, locationInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSuggestVirtualKeyboardLocationMETA(
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardLocationInfoMETA* locationInfo) {
    XrResult test_result = GenValidUsageInputsXrSuggestVirtualKeyboardLocationMETA(keyboard, locationInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSuggestVirtualKeyboardLocationMETA(keyboard, locationInfo);
}

XrResult GenValidUsageInputsXrGetVirtualKeyboardScaleMETA(
XrVirtualKeyboardMETA keyboard,
float* scale) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(nullptr, "VUID-xrGetVirtualKeyboardScaleMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardScaleMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == scale) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVirtualKeyboardScaleMETA-scale-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardScaleMETA", objects_info,
                                "Invalid NULL for float \"scale\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetVirtualKeyboardScaleMETA-scale-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVirtualKeyboardScaleMETA(
    XrVirtualKeyboardMETA keyboard,
    float* scale) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetVirtualKeyboardScaleMETA(keyboard, scale);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVirtualKeyboardScaleMETA(
    XrVirtualKeyboardMETA keyboard,
    float* scale) {
    XrResult test_result = GenValidUsageInputsXrGetVirtualKeyboardScaleMETA(keyboard, scale);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVirtualKeyboardScaleMETA(keyboard, scale);
}

XrResult GenValidUsageInputsXrSetVirtualKeyboardModelVisibilityMETA(
XrVirtualKeyboardMETA keyboard,
const XrVirtualKeyboardModelVisibilitySetInfoMETA* modelVisibility) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(nullptr, "VUID-xrSetVirtualKeyboardModelVisibilityMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetVirtualKeyboardModelVisibilityMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == modelVisibility) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetVirtualKeyboardModelVisibilityMETA-modelVisibility-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetVirtualKeyboardModelVisibilityMETA", objects_info,
                                "Invalid NULL for XrVirtualKeyboardModelVisibilitySetInfoMETA \"modelVisibility\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVirtualKeyboardModelVisibilitySetInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetVirtualKeyboardModelVisibilityMETA", objects_info,
                                                        true, true, modelVisibility);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetVirtualKeyboardModelVisibilityMETA-modelVisibility-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetVirtualKeyboardModelVisibilityMETA",
                                objects_info,
                                "Command xrSetVirtualKeyboardModelVisibilityMETA param modelVisibility is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetVirtualKeyboardModelVisibilityMETA(
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardModelVisibilitySetInfoMETA* modelVisibility) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetVirtualKeyboardModelVisibilityMETA(keyboard, modelVisibility);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetVirtualKeyboardModelVisibilityMETA(
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardModelVisibilitySetInfoMETA* modelVisibility) {
    XrResult test_result = GenValidUsageInputsXrSetVirtualKeyboardModelVisibilityMETA(keyboard, modelVisibility);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetVirtualKeyboardModelVisibilityMETA(keyboard, modelVisibility);
}

XrResult GenValidUsageInputsXrGetVirtualKeyboardModelAnimationStatesMETA(
XrVirtualKeyboardMETA keyboard,
XrVirtualKeyboardModelAnimationStatesMETA* animationStates) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(nullptr, "VUID-xrGetVirtualKeyboardModelAnimationStatesMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardModelAnimationStatesMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == animationStates) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVirtualKeyboardModelAnimationStatesMETA-animationStates-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardModelAnimationStatesMETA", objects_info,
                                "Invalid NULL for XrVirtualKeyboardModelAnimationStatesMETA \"animationStates\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVirtualKeyboardModelAnimationStatesMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetVirtualKeyboardModelAnimationStatesMETA", objects_info,
                                                        false, true, animationStates);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVirtualKeyboardModelAnimationStatesMETA-animationStates-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardModelAnimationStatesMETA",
                                objects_info,
                                "Command xrGetVirtualKeyboardModelAnimationStatesMETA param animationStates is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVirtualKeyboardModelAnimationStatesMETA(
    XrVirtualKeyboardMETA keyboard,
    XrVirtualKeyboardModelAnimationStatesMETA* animationStates) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetVirtualKeyboardModelAnimationStatesMETA(keyboard, animationStates);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVirtualKeyboardModelAnimationStatesMETA(
    XrVirtualKeyboardMETA keyboard,
    XrVirtualKeyboardModelAnimationStatesMETA* animationStates) {
    XrResult test_result = GenValidUsageInputsXrGetVirtualKeyboardModelAnimationStatesMETA(keyboard, animationStates);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVirtualKeyboardModelAnimationStatesMETA(keyboard, animationStates);
}

XrResult GenValidUsageInputsXrGetVirtualKeyboardDirtyTexturesMETA(
XrVirtualKeyboardMETA keyboard,
uint32_t textureIdCapacityInput,
uint32_t* textureIdCountOutput,
uint64_t* textureIds) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(nullptr, "VUID-xrGetVirtualKeyboardDirtyTexturesMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardDirtyTexturesMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when textureIdCapacityInput is non-zero
        if (0 != textureIdCapacityInput && nullptr == textureIds) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVirtualKeyboardDirtyTexturesMETA-textureIds-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardDirtyTexturesMETA",
                                objects_info,
                                "Command xrGetVirtualKeyboardDirtyTexturesMETA param textureIds is NULL, but textureIdCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == textureIdCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVirtualKeyboardDirtyTexturesMETA-textureIdCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardDirtyTexturesMETA", objects_info,
                                "Invalid NULL for uint32_t \"textureIdCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetVirtualKeyboardDirtyTexturesMETA-textureIdCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetVirtualKeyboardDirtyTexturesMETA-textureIds-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVirtualKeyboardDirtyTexturesMETA(
    XrVirtualKeyboardMETA keyboard,
    uint32_t textureIdCapacityInput,
    uint32_t* textureIdCountOutput,
    uint64_t* textureIds) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetVirtualKeyboardDirtyTexturesMETA(keyboard, textureIdCapacityInput, textureIdCountOutput, textureIds);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVirtualKeyboardDirtyTexturesMETA(
    XrVirtualKeyboardMETA keyboard,
    uint32_t textureIdCapacityInput,
    uint32_t* textureIdCountOutput,
    uint64_t* textureIds) {
    XrResult test_result = GenValidUsageInputsXrGetVirtualKeyboardDirtyTexturesMETA(keyboard, textureIdCapacityInput, textureIdCountOutput, textureIds);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVirtualKeyboardDirtyTexturesMETA(keyboard, textureIdCapacityInput, textureIdCountOutput, textureIds);
}

XrResult GenValidUsageInputsXrGetVirtualKeyboardTextureDataMETA(
XrVirtualKeyboardMETA keyboard,
uint64_t textureId,
XrVirtualKeyboardTextureDataMETA* textureData) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(nullptr, "VUID-xrGetVirtualKeyboardTextureDataMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardTextureDataMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == textureData) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVirtualKeyboardTextureDataMETA-textureData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardTextureDataMETA", objects_info,
                                "Invalid NULL for XrVirtualKeyboardTextureDataMETA \"textureData\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVirtualKeyboardTextureDataMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetVirtualKeyboardTextureDataMETA", objects_info,
                                                        false, true, textureData);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetVirtualKeyboardTextureDataMETA-textureData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetVirtualKeyboardTextureDataMETA",
                                objects_info,
                                "Command xrGetVirtualKeyboardTextureDataMETA param textureData is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetVirtualKeyboardTextureDataMETA(
    XrVirtualKeyboardMETA keyboard,
    uint64_t textureId,
    XrVirtualKeyboardTextureDataMETA* textureData) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetVirtualKeyboardTextureDataMETA(keyboard, textureId, textureData);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetVirtualKeyboardTextureDataMETA(
    XrVirtualKeyboardMETA keyboard,
    uint64_t textureId,
    XrVirtualKeyboardTextureDataMETA* textureData) {
    XrResult test_result = GenValidUsageInputsXrGetVirtualKeyboardTextureDataMETA(keyboard, textureId, textureData);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetVirtualKeyboardTextureDataMETA(keyboard, textureId, textureData);
}

XrResult GenValidUsageInputsXrSendVirtualKeyboardInputMETA(
XrVirtualKeyboardMETA keyboard,
const XrVirtualKeyboardInputInfoMETA* info,
XrPosef* interactorRootPose) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(nullptr, "VUID-xrSendVirtualKeyboardInputMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSendVirtualKeyboardInputMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSendVirtualKeyboardInputMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSendVirtualKeyboardInputMETA", objects_info,
                                "Invalid NULL for XrVirtualKeyboardInputInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVirtualKeyboardInputInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSendVirtualKeyboardInputMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSendVirtualKeyboardInputMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSendVirtualKeyboardInputMETA",
                                objects_info,
                                "Command xrSendVirtualKeyboardInputMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == interactorRootPose) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSendVirtualKeyboardInputMETA-interactorRootPose-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSendVirtualKeyboardInputMETA", objects_info,
                                "Invalid NULL for XrPosef \"interactorRootPose\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrSendVirtualKeyboardInputMETA-interactorRootPose-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSendVirtualKeyboardInputMETA(
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardInputInfoMETA* info,
    XrPosef* interactorRootPose) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SendVirtualKeyboardInputMETA(keyboard, info, interactorRootPose);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSendVirtualKeyboardInputMETA(
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardInputInfoMETA* info,
    XrPosef* interactorRootPose) {
    XrResult test_result = GenValidUsageInputsXrSendVirtualKeyboardInputMETA(keyboard, info, interactorRootPose);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSendVirtualKeyboardInputMETA(keyboard, info, interactorRootPose);
}

XrResult GenValidUsageInputsXrChangeVirtualKeyboardTextContextMETA(
XrVirtualKeyboardMETA keyboard,
const XrVirtualKeyboardTextContextChangeInfoMETA* changeInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(keyboard, XR_OBJECT_TYPE_VIRTUAL_KEYBOARD_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrVirtualKeyboardMETAHandle(&keyboard);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrVirtualKeyboardMETA handle \"keyboard\" ";
                oss << HandleToHexString(keyboard);
                CoreValidLogMessage(nullptr, "VUID-xrChangeVirtualKeyboardTextContextMETA-keyboard-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrChangeVirtualKeyboardTextContextMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == changeInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrChangeVirtualKeyboardTextContextMETA-changeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrChangeVirtualKeyboardTextContextMETA", objects_info,
                                "Invalid NULL for XrVirtualKeyboardTextContextChangeInfoMETA \"changeInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrVirtualKeyboardTextContextChangeInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrChangeVirtualKeyboardTextContextMETA", objects_info,
                                                        true, true, changeInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrChangeVirtualKeyboardTextContextMETA-changeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrChangeVirtualKeyboardTextContextMETA",
                                objects_info,
                                "Command xrChangeVirtualKeyboardTextContextMETA param changeInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrChangeVirtualKeyboardTextContextMETA(
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardTextContextChangeInfoMETA* changeInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_virtualkeyboardmeta_info.getWithInstanceInfo(keyboard);
        GenValidUsageXrHandleInfo *gen_virtualkeyboardmeta_info = info_with_instance.first;
        (void)gen_virtualkeyboardmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ChangeVirtualKeyboardTextContextMETA(keyboard, changeInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrChangeVirtualKeyboardTextContextMETA(
    XrVirtualKeyboardMETA keyboard,
    const XrVirtualKeyboardTextContextChangeInfoMETA* changeInfo) {
    XrResult test_result = GenValidUsageInputsXrChangeVirtualKeyboardTextContextMETA(keyboard, changeInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrChangeVirtualKeyboardTextContextMETA(keyboard, changeInfo);
}


// ---- XR_OCULUS_external_camera extension commands
XrResult GenValidUsageInputsXrEnumerateExternalCamerasOCULUS(
XrSession session,
uint32_t cameraCapacityInput,
uint32_t* cameraCountOutput,
XrExternalCameraOCULUS* cameras) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateExternalCamerasOCULUS-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateExternalCamerasOCULUS",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when cameraCapacityInput is non-zero
        if (0 != cameraCapacityInput && nullptr == cameras) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateExternalCamerasOCULUS-cameras-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateExternalCamerasOCULUS",
                                objects_info,
                                "Command xrEnumerateExternalCamerasOCULUS param cameras is NULL, but cameraCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == cameraCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateExternalCamerasOCULUS-cameraCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateExternalCamerasOCULUS", objects_info,
                                "Invalid NULL for uint32_t \"cameraCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateExternalCamerasOCULUS-cameraCountOutput-parameter" type
        if (cameras) {
            for (uint32_t value_cameras_inc = 0; value_cameras_inc < cameraCapacityInput; ++value_cameras_inc) {
                // Validate that the structure XrExternalCameraOCULUS is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateExternalCamerasOCULUS", objects_info,
                                                                true, true, &cameras[value_cameras_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateExternalCamerasOCULUS-cameras-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateExternalCamerasOCULUS",
                                        objects_info,
                                        "Command xrEnumerateExternalCamerasOCULUS param cameras is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateExternalCamerasOCULUS(
    XrSession session,
    uint32_t cameraCapacityInput,
    uint32_t* cameraCountOutput,
    XrExternalCameraOCULUS* cameras) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateExternalCamerasOCULUS(session, cameraCapacityInput, cameraCountOutput, cameras);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateExternalCamerasOCULUS(
    XrSession session,
    uint32_t cameraCapacityInput,
    uint32_t* cameraCountOutput,
    XrExternalCameraOCULUS* cameras) {
    XrResult test_result = GenValidUsageInputsXrEnumerateExternalCamerasOCULUS(session, cameraCapacityInput, cameraCountOutput, cameras);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateExternalCamerasOCULUS(session, cameraCapacityInput, cameraCountOutput, cameras);
}


// ---- XR_META_performance_metrics extension commands
XrResult GenValidUsageInputsXrEnumeratePerformanceMetricsCounterPathsMETA(
XrInstance instance,
uint32_t counterPathCapacityInput,
uint32_t* counterPathCountOutput,
XrPath* counterPaths) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumeratePerformanceMetricsCounterPathsMETA-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePerformanceMetricsCounterPathsMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when counterPathCapacityInput is non-zero
        if (0 != counterPathCapacityInput && nullptr == counterPaths) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumeratePerformanceMetricsCounterPathsMETA-counterPaths-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePerformanceMetricsCounterPathsMETA",
                                objects_info,
                                "Command xrEnumeratePerformanceMetricsCounterPathsMETA param counterPaths is NULL, but counterPathCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == counterPathCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumeratePerformanceMetricsCounterPathsMETA-counterPathCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePerformanceMetricsCounterPathsMETA", objects_info,
                                "Invalid NULL for uint32_t \"counterPathCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumeratePerformanceMetricsCounterPathsMETA-counterPathCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrEnumeratePerformanceMetricsCounterPathsMETA-counterPaths-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumeratePerformanceMetricsCounterPathsMETA(
    XrInstance instance,
    uint32_t counterPathCapacityInput,
    uint32_t* counterPathCountOutput,
    XrPath* counterPaths) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumeratePerformanceMetricsCounterPathsMETA(instance, counterPathCapacityInput, counterPathCountOutput, counterPaths);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumeratePerformanceMetricsCounterPathsMETA(
    XrInstance instance,
    uint32_t counterPathCapacityInput,
    uint32_t* counterPathCountOutput,
    XrPath* counterPaths) {
    XrResult test_result = GenValidUsageInputsXrEnumeratePerformanceMetricsCounterPathsMETA(instance, counterPathCapacityInput, counterPathCountOutput, counterPaths);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumeratePerformanceMetricsCounterPathsMETA(instance, counterPathCapacityInput, counterPathCountOutput, counterPaths);
}

XrResult GenValidUsageInputsXrSetPerformanceMetricsStateMETA(
XrSession session,
const XrPerformanceMetricsStateMETA* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetPerformanceMetricsStateMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetPerformanceMetricsStateMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetPerformanceMetricsStateMETA-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetPerformanceMetricsStateMETA", objects_info,
                                "Invalid NULL for XrPerformanceMetricsStateMETA \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPerformanceMetricsStateMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetPerformanceMetricsStateMETA", objects_info,
                                                        true, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetPerformanceMetricsStateMETA-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetPerformanceMetricsStateMETA",
                                objects_info,
                                "Command xrSetPerformanceMetricsStateMETA param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetPerformanceMetricsStateMETA(
    XrSession session,
    const XrPerformanceMetricsStateMETA* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetPerformanceMetricsStateMETA(session, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetPerformanceMetricsStateMETA(
    XrSession session,
    const XrPerformanceMetricsStateMETA* state) {
    XrResult test_result = GenValidUsageInputsXrSetPerformanceMetricsStateMETA(session, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetPerformanceMetricsStateMETA(session, state);
}

XrResult GenValidUsageInputsXrGetPerformanceMetricsStateMETA(
XrSession session,
XrPerformanceMetricsStateMETA* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetPerformanceMetricsStateMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPerformanceMetricsStateMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPerformanceMetricsStateMETA-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPerformanceMetricsStateMETA", objects_info,
                                "Invalid NULL for XrPerformanceMetricsStateMETA \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPerformanceMetricsStateMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetPerformanceMetricsStateMETA", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPerformanceMetricsStateMETA-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPerformanceMetricsStateMETA",
                                objects_info,
                                "Command xrGetPerformanceMetricsStateMETA param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetPerformanceMetricsStateMETA(
    XrSession session,
    XrPerformanceMetricsStateMETA* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetPerformanceMetricsStateMETA(session, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetPerformanceMetricsStateMETA(
    XrSession session,
    XrPerformanceMetricsStateMETA* state) {
    XrResult test_result = GenValidUsageInputsXrGetPerformanceMetricsStateMETA(session, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetPerformanceMetricsStateMETA(session, state);
}

XrResult GenValidUsageInputsXrQueryPerformanceMetricsCounterMETA(
XrSession session,
XrPath counterPath,
XrPerformanceMetricsCounterMETA* counter) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrQueryPerformanceMetricsCounterMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryPerformanceMetricsCounterMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == counter) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQueryPerformanceMetricsCounterMETA-counter-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryPerformanceMetricsCounterMETA", objects_info,
                                "Invalid NULL for XrPerformanceMetricsCounterMETA \"counter\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPerformanceMetricsCounterMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQueryPerformanceMetricsCounterMETA", objects_info,
                                                        false, true, counter);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQueryPerformanceMetricsCounterMETA-counter-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryPerformanceMetricsCounterMETA",
                                objects_info,
                                "Command xrQueryPerformanceMetricsCounterMETA param counter is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQueryPerformanceMetricsCounterMETA(
    XrSession session,
    XrPath counterPath,
    XrPerformanceMetricsCounterMETA* counter) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QueryPerformanceMetricsCounterMETA(session, counterPath, counter);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQueryPerformanceMetricsCounterMETA(
    XrSession session,
    XrPath counterPath,
    XrPerformanceMetricsCounterMETA* counter) {
    XrResult test_result = GenValidUsageInputsXrQueryPerformanceMetricsCounterMETA(session, counterPath, counter);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQueryPerformanceMetricsCounterMETA(session, counterPath, counter);
}


// ---- XR_FB_spatial_entity_storage_batch extension commands
XrResult GenValidUsageInputsXrSaveSpaceListFB(
XrSession session,
const XrSpaceListSaveInfoFB* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSaveSpaceListFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpaceListFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSaveSpaceListFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpaceListFB", objects_info,
                                "Invalid NULL for XrSpaceListSaveInfoFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceListSaveInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSaveSpaceListFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSaveSpaceListFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpaceListFB",
                                objects_info,
                                "Command xrSaveSpaceListFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSaveSpaceListFB-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpaceListFB", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrSaveSpaceListFB-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSaveSpaceListFB(
    XrSession session,
    const XrSpaceListSaveInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SaveSpaceListFB(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSaveSpaceListFB(
    XrSession session,
    const XrSpaceListSaveInfoFB* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrSaveSpaceListFB(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSaveSpaceListFB(session, info, requestId);
}


// ---- XR_FB_spatial_entity_user extension commands
XrResult GenValidUsageInputsXrCreateSpaceUserFB(
XrSession session,
const XrSpaceUserCreateInfoFB* info,
XrSpaceUserFB* user) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpaceUserFB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpaceUserFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpaceUserFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpaceUserFB", objects_info,
                                "Invalid NULL for XrSpaceUserCreateInfoFB \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceUserCreateInfoFB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpaceUserFB", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpaceUserFB-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpaceUserFB",
                                objects_info,
                                "Command xrCreateSpaceUserFB param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == user) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpaceUserFB-user-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpaceUserFB", objects_info,
                                "Invalid NULL for XrSpaceUserFB \"user\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpaceUserFB(
    XrSession session,
    const XrSpaceUserCreateInfoFB* info,
    XrSpaceUserFB* user) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpaceUserFB(session, info, user);
        if (XR_SUCCESS == result && nullptr != user) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_spaceuserfb_info.insert(*user, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpaceUserFB(
    XrSession session,
    const XrSpaceUserCreateInfoFB* info,
    XrSpaceUserFB* user) {
    XrResult test_result = GenValidUsageInputsXrCreateSpaceUserFB(session, info, user);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpaceUserFB(session, info, user);
}

XrResult GenValidUsageInputsXrGetSpaceUserIdFB(
XrSpaceUserFB user,
XrSpaceUserIdFB* userId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(user, XR_OBJECT_TYPE_SPACE_USER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceUserFBHandle(&user);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpaceUserFB handle \"user\" ";
                oss << HandleToHexString(user);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceUserIdFB-user-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceUserIdFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spaceuserfb_info.getWithInstanceInfo(user);
        GenValidUsageXrHandleInfo *gen_spaceuserfb_info = info_with_instance.first;
        (void)gen_spaceuserfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == userId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceUserIdFB-userId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceUserIdFB", objects_info,
                                "Invalid NULL for XrSpaceUserIdFB \"userId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpaceUserIdFB-userId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceUserIdFB(
    XrSpaceUserFB user,
    XrSpaceUserIdFB* userId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spaceuserfb_info.getWithInstanceInfo(user);
        GenValidUsageXrHandleInfo *gen_spaceuserfb_info = info_with_instance.first;
        (void)gen_spaceuserfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceUserIdFB(user, userId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceUserIdFB(
    XrSpaceUserFB user,
    XrSpaceUserIdFB* userId) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceUserIdFB(user, userId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceUserIdFB(user, userId);
}

XrResult GenValidUsageInputsXrDestroySpaceUserFB(
XrSpaceUserFB user) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(user, XR_OBJECT_TYPE_SPACE_USER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceUserFBHandle(&user);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpaceUserFB handle \"user\" ";
                oss << HandleToHexString(user);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpaceUserFB-user-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpaceUserFB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spaceuserfb_info.getWithInstanceInfo(user);
        GenValidUsageXrHandleInfo *gen_spaceuserfb_info = info_with_instance.first;
        (void)gen_spaceuserfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpaceUserFB(
    XrSpaceUserFB user) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spaceuserfb_info.getWithInstanceInfo(user);
        GenValidUsageXrHandleInfo *gen_spaceuserfb_info = info_with_instance.first;
        (void)gen_spaceuserfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpaceUserFB(user);
        if (XR_SUCCEEDED(result)) {
            g_spaceuserfb_info.erase(user);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpaceUserFB(
    XrSpaceUserFB user) {
    XrResult test_result = GenValidUsageInputsXrDestroySpaceUserFB(user);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpaceUserFB(user);
}


// ---- XR_META_spatial_entity_discovery extension commands
XrResult GenValidUsageInputsXrDiscoverSpacesMETA(
XrSession session,
const XrSpaceDiscoveryInfoMETA* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrDiscoverSpacesMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDiscoverSpacesMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDiscoverSpacesMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDiscoverSpacesMETA", objects_info,
                                "Invalid NULL for XrSpaceDiscoveryInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceDiscoveryInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrDiscoverSpacesMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDiscoverSpacesMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDiscoverSpacesMETA",
                                objects_info,
                                "Command xrDiscoverSpacesMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDiscoverSpacesMETA-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDiscoverSpacesMETA", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrDiscoverSpacesMETA-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDiscoverSpacesMETA(
    XrSession session,
    const XrSpaceDiscoveryInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DiscoverSpacesMETA(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDiscoverSpacesMETA(
    XrSession session,
    const XrSpaceDiscoveryInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrDiscoverSpacesMETA(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDiscoverSpacesMETA(session, info, requestId);
}

XrResult GenValidUsageInputsXrRetrieveSpaceDiscoveryResultsMETA(
XrSession session,
XrAsyncRequestIdFB requestId,
XrSpaceDiscoveryResultsMETA* results) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrRetrieveSpaceDiscoveryResultsMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRetrieveSpaceDiscoveryResultsMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == results) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRetrieveSpaceDiscoveryResultsMETA-results-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRetrieveSpaceDiscoveryResultsMETA", objects_info,
                                "Invalid NULL for XrSpaceDiscoveryResultsMETA \"results\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceDiscoveryResultsMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRetrieveSpaceDiscoveryResultsMETA", objects_info,
                                                        false, true, results);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRetrieveSpaceDiscoveryResultsMETA-results-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRetrieveSpaceDiscoveryResultsMETA",
                                objects_info,
                                "Command xrRetrieveSpaceDiscoveryResultsMETA param results is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRetrieveSpaceDiscoveryResultsMETA(
    XrSession session,
    XrAsyncRequestIdFB requestId,
    XrSpaceDiscoveryResultsMETA* results) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RetrieveSpaceDiscoveryResultsMETA(session, requestId, results);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRetrieveSpaceDiscoveryResultsMETA(
    XrSession session,
    XrAsyncRequestIdFB requestId,
    XrSpaceDiscoveryResultsMETA* results) {
    XrResult test_result = GenValidUsageInputsXrRetrieveSpaceDiscoveryResultsMETA(session, requestId, results);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRetrieveSpaceDiscoveryResultsMETA(session, requestId, results);
}


// ---- XR_META_recommended_layer_resolution extension commands
XrResult GenValidUsageInputsXrGetRecommendedLayerResolutionMETA(
XrSession session,
const XrRecommendedLayerResolutionGetInfoMETA* info,
XrRecommendedLayerResolutionMETA* resolution) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetRecommendedLayerResolutionMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRecommendedLayerResolutionMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRecommendedLayerResolutionMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRecommendedLayerResolutionMETA", objects_info,
                                "Invalid NULL for XrRecommendedLayerResolutionGetInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRecommendedLayerResolutionGetInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetRecommendedLayerResolutionMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRecommendedLayerResolutionMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRecommendedLayerResolutionMETA",
                                objects_info,
                                "Command xrGetRecommendedLayerResolutionMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == resolution) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRecommendedLayerResolutionMETA-resolution-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRecommendedLayerResolutionMETA", objects_info,
                                "Invalid NULL for XrRecommendedLayerResolutionMETA \"resolution\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRecommendedLayerResolutionMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetRecommendedLayerResolutionMETA", objects_info,
                                                        false, true, resolution);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRecommendedLayerResolutionMETA-resolution-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRecommendedLayerResolutionMETA",
                                objects_info,
                                "Command xrGetRecommendedLayerResolutionMETA param resolution is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetRecommendedLayerResolutionMETA(
    XrSession session,
    const XrRecommendedLayerResolutionGetInfoMETA* info,
    XrRecommendedLayerResolutionMETA* resolution) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetRecommendedLayerResolutionMETA(session, info, resolution);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetRecommendedLayerResolutionMETA(
    XrSession session,
    const XrRecommendedLayerResolutionGetInfoMETA* info,
    XrRecommendedLayerResolutionMETA* resolution) {
    XrResult test_result = GenValidUsageInputsXrGetRecommendedLayerResolutionMETA(session, info, resolution);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetRecommendedLayerResolutionMETA(session, info, resolution);
}


// ---- XR_META_spatial_entity_persistence extension commands
XrResult GenValidUsageInputsXrSaveSpacesMETA(
XrSession session,
const XrSpacesSaveInfoMETA* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSaveSpacesMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpacesMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSaveSpacesMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpacesMETA", objects_info,
                                "Invalid NULL for XrSpacesSaveInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpacesSaveInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSaveSpacesMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSaveSpacesMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpacesMETA",
                                objects_info,
                                "Command xrSaveSpacesMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSaveSpacesMETA-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSaveSpacesMETA", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrSaveSpacesMETA-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSaveSpacesMETA(
    XrSession session,
    const XrSpacesSaveInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SaveSpacesMETA(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSaveSpacesMETA(
    XrSession session,
    const XrSpacesSaveInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrSaveSpacesMETA(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSaveSpacesMETA(session, info, requestId);
}

XrResult GenValidUsageInputsXrEraseSpacesMETA(
XrSession session,
const XrSpacesEraseInfoMETA* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEraseSpacesMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEraseSpacesMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEraseSpacesMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEraseSpacesMETA", objects_info,
                                "Invalid NULL for XrSpacesEraseInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpacesEraseInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrEraseSpacesMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEraseSpacesMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEraseSpacesMETA",
                                objects_info,
                                "Command xrEraseSpacesMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEraseSpacesMETA-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEraseSpacesMETA", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEraseSpacesMETA-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEraseSpacesMETA(
    XrSession session,
    const XrSpacesEraseInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EraseSpacesMETA(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEraseSpacesMETA(
    XrSession session,
    const XrSpacesEraseInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrEraseSpacesMETA(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEraseSpacesMETA(session, info, requestId);
}


// ---- XR_META_passthrough_color_lut extension commands
XrResult GenValidUsageInputsXrCreatePassthroughColorLutMETA(
XrPassthroughFB passthrough,
const XrPassthroughColorLutCreateInfoMETA* createInfo,
XrPassthroughColorLutMETA* colorLut) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(passthrough, XR_OBJECT_TYPE_PASSTHROUGH_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughFBHandle(&passthrough);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughFB handle \"passthrough\" ";
                oss << HandleToHexString(passthrough);
                CoreValidLogMessage(nullptr, "VUID-xrCreatePassthroughColorLutMETA-passthrough-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughColorLutMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughfb_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughfb_info = info_with_instance.first;
        (void)gen_passthroughfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughColorLutMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughColorLutMETA", objects_info,
                                "Invalid NULL for XrPassthroughColorLutCreateInfoMETA \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughColorLutCreateInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreatePassthroughColorLutMETA", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughColorLutMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughColorLutMETA",
                                objects_info,
                                "Command xrCreatePassthroughColorLutMETA param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == colorLut) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughColorLutMETA-colorLut-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughColorLutMETA", objects_info,
                                "Invalid NULL for XrPassthroughColorLutMETA \"colorLut\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreatePassthroughColorLutMETA(
    XrPassthroughFB passthrough,
    const XrPassthroughColorLutCreateInfoMETA* createInfo,
    XrPassthroughColorLutMETA* colorLut) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughfb_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughfb_info = info_with_instance.first;
        (void)gen_passthroughfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreatePassthroughColorLutMETA(passthrough, createInfo, colorLut);
        if (XR_SUCCESS == result && nullptr != colorLut) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_PASSTHROUGH_FB;
            handle_info->direct_parent_handle = MakeHandleGeneric(passthrough);
            g_passthroughcolorlutmeta_info.insert(*colorLut, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreatePassthroughColorLutMETA(
    XrPassthroughFB passthrough,
    const XrPassthroughColorLutCreateInfoMETA* createInfo,
    XrPassthroughColorLutMETA* colorLut) {
    XrResult test_result = GenValidUsageInputsXrCreatePassthroughColorLutMETA(passthrough, createInfo, colorLut);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreatePassthroughColorLutMETA(passthrough, createInfo, colorLut);
}

XrResult GenValidUsageInputsXrDestroyPassthroughColorLutMETA(
XrPassthroughColorLutMETA colorLut) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(colorLut, XR_OBJECT_TYPE_PASSTHROUGH_COLOR_LUT_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughColorLutMETAHandle(&colorLut);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughColorLutMETA handle \"colorLut\" ";
                oss << HandleToHexString(colorLut);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyPassthroughColorLutMETA-colorLut-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyPassthroughColorLutMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughcolorlutmeta_info.getWithInstanceInfo(colorLut);
        GenValidUsageXrHandleInfo *gen_passthroughcolorlutmeta_info = info_with_instance.first;
        (void)gen_passthroughcolorlutmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyPassthroughColorLutMETA(
    XrPassthroughColorLutMETA colorLut) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughcolorlutmeta_info.getWithInstanceInfo(colorLut);
        GenValidUsageXrHandleInfo *gen_passthroughcolorlutmeta_info = info_with_instance.first;
        (void)gen_passthroughcolorlutmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyPassthroughColorLutMETA(colorLut);
        if (XR_SUCCEEDED(result)) {
            g_passthroughcolorlutmeta_info.erase(colorLut);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyPassthroughColorLutMETA(
    XrPassthroughColorLutMETA colorLut) {
    XrResult test_result = GenValidUsageInputsXrDestroyPassthroughColorLutMETA(colorLut);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyPassthroughColorLutMETA(colorLut);
}

XrResult GenValidUsageInputsXrUpdatePassthroughColorLutMETA(
XrPassthroughColorLutMETA colorLut,
const XrPassthroughColorLutUpdateInfoMETA* updateInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(colorLut, XR_OBJECT_TYPE_PASSTHROUGH_COLOR_LUT_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughColorLutMETAHandle(&colorLut);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughColorLutMETA handle \"colorLut\" ";
                oss << HandleToHexString(colorLut);
                CoreValidLogMessage(nullptr, "VUID-xrUpdatePassthroughColorLutMETA-colorLut-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdatePassthroughColorLutMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughcolorlutmeta_info.getWithInstanceInfo(colorLut);
        GenValidUsageXrHandleInfo *gen_passthroughcolorlutmeta_info = info_with_instance.first;
        (void)gen_passthroughcolorlutmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == updateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdatePassthroughColorLutMETA-updateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdatePassthroughColorLutMETA", objects_info,
                                "Invalid NULL for XrPassthroughColorLutUpdateInfoMETA \"updateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughColorLutUpdateInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUpdatePassthroughColorLutMETA", objects_info,
                                                        true, true, updateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdatePassthroughColorLutMETA-updateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdatePassthroughColorLutMETA",
                                objects_info,
                                "Command xrUpdatePassthroughColorLutMETA param updateInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUpdatePassthroughColorLutMETA(
    XrPassthroughColorLutMETA colorLut,
    const XrPassthroughColorLutUpdateInfoMETA* updateInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughcolorlutmeta_info.getWithInstanceInfo(colorLut);
        GenValidUsageXrHandleInfo *gen_passthroughcolorlutmeta_info = info_with_instance.first;
        (void)gen_passthroughcolorlutmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UpdatePassthroughColorLutMETA(colorLut, updateInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUpdatePassthroughColorLutMETA(
    XrPassthroughColorLutMETA colorLut,
    const XrPassthroughColorLutUpdateInfoMETA* updateInfo) {
    XrResult test_result = GenValidUsageInputsXrUpdatePassthroughColorLutMETA(colorLut, updateInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUpdatePassthroughColorLutMETA(colorLut, updateInfo);
}


// ---- XR_META_spatial_entity_mesh extension commands
XrResult GenValidUsageInputsXrGetSpaceTriangleMeshMETA(
XrSpace space,
const XrSpaceTriangleMeshGetInfoMETA* getInfo,
XrSpaceTriangleMeshMETA* triangleMeshOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceTriangleMeshMETA-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceTriangleMeshMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceTriangleMeshMETA-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceTriangleMeshMETA", objects_info,
                                "Invalid NULL for XrSpaceTriangleMeshGetInfoMETA \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceTriangleMeshGetInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceTriangleMeshMETA", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceTriangleMeshMETA-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceTriangleMeshMETA",
                                objects_info,
                                "Command xrGetSpaceTriangleMeshMETA param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == triangleMeshOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceTriangleMeshMETA-triangleMeshOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceTriangleMeshMETA", objects_info,
                                "Invalid NULL for XrSpaceTriangleMeshMETA \"triangleMeshOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceTriangleMeshMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceTriangleMeshMETA", objects_info,
                                                        false, true, triangleMeshOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceTriangleMeshMETA-triangleMeshOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceTriangleMeshMETA",
                                objects_info,
                                "Command xrGetSpaceTriangleMeshMETA param triangleMeshOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceTriangleMeshMETA(
    XrSpace space,
    const XrSpaceTriangleMeshGetInfoMETA* getInfo,
    XrSpaceTriangleMeshMETA* triangleMeshOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceTriangleMeshMETA(space, getInfo, triangleMeshOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceTriangleMeshMETA(
    XrSpace space,
    const XrSpaceTriangleMeshGetInfoMETA* getInfo,
    XrSpaceTriangleMeshMETA* triangleMeshOutput) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceTriangleMeshMETA(space, getInfo, triangleMeshOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceTriangleMeshMETA(space, getInfo, triangleMeshOutput);
}


// ---- XR_META_body_tracking_calibration extension commands
XrResult GenValidUsageInputsXrSuggestBodyTrackingCalibrationOverrideMETA(
XrBodyTrackerFB bodyTracker,
const XrBodyTrackingCalibrationInfoMETA* calibrationInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerFBHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerFB handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrSuggestBodyTrackingCalibrationOverrideMETA-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSuggestBodyTrackingCalibrationOverrideMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == calibrationInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSuggestBodyTrackingCalibrationOverrideMETA-calibrationInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSuggestBodyTrackingCalibrationOverrideMETA", objects_info,
                                "Invalid NULL for XrBodyTrackingCalibrationInfoMETA \"calibrationInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyTrackingCalibrationInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSuggestBodyTrackingCalibrationOverrideMETA", objects_info,
                                                        true, true, calibrationInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSuggestBodyTrackingCalibrationOverrideMETA-calibrationInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSuggestBodyTrackingCalibrationOverrideMETA",
                                objects_info,
                                "Command xrSuggestBodyTrackingCalibrationOverrideMETA param calibrationInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSuggestBodyTrackingCalibrationOverrideMETA(
    XrBodyTrackerFB bodyTracker,
    const XrBodyTrackingCalibrationInfoMETA* calibrationInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SuggestBodyTrackingCalibrationOverrideMETA(bodyTracker, calibrationInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSuggestBodyTrackingCalibrationOverrideMETA(
    XrBodyTrackerFB bodyTracker,
    const XrBodyTrackingCalibrationInfoMETA* calibrationInfo) {
    XrResult test_result = GenValidUsageInputsXrSuggestBodyTrackingCalibrationOverrideMETA(bodyTracker, calibrationInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSuggestBodyTrackingCalibrationOverrideMETA(bodyTracker, calibrationInfo);
}

XrResult GenValidUsageInputsXrResetBodyTrackingCalibrationMETA(
XrBodyTrackerFB bodyTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerFBHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerFB handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrResetBodyTrackingCalibrationMETA-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrResetBodyTrackingCalibrationMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrResetBodyTrackingCalibrationMETA(
    XrBodyTrackerFB bodyTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ResetBodyTrackingCalibrationMETA(bodyTracker);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrResetBodyTrackingCalibrationMETA(
    XrBodyTrackerFB bodyTracker) {
    XrResult test_result = GenValidUsageInputsXrResetBodyTrackingCalibrationMETA(bodyTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrResetBodyTrackingCalibrationMETA(bodyTracker);
}


// ---- XR_META_body_tracking_fidelity extension commands
XrResult GenValidUsageInputsXrRequestBodyTrackingFidelityMETA(
XrBodyTrackerFB bodyTracker,
const XrBodyTrackingFidelityMETA fidelity) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerFBHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerFB handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrRequestBodyTrackingFidelityMETA-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestBodyTrackingFidelityMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrBodyTrackingFidelityMETA value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrRequestBodyTrackingFidelityMETA", "xrRequestBodyTrackingFidelityMETA", "fidelity", objects_info, fidelity)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrBodyTrackingFidelityMETA \"fidelity\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(fidelity));
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestBodyTrackingFidelityMETA-fidelity-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrRequestBodyTrackingFidelityMETA",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestBodyTrackingFidelityMETA(
    XrBodyTrackerFB bodyTracker,
    const XrBodyTrackingFidelityMETA fidelity) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerfb_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerfb_info = info_with_instance.first;
        (void)gen_bodytrackerfb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestBodyTrackingFidelityMETA(bodyTracker, fidelity);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestBodyTrackingFidelityMETA(
    XrBodyTrackerFB bodyTracker,
    const XrBodyTrackingFidelityMETA fidelity) {
    XrResult test_result = GenValidUsageInputsXrRequestBodyTrackingFidelityMETA(bodyTracker, fidelity);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestBodyTrackingFidelityMETA(bodyTracker, fidelity);
}


// ---- XR_FB_face_tracking2 extension commands
XrResult GenValidUsageInputsXrCreateFaceTracker2FB(
XrSession session,
const XrFaceTrackerCreateInfo2FB* createInfo,
XrFaceTracker2FB* faceTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateFaceTracker2FB-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTracker2FB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTracker2FB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTracker2FB", objects_info,
                                "Invalid NULL for XrFaceTrackerCreateInfo2FB \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceTrackerCreateInfo2FB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateFaceTracker2FB", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTracker2FB-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTracker2FB",
                                objects_info,
                                "Command xrCreateFaceTracker2FB param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == faceTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTracker2FB-faceTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTracker2FB", objects_info,
                                "Invalid NULL for XrFaceTracker2FB \"faceTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateFaceTracker2FB(
    XrSession session,
    const XrFaceTrackerCreateInfo2FB* createInfo,
    XrFaceTracker2FB* faceTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateFaceTracker2FB(session, createInfo, faceTracker);
        if (XR_SUCCESS == result && nullptr != faceTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_facetracker2fb_info.insert(*faceTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateFaceTracker2FB(
    XrSession session,
    const XrFaceTrackerCreateInfo2FB* createInfo,
    XrFaceTracker2FB* faceTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateFaceTracker2FB(session, createInfo, faceTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateFaceTracker2FB(session, createInfo, faceTracker);
}

XrResult GenValidUsageInputsXrDestroyFaceTracker2FB(
XrFaceTracker2FB faceTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(faceTracker, XR_OBJECT_TYPE_FACE_TRACKER2_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTracker2FBHandle(&faceTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTracker2FB handle \"faceTracker\" ";
                oss << HandleToHexString(faceTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyFaceTracker2FB-faceTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyFaceTracker2FB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetracker2fb_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetracker2fb_info = info_with_instance.first;
        (void)gen_facetracker2fb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyFaceTracker2FB(
    XrFaceTracker2FB faceTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetracker2fb_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetracker2fb_info = info_with_instance.first;
        (void)gen_facetracker2fb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyFaceTracker2FB(faceTracker);
        if (XR_SUCCEEDED(result)) {
            g_facetracker2fb_info.erase(faceTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyFaceTracker2FB(
    XrFaceTracker2FB faceTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyFaceTracker2FB(faceTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyFaceTracker2FB(faceTracker);
}

XrResult GenValidUsageInputsXrGetFaceExpressionWeights2FB(
XrFaceTracker2FB faceTracker,
const XrFaceExpressionInfo2FB* expressionInfo,
XrFaceExpressionWeights2FB* expressionWeights) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(faceTracker, XR_OBJECT_TYPE_FACE_TRACKER2_FB);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTracker2FBHandle(&faceTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTracker2FB handle \"faceTracker\" ";
                oss << HandleToHexString(faceTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetFaceExpressionWeights2FB-faceTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeights2FB",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetracker2fb_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetracker2fb_info = info_with_instance.first;
        (void)gen_facetracker2fb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == expressionInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceExpressionWeights2FB-expressionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeights2FB", objects_info,
                                "Invalid NULL for XrFaceExpressionInfo2FB \"expressionInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceExpressionInfo2FB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFaceExpressionWeights2FB", objects_info,
                                                        true, true, expressionInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceExpressionWeights2FB-expressionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeights2FB",
                                objects_info,
                                "Command xrGetFaceExpressionWeights2FB param expressionInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == expressionWeights) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceExpressionWeights2FB-expressionWeights-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeights2FB", objects_info,
                                "Invalid NULL for XrFaceExpressionWeights2FB \"expressionWeights\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceExpressionWeights2FB is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFaceExpressionWeights2FB", objects_info,
                                                        false, true, expressionWeights);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceExpressionWeights2FB-expressionWeights-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceExpressionWeights2FB",
                                objects_info,
                                "Command xrGetFaceExpressionWeights2FB param expressionWeights is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFaceExpressionWeights2FB(
    XrFaceTracker2FB faceTracker,
    const XrFaceExpressionInfo2FB* expressionInfo,
    XrFaceExpressionWeights2FB* expressionWeights) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetracker2fb_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetracker2fb_info = info_with_instance.first;
        (void)gen_facetracker2fb_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFaceExpressionWeights2FB(faceTracker, expressionInfo, expressionWeights);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFaceExpressionWeights2FB(
    XrFaceTracker2FB faceTracker,
    const XrFaceExpressionInfo2FB* expressionInfo,
    XrFaceExpressionWeights2FB* expressionWeights) {
    XrResult test_result = GenValidUsageInputsXrGetFaceExpressionWeights2FB(faceTracker, expressionInfo, expressionWeights);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFaceExpressionWeights2FB(faceTracker, expressionInfo, expressionWeights);
}


// ---- XR_META_spatial_entity_sharing extension commands
XrResult GenValidUsageInputsXrShareSpacesMETA(
XrSession session,
const XrShareSpacesInfoMETA* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrShareSpacesMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpacesMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpacesMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpacesMETA", objects_info,
                                "Invalid NULL for XrShareSpacesInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrShareSpacesInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrShareSpacesMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpacesMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpacesMETA",
                                objects_info,
                                "Command xrShareSpacesMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpacesMETA-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpacesMETA", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrShareSpacesMETA-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrShareSpacesMETA(
    XrSession session,
    const XrShareSpacesInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ShareSpacesMETA(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrShareSpacesMETA(
    XrSession session,
    const XrShareSpacesInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrShareSpacesMETA(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrShareSpacesMETA(session, info, requestId);
}


// ---- XR_META_environment_depth extension commands
XrResult GenValidUsageInputsXrCreateEnvironmentDepthProviderMETA(
XrSession session,
const XrEnvironmentDepthProviderCreateInfoMETA* createInfo,
XrEnvironmentDepthProviderMETA* environmentDepthProvider) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateEnvironmentDepthProviderMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentDepthProviderMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentDepthProviderMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentDepthProviderMETA", objects_info,
                                "Invalid NULL for XrEnvironmentDepthProviderCreateInfoMETA \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEnvironmentDepthProviderCreateInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateEnvironmentDepthProviderMETA", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentDepthProviderMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentDepthProviderMETA",
                                objects_info,
                                "Command xrCreateEnvironmentDepthProviderMETA param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == environmentDepthProvider) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentDepthProviderMETA-environmentDepthProvider-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentDepthProviderMETA", objects_info,
                                "Invalid NULL for XrEnvironmentDepthProviderMETA \"environmentDepthProvider\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateEnvironmentDepthProviderMETA(
    XrSession session,
    const XrEnvironmentDepthProviderCreateInfoMETA* createInfo,
    XrEnvironmentDepthProviderMETA* environmentDepthProvider) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateEnvironmentDepthProviderMETA(session, createInfo, environmentDepthProvider);
        if (XR_SUCCESS == result && nullptr != environmentDepthProvider) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_environmentdepthprovidermeta_info.insert(*environmentDepthProvider, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateEnvironmentDepthProviderMETA(
    XrSession session,
    const XrEnvironmentDepthProviderCreateInfoMETA* createInfo,
    XrEnvironmentDepthProviderMETA* environmentDepthProvider) {
    XrResult test_result = GenValidUsageInputsXrCreateEnvironmentDepthProviderMETA(session, createInfo, environmentDepthProvider);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateEnvironmentDepthProviderMETA(session, createInfo, environmentDepthProvider);
}

XrResult GenValidUsageInputsXrDestroyEnvironmentDepthProviderMETA(
XrEnvironmentDepthProviderMETA environmentDepthProvider) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(environmentDepthProvider, XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentDepthProviderMETAHandle(&environmentDepthProvider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentDepthProviderMETA handle \"environmentDepthProvider\" ";
                oss << HandleToHexString(environmentDepthProvider);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyEnvironmentDepthProviderMETA-environmentDepthProvider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyEnvironmentDepthProviderMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyEnvironmentDepthProviderMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyEnvironmentDepthProviderMETA(environmentDepthProvider);
        if (XR_SUCCEEDED(result)) {
            g_environmentdepthprovidermeta_info.erase(environmentDepthProvider);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyEnvironmentDepthProviderMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider) {
    XrResult test_result = GenValidUsageInputsXrDestroyEnvironmentDepthProviderMETA(environmentDepthProvider);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyEnvironmentDepthProviderMETA(environmentDepthProvider);
}

XrResult GenValidUsageInputsXrStartEnvironmentDepthProviderMETA(
XrEnvironmentDepthProviderMETA environmentDepthProvider) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(environmentDepthProvider, XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentDepthProviderMETAHandle(&environmentDepthProvider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentDepthProviderMETA handle \"environmentDepthProvider\" ";
                oss << HandleToHexString(environmentDepthProvider);
                CoreValidLogMessage(nullptr, "VUID-xrStartEnvironmentDepthProviderMETA-environmentDepthProvider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartEnvironmentDepthProviderMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStartEnvironmentDepthProviderMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StartEnvironmentDepthProviderMETA(environmentDepthProvider);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStartEnvironmentDepthProviderMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider) {
    XrResult test_result = GenValidUsageInputsXrStartEnvironmentDepthProviderMETA(environmentDepthProvider);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStartEnvironmentDepthProviderMETA(environmentDepthProvider);
}

XrResult GenValidUsageInputsXrStopEnvironmentDepthProviderMETA(
XrEnvironmentDepthProviderMETA environmentDepthProvider) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(environmentDepthProvider, XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentDepthProviderMETAHandle(&environmentDepthProvider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentDepthProviderMETA handle \"environmentDepthProvider\" ";
                oss << HandleToHexString(environmentDepthProvider);
                CoreValidLogMessage(nullptr, "VUID-xrStopEnvironmentDepthProviderMETA-environmentDepthProvider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopEnvironmentDepthProviderMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStopEnvironmentDepthProviderMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StopEnvironmentDepthProviderMETA(environmentDepthProvider);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStopEnvironmentDepthProviderMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider) {
    XrResult test_result = GenValidUsageInputsXrStopEnvironmentDepthProviderMETA(environmentDepthProvider);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStopEnvironmentDepthProviderMETA(environmentDepthProvider);
}

XrResult GenValidUsageInputsXrCreateEnvironmentDepthSwapchainMETA(
XrEnvironmentDepthProviderMETA environmentDepthProvider,
const XrEnvironmentDepthSwapchainCreateInfoMETA* createInfo,
XrEnvironmentDepthSwapchainMETA* swapchain) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(environmentDepthProvider, XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentDepthProviderMETAHandle(&environmentDepthProvider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentDepthProviderMETA handle \"environmentDepthProvider\" ";
                oss << HandleToHexString(environmentDepthProvider);
                CoreValidLogMessage(nullptr, "VUID-xrCreateEnvironmentDepthSwapchainMETA-environmentDepthProvider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentDepthSwapchainMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentDepthSwapchainMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentDepthSwapchainMETA", objects_info,
                                "Invalid NULL for XrEnvironmentDepthSwapchainCreateInfoMETA \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEnvironmentDepthSwapchainCreateInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateEnvironmentDepthSwapchainMETA", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentDepthSwapchainMETA-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentDepthSwapchainMETA",
                                objects_info,
                                "Command xrCreateEnvironmentDepthSwapchainMETA param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == swapchain) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentDepthSwapchainMETA-swapchain-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentDepthSwapchainMETA", objects_info,
                                "Invalid NULL for XrEnvironmentDepthSwapchainMETA \"swapchain\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateEnvironmentDepthSwapchainMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider,
    const XrEnvironmentDepthSwapchainCreateInfoMETA* createInfo,
    XrEnvironmentDepthSwapchainMETA* swapchain) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateEnvironmentDepthSwapchainMETA(environmentDepthProvider, createInfo, swapchain);
        if (XR_SUCCESS == result && nullptr != swapchain) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META;
            handle_info->direct_parent_handle = MakeHandleGeneric(environmentDepthProvider);
            g_environmentdepthswapchainmeta_info.insert(*swapchain, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateEnvironmentDepthSwapchainMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider,
    const XrEnvironmentDepthSwapchainCreateInfoMETA* createInfo,
    XrEnvironmentDepthSwapchainMETA* swapchain) {
    XrResult test_result = GenValidUsageInputsXrCreateEnvironmentDepthSwapchainMETA(environmentDepthProvider, createInfo, swapchain);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateEnvironmentDepthSwapchainMETA(environmentDepthProvider, createInfo, swapchain);
}

XrResult GenValidUsageInputsXrDestroyEnvironmentDepthSwapchainMETA(
XrEnvironmentDepthSwapchainMETA swapchain) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentDepthSwapchainMETAHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentDepthSwapchainMETA handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyEnvironmentDepthSwapchainMETA-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyEnvironmentDepthSwapchainMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentdepthswapchainmeta_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_environmentdepthswapchainmeta_info = info_with_instance.first;
        (void)gen_environmentdepthswapchainmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyEnvironmentDepthSwapchainMETA(
    XrEnvironmentDepthSwapchainMETA swapchain) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentdepthswapchainmeta_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_environmentdepthswapchainmeta_info = info_with_instance.first;
        (void)gen_environmentdepthswapchainmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyEnvironmentDepthSwapchainMETA(swapchain);
        if (XR_SUCCEEDED(result)) {
            g_environmentdepthswapchainmeta_info.erase(swapchain);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyEnvironmentDepthSwapchainMETA(
    XrEnvironmentDepthSwapchainMETA swapchain) {
    XrResult test_result = GenValidUsageInputsXrDestroyEnvironmentDepthSwapchainMETA(swapchain);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyEnvironmentDepthSwapchainMETA(swapchain);
}

XrResult GenValidUsageInputsXrEnumerateEnvironmentDepthSwapchainImagesMETA(
XrEnvironmentDepthSwapchainMETA swapchain,
uint32_t imageCapacityInput,
uint32_t* imageCountOutput,
XrSwapchainImageBaseHeader* images) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentDepthSwapchainMETAHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentDepthSwapchainMETA handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentdepthswapchainmeta_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_environmentdepthswapchainmeta_info = info_with_instance.first;
        (void)gen_environmentdepthswapchainmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when imageCapacityInput is non-zero
        if (0 != imageCapacityInput && nullptr == images) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-images-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                objects_info,
                                "Command xrEnumerateEnvironmentDepthSwapchainImagesMETA param images is NULL, but imageCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == imageCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-imageCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA", objects_info,
                                "Invalid NULL for uint32_t \"imageCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-imageCountOutput-parameter" type
        if (images) {
            for (uint32_t value_images_inc = 0; value_images_inc < imageCapacityInput; ++value_images_inc) {
#if defined(XR_USE_GRAPHICS_API_OPENGL)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageOpenGLKHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageOpenGLKHR* new_swapchainimageopenglkhr_value = reinterpret_cast<XrSwapchainImageOpenGLKHR*>(images);
                        if (new_swapchainimageopenglkhr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) {
                            if (nullptr != new_swapchainimageopenglkhr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                                                objects_info, false, true, &new_swapchainimageopenglkhr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateEnvironmentDepthSwapchainImagesMETA param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageOpenGLESKHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageOpenGLESKHR* new_swapchainimageopengleskhr_value = reinterpret_cast<XrSwapchainImageOpenGLESKHR*>(images);
                        if (new_swapchainimageopengleskhr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) {
                            if (nullptr != new_swapchainimageopengleskhr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                                                objects_info, false, true, &new_swapchainimageopengleskhr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateEnvironmentDepthSwapchainImagesMETA param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageVulkanKHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageVulkanKHR* new_swapchainimagevulkankhr_value = reinterpret_cast<XrSwapchainImageVulkanKHR*>(images);
                        if (new_swapchainimagevulkankhr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) {
                            if (nullptr != new_swapchainimagevulkankhr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                                                objects_info, false, true, &new_swapchainimagevulkankhr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateEnvironmentDepthSwapchainImagesMETA param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_D3D11)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageD3D11KHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageD3D11KHR* new_swapchainimaged3d11khr_value = reinterpret_cast<XrSwapchainImageD3D11KHR*>(images);
                        if (new_swapchainimaged3d11khr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) {
                            if (nullptr != new_swapchainimaged3d11khr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                                                objects_info, false, true, &new_swapchainimaged3d11khr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateEnvironmentDepthSwapchainImagesMETA param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_D3D11)
#if defined(XR_USE_GRAPHICS_API_D3D12)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageD3D12KHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageD3D12KHR* new_swapchainimaged3d12khr_value = reinterpret_cast<XrSwapchainImageD3D12KHR*>(images);
                        if (new_swapchainimaged3d12khr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) {
                            if (nullptr != new_swapchainimaged3d12khr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                                                objects_info, false, true, &new_swapchainimaged3d12khr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateEnvironmentDepthSwapchainImagesMETA param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_D3D12)
#if defined(XR_USE_GRAPHICS_API_METAL)
                // Validate if XrSwapchainImageBaseHeader is a child structure of type XrSwapchainImageMetalKHR and it is valid
                {
                    if (images != nullptr) {
                        XrSwapchainImageMetalKHR* new_swapchainimagemetalkhr_value = reinterpret_cast<XrSwapchainImageMetalKHR*>(images);
                        if (new_swapchainimagemetalkhr_value[value_images_inc].type == XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR) {
                            if (nullptr != new_swapchainimagemetalkhr_value) {
                                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                                                objects_info, false, true, &new_swapchainimagemetalkhr_value[value_images_inc]);
                                if (XR_SUCCESS != xr_result) {
                                    std::string error_message = "Command xrEnumerateEnvironmentDepthSwapchainImagesMETA param images";
                                    error_message += "[";
                                    error_message += std::to_string(value_images_inc);
                                    error_message += "]";
                                    error_message += " is invalid";
                                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-images-parameter",
                                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                                        objects_info,
                                                        error_message);
                                    return XR_ERROR_VALIDATION_FAILURE;
                                    break;
                                } else {
                                    continue;
                                    }
                                }
                        }
                    }
                }
#endif // defined(XR_USE_GRAPHICS_API_METAL)
                // Validate that the base-structure XrSwapchainImageBaseHeader is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateEnvironmentDepthSwapchainImagesMETA", objects_info,
                                                                true, true, &images[value_images_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateEnvironmentDepthSwapchainImagesMETA-images-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateEnvironmentDepthSwapchainImagesMETA",
                                        objects_info,
                                        "Command xrEnumerateEnvironmentDepthSwapchainImagesMETA param images is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateEnvironmentDepthSwapchainImagesMETA(
    XrEnvironmentDepthSwapchainMETA swapchain,
    uint32_t imageCapacityInput,
    uint32_t* imageCountOutput,
    XrSwapchainImageBaseHeader* images) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentdepthswapchainmeta_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_environmentdepthswapchainmeta_info = info_with_instance.first;
        (void)gen_environmentdepthswapchainmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateEnvironmentDepthSwapchainImagesMETA(swapchain, imageCapacityInput, imageCountOutput, images);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateEnvironmentDepthSwapchainImagesMETA(
    XrEnvironmentDepthSwapchainMETA swapchain,
    uint32_t imageCapacityInput,
    uint32_t* imageCountOutput,
    XrSwapchainImageBaseHeader* images) {
    XrResult test_result = GenValidUsageInputsXrEnumerateEnvironmentDepthSwapchainImagesMETA(swapchain, imageCapacityInput, imageCountOutput, images);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateEnvironmentDepthSwapchainImagesMETA(swapchain, imageCapacityInput, imageCountOutput, images);
}

XrResult GenValidUsageInputsXrGetEnvironmentDepthSwapchainStateMETA(
XrEnvironmentDepthSwapchainMETA swapchain,
XrEnvironmentDepthSwapchainStateMETA* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(swapchain, XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentDepthSwapchainMETAHandle(&swapchain);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentDepthSwapchainMETA handle \"swapchain\" ";
                oss << HandleToHexString(swapchain);
                CoreValidLogMessage(nullptr, "VUID-xrGetEnvironmentDepthSwapchainStateMETA-swapchain-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetEnvironmentDepthSwapchainStateMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentdepthswapchainmeta_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_environmentdepthswapchainmeta_info = info_with_instance.first;
        (void)gen_environmentdepthswapchainmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetEnvironmentDepthSwapchainStateMETA-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetEnvironmentDepthSwapchainStateMETA", objects_info,
                                "Invalid NULL for XrEnvironmentDepthSwapchainStateMETA \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEnvironmentDepthSwapchainStateMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetEnvironmentDepthSwapchainStateMETA", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetEnvironmentDepthSwapchainStateMETA-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetEnvironmentDepthSwapchainStateMETA",
                                objects_info,
                                "Command xrGetEnvironmentDepthSwapchainStateMETA param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetEnvironmentDepthSwapchainStateMETA(
    XrEnvironmentDepthSwapchainMETA swapchain,
    XrEnvironmentDepthSwapchainStateMETA* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentdepthswapchainmeta_info.getWithInstanceInfo(swapchain);
        GenValidUsageXrHandleInfo *gen_environmentdepthswapchainmeta_info = info_with_instance.first;
        (void)gen_environmentdepthswapchainmeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetEnvironmentDepthSwapchainStateMETA(swapchain, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetEnvironmentDepthSwapchainStateMETA(
    XrEnvironmentDepthSwapchainMETA swapchain,
    XrEnvironmentDepthSwapchainStateMETA* state) {
    XrResult test_result = GenValidUsageInputsXrGetEnvironmentDepthSwapchainStateMETA(swapchain, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetEnvironmentDepthSwapchainStateMETA(swapchain, state);
}

XrResult GenValidUsageInputsXrAcquireEnvironmentDepthImageMETA(
XrEnvironmentDepthProviderMETA environmentDepthProvider,
const XrEnvironmentDepthImageAcquireInfoMETA* acquireInfo,
XrEnvironmentDepthImageMETA* environmentDepthImage) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(environmentDepthProvider, XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentDepthProviderMETAHandle(&environmentDepthProvider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentDepthProviderMETA handle \"environmentDepthProvider\" ";
                oss << HandleToHexString(environmentDepthProvider);
                CoreValidLogMessage(nullptr, "VUID-xrAcquireEnvironmentDepthImageMETA-environmentDepthProvider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAcquireEnvironmentDepthImageMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == acquireInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAcquireEnvironmentDepthImageMETA-acquireInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAcquireEnvironmentDepthImageMETA", objects_info,
                                "Invalid NULL for XrEnvironmentDepthImageAcquireInfoMETA \"acquireInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEnvironmentDepthImageAcquireInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrAcquireEnvironmentDepthImageMETA", objects_info,
                                                        true, true, acquireInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAcquireEnvironmentDepthImageMETA-acquireInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAcquireEnvironmentDepthImageMETA",
                                objects_info,
                                "Command xrAcquireEnvironmentDepthImageMETA param acquireInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == environmentDepthImage) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAcquireEnvironmentDepthImageMETA-environmentDepthImage-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAcquireEnvironmentDepthImageMETA", objects_info,
                                "Invalid NULL for XrEnvironmentDepthImageMETA \"environmentDepthImage\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEnvironmentDepthImageMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrAcquireEnvironmentDepthImageMETA", objects_info,
                                                        false, true, environmentDepthImage);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAcquireEnvironmentDepthImageMETA-environmentDepthImage-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAcquireEnvironmentDepthImageMETA",
                                objects_info,
                                "Command xrAcquireEnvironmentDepthImageMETA param environmentDepthImage is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrAcquireEnvironmentDepthImageMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider,
    const XrEnvironmentDepthImageAcquireInfoMETA* acquireInfo,
    XrEnvironmentDepthImageMETA* environmentDepthImage) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->AcquireEnvironmentDepthImageMETA(environmentDepthProvider, acquireInfo, environmentDepthImage);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrAcquireEnvironmentDepthImageMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider,
    const XrEnvironmentDepthImageAcquireInfoMETA* acquireInfo,
    XrEnvironmentDepthImageMETA* environmentDepthImage) {
    XrResult test_result = GenValidUsageInputsXrAcquireEnvironmentDepthImageMETA(environmentDepthProvider, acquireInfo, environmentDepthImage);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrAcquireEnvironmentDepthImageMETA(environmentDepthProvider, acquireInfo, environmentDepthImage);
}

XrResult GenValidUsageInputsXrSetEnvironmentDepthHandRemovalMETA(
XrEnvironmentDepthProviderMETA environmentDepthProvider,
const XrEnvironmentDepthHandRemovalSetInfoMETA* setInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(environmentDepthProvider, XR_OBJECT_TYPE_ENVIRONMENT_DEPTH_PROVIDER_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentDepthProviderMETAHandle(&environmentDepthProvider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentDepthProviderMETA handle \"environmentDepthProvider\" ";
                oss << HandleToHexString(environmentDepthProvider);
                CoreValidLogMessage(nullptr, "VUID-xrSetEnvironmentDepthHandRemovalMETA-environmentDepthProvider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetEnvironmentDepthHandRemovalMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == setInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetEnvironmentDepthHandRemovalMETA-setInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetEnvironmentDepthHandRemovalMETA", objects_info,
                                "Invalid NULL for XrEnvironmentDepthHandRemovalSetInfoMETA \"setInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEnvironmentDepthHandRemovalSetInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetEnvironmentDepthHandRemovalMETA", objects_info,
                                                        true, true, setInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetEnvironmentDepthHandRemovalMETA-setInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetEnvironmentDepthHandRemovalMETA",
                                objects_info,
                                "Command xrSetEnvironmentDepthHandRemovalMETA param setInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetEnvironmentDepthHandRemovalMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider,
    const XrEnvironmentDepthHandRemovalSetInfoMETA* setInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentdepthprovidermeta_info.getWithInstanceInfo(environmentDepthProvider);
        GenValidUsageXrHandleInfo *gen_environmentdepthprovidermeta_info = info_with_instance.first;
        (void)gen_environmentdepthprovidermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetEnvironmentDepthHandRemovalMETA(environmentDepthProvider, setInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetEnvironmentDepthHandRemovalMETA(
    XrEnvironmentDepthProviderMETA environmentDepthProvider,
    const XrEnvironmentDepthHandRemovalSetInfoMETA* setInfo) {
    XrResult test_result = GenValidUsageInputsXrSetEnvironmentDepthHandRemovalMETA(environmentDepthProvider, setInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetEnvironmentDepthHandRemovalMETA(environmentDepthProvider, setInfo);
}


// ---- XR_EXT_render_model extension commands
XrResult GenValidUsageInputsXrCreateRenderModelEXT(
XrSession session,
const XrRenderModelCreateInfoEXT* createInfo,
XrRenderModelEXT* renderModel) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateRenderModelEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateRenderModelEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelEXT", objects_info,
                                "Invalid NULL for XrRenderModelCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateRenderModelEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateRenderModelEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelEXT",
                                objects_info,
                                "Command xrCreateRenderModelEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == renderModel) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateRenderModelEXT-renderModel-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelEXT", objects_info,
                                "Invalid NULL for XrRenderModelEXT \"renderModel\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateRenderModelEXT(
    XrSession session,
    const XrRenderModelCreateInfoEXT* createInfo,
    XrRenderModelEXT* renderModel) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateRenderModelEXT(session, createInfo, renderModel);
        if (XR_SUCCESS == result && nullptr != renderModel) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_rendermodelext_info.insert(*renderModel, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateRenderModelEXT(
    XrSession session,
    const XrRenderModelCreateInfoEXT* createInfo,
    XrRenderModelEXT* renderModel) {
    XrResult test_result = GenValidUsageInputsXrCreateRenderModelEXT(session, createInfo, renderModel);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateRenderModelEXT(session, createInfo, renderModel);
}

XrResult GenValidUsageInputsXrDestroyRenderModelEXT(
XrRenderModelEXT renderModel) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderModel, XR_OBJECT_TYPE_RENDER_MODEL_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrRenderModelEXTHandle(&renderModel);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrRenderModelEXT handle \"renderModel\" ";
                oss << HandleToHexString(renderModel);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyRenderModelEXT-renderModel-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyRenderModelEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyRenderModelEXT(
    XrRenderModelEXT renderModel) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyRenderModelEXT(renderModel);
        if (XR_SUCCEEDED(result)) {
            g_rendermodelext_info.erase(renderModel);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyRenderModelEXT(
    XrRenderModelEXT renderModel) {
    XrResult test_result = GenValidUsageInputsXrDestroyRenderModelEXT(renderModel);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyRenderModelEXT(renderModel);
}

XrResult GenValidUsageInputsXrGetRenderModelPropertiesEXT(
XrRenderModelEXT renderModel,
const XrRenderModelPropertiesGetInfoEXT* getInfo,
XrRenderModelPropertiesEXT* properties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderModel, XR_OBJECT_TYPE_RENDER_MODEL_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrRenderModelEXTHandle(&renderModel);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrRenderModelEXT handle \"renderModel\" ";
                oss << HandleToHexString(renderModel);
                CoreValidLogMessage(nullptr, "VUID-xrGetRenderModelPropertiesEXT-renderModel-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPropertiesEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrRenderModelPropertiesGetInfoEXT is valid
        if (nullptr != getInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelPropertiesEXT",
                                                            objects_info, false, true, getInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelPropertiesEXT-getInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPropertiesEXT",
                                    objects_info,
                                    "Command xrGetRenderModelPropertiesEXT param getInfo is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == properties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelPropertiesEXT-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPropertiesEXT", objects_info,
                                "Invalid NULL for XrRenderModelPropertiesEXT \"properties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelPropertiesEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelPropertiesEXT", objects_info,
                                                        false, true, properties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelPropertiesEXT-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPropertiesEXT",
                                objects_info,
                                "Command xrGetRenderModelPropertiesEXT param properties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetRenderModelPropertiesEXT(
    XrRenderModelEXT renderModel,
    const XrRenderModelPropertiesGetInfoEXT* getInfo,
    XrRenderModelPropertiesEXT* properties) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetRenderModelPropertiesEXT(renderModel, getInfo, properties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetRenderModelPropertiesEXT(
    XrRenderModelEXT renderModel,
    const XrRenderModelPropertiesGetInfoEXT* getInfo,
    XrRenderModelPropertiesEXT* properties) {
    XrResult test_result = GenValidUsageInputsXrGetRenderModelPropertiesEXT(renderModel, getInfo, properties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetRenderModelPropertiesEXT(renderModel, getInfo, properties);
}

XrResult GenValidUsageInputsXrCreateRenderModelSpaceEXT(
XrSession session,
const XrRenderModelSpaceCreateInfoEXT* createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateRenderModelSpaceEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelSpaceEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateRenderModelSpaceEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelSpaceEXT", objects_info,
                                "Invalid NULL for XrRenderModelSpaceCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelSpaceCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateRenderModelSpaceEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateRenderModelSpaceEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelSpaceEXT",
                                objects_info,
                                "Command xrCreateRenderModelSpaceEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateRenderModelSpaceEXT-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelSpaceEXT", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateRenderModelSpaceEXT(
    XrSession session,
    const XrRenderModelSpaceCreateInfoEXT* createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateRenderModelSpaceEXT(session, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateRenderModelSpaceEXT(
    XrSession session,
    const XrRenderModelSpaceCreateInfoEXT* createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateRenderModelSpaceEXT(session, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateRenderModelSpaceEXT(session, createInfo, space);
}

XrResult GenValidUsageInputsXrCreateRenderModelAssetEXT(
XrSession session,
const XrRenderModelAssetCreateInfoEXT* createInfo,
XrRenderModelAssetEXT* asset) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateRenderModelAssetEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelAssetEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateRenderModelAssetEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelAssetEXT", objects_info,
                                "Invalid NULL for XrRenderModelAssetCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelAssetCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateRenderModelAssetEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateRenderModelAssetEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelAssetEXT",
                                objects_info,
                                "Command xrCreateRenderModelAssetEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == asset) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateRenderModelAssetEXT-asset-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateRenderModelAssetEXT", objects_info,
                                "Invalid NULL for XrRenderModelAssetEXT \"asset\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateRenderModelAssetEXT(
    XrSession session,
    const XrRenderModelAssetCreateInfoEXT* createInfo,
    XrRenderModelAssetEXT* asset) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateRenderModelAssetEXT(session, createInfo, asset);
        if (XR_SUCCESS == result && nullptr != asset) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_rendermodelassetext_info.insert(*asset, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateRenderModelAssetEXT(
    XrSession session,
    const XrRenderModelAssetCreateInfoEXT* createInfo,
    XrRenderModelAssetEXT* asset) {
    XrResult test_result = GenValidUsageInputsXrCreateRenderModelAssetEXT(session, createInfo, asset);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateRenderModelAssetEXT(session, createInfo, asset);
}

XrResult GenValidUsageInputsXrDestroyRenderModelAssetEXT(
XrRenderModelAssetEXT asset) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(asset, XR_OBJECT_TYPE_RENDER_MODEL_ASSET_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrRenderModelAssetEXTHandle(&asset);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrRenderModelAssetEXT handle \"asset\" ";
                oss << HandleToHexString(asset);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyRenderModelAssetEXT-asset-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyRenderModelAssetEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_rendermodelassetext_info.getWithInstanceInfo(asset);
        GenValidUsageXrHandleInfo *gen_rendermodelassetext_info = info_with_instance.first;
        (void)gen_rendermodelassetext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyRenderModelAssetEXT(
    XrRenderModelAssetEXT asset) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_rendermodelassetext_info.getWithInstanceInfo(asset);
        GenValidUsageXrHandleInfo *gen_rendermodelassetext_info = info_with_instance.first;
        (void)gen_rendermodelassetext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyRenderModelAssetEXT(asset);
        if (XR_SUCCEEDED(result)) {
            g_rendermodelassetext_info.erase(asset);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyRenderModelAssetEXT(
    XrRenderModelAssetEXT asset) {
    XrResult test_result = GenValidUsageInputsXrDestroyRenderModelAssetEXT(asset);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyRenderModelAssetEXT(asset);
}

XrResult GenValidUsageInputsXrGetRenderModelAssetDataEXT(
XrRenderModelAssetEXT asset,
const XrRenderModelAssetDataGetInfoEXT* getInfo,
XrRenderModelAssetDataEXT* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(asset, XR_OBJECT_TYPE_RENDER_MODEL_ASSET_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrRenderModelAssetEXTHandle(&asset);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrRenderModelAssetEXT handle \"asset\" ";
                oss << HandleToHexString(asset);
                CoreValidLogMessage(nullptr, "VUID-xrGetRenderModelAssetDataEXT-asset-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelAssetDataEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_rendermodelassetext_info.getWithInstanceInfo(asset);
        GenValidUsageXrHandleInfo *gen_rendermodelassetext_info = info_with_instance.first;
        (void)gen_rendermodelassetext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrRenderModelAssetDataGetInfoEXT is valid
        if (nullptr != getInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelAssetDataEXT",
                                                            objects_info, false, true, getInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelAssetDataEXT-getInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelAssetDataEXT",
                                    objects_info,
                                    "Command xrGetRenderModelAssetDataEXT param getInfo is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelAssetDataEXT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelAssetDataEXT", objects_info,
                                "Invalid NULL for XrRenderModelAssetDataEXT \"buffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelAssetDataEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelAssetDataEXT", objects_info,
                                                        false, true, buffer);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelAssetDataEXT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelAssetDataEXT",
                                objects_info,
                                "Command xrGetRenderModelAssetDataEXT param buffer is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetRenderModelAssetDataEXT(
    XrRenderModelAssetEXT asset,
    const XrRenderModelAssetDataGetInfoEXT* getInfo,
    XrRenderModelAssetDataEXT* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_rendermodelassetext_info.getWithInstanceInfo(asset);
        GenValidUsageXrHandleInfo *gen_rendermodelassetext_info = info_with_instance.first;
        (void)gen_rendermodelassetext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetRenderModelAssetDataEXT(asset, getInfo, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetRenderModelAssetDataEXT(
    XrRenderModelAssetEXT asset,
    const XrRenderModelAssetDataGetInfoEXT* getInfo,
    XrRenderModelAssetDataEXT* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetRenderModelAssetDataEXT(asset, getInfo, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetRenderModelAssetDataEXT(asset, getInfo, buffer);
}

XrResult GenValidUsageInputsXrGetRenderModelAssetPropertiesEXT(
XrRenderModelAssetEXT asset,
const XrRenderModelAssetPropertiesGetInfoEXT* getInfo,
XrRenderModelAssetPropertiesEXT* properties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(asset, XR_OBJECT_TYPE_RENDER_MODEL_ASSET_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrRenderModelAssetEXTHandle(&asset);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrRenderModelAssetEXT handle \"asset\" ";
                oss << HandleToHexString(asset);
                CoreValidLogMessage(nullptr, "VUID-xrGetRenderModelAssetPropertiesEXT-asset-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelAssetPropertiesEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_rendermodelassetext_info.getWithInstanceInfo(asset);
        GenValidUsageXrHandleInfo *gen_rendermodelassetext_info = info_with_instance.first;
        (void)gen_rendermodelassetext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrRenderModelAssetPropertiesGetInfoEXT is valid
        if (nullptr != getInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelAssetPropertiesEXT",
                                                            objects_info, false, true, getInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelAssetPropertiesEXT-getInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelAssetPropertiesEXT",
                                    objects_info,
                                    "Command xrGetRenderModelAssetPropertiesEXT param getInfo is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == properties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelAssetPropertiesEXT-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelAssetPropertiesEXT", objects_info,
                                "Invalid NULL for XrRenderModelAssetPropertiesEXT \"properties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelAssetPropertiesEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelAssetPropertiesEXT", objects_info,
                                                        false, true, properties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelAssetPropertiesEXT-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelAssetPropertiesEXT",
                                objects_info,
                                "Command xrGetRenderModelAssetPropertiesEXT param properties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetRenderModelAssetPropertiesEXT(
    XrRenderModelAssetEXT asset,
    const XrRenderModelAssetPropertiesGetInfoEXT* getInfo,
    XrRenderModelAssetPropertiesEXT* properties) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_rendermodelassetext_info.getWithInstanceInfo(asset);
        GenValidUsageXrHandleInfo *gen_rendermodelassetext_info = info_with_instance.first;
        (void)gen_rendermodelassetext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetRenderModelAssetPropertiesEXT(asset, getInfo, properties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetRenderModelAssetPropertiesEXT(
    XrRenderModelAssetEXT asset,
    const XrRenderModelAssetPropertiesGetInfoEXT* getInfo,
    XrRenderModelAssetPropertiesEXT* properties) {
    XrResult test_result = GenValidUsageInputsXrGetRenderModelAssetPropertiesEXT(asset, getInfo, properties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetRenderModelAssetPropertiesEXT(asset, getInfo, properties);
}

XrResult GenValidUsageInputsXrGetRenderModelStateEXT(
XrRenderModelEXT renderModel,
const XrRenderModelStateGetInfoEXT* getInfo,
XrRenderModelStateEXT* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderModel, XR_OBJECT_TYPE_RENDER_MODEL_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrRenderModelEXTHandle(&renderModel);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrRenderModelEXT handle \"renderModel\" ";
                oss << HandleToHexString(renderModel);
                CoreValidLogMessage(nullptr, "VUID-xrGetRenderModelStateEXT-renderModel-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelStateEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelStateEXT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelStateEXT", objects_info,
                                "Invalid NULL for XrRenderModelStateGetInfoEXT \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelStateGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelStateEXT", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelStateEXT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelStateEXT",
                                objects_info,
                                "Command xrGetRenderModelStateEXT param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelStateEXT-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelStateEXT", objects_info,
                                "Invalid NULL for XrRenderModelStateEXT \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRenderModelStateEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelStateEXT", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelStateEXT-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelStateEXT",
                                objects_info,
                                "Command xrGetRenderModelStateEXT param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetRenderModelStateEXT(
    XrRenderModelEXT renderModel,
    const XrRenderModelStateGetInfoEXT* getInfo,
    XrRenderModelStateEXT* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetRenderModelStateEXT(renderModel, getInfo, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetRenderModelStateEXT(
    XrRenderModelEXT renderModel,
    const XrRenderModelStateGetInfoEXT* getInfo,
    XrRenderModelStateEXT* state) {
    XrResult test_result = GenValidUsageInputsXrGetRenderModelStateEXT(renderModel, getInfo, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetRenderModelStateEXT(renderModel, getInfo, state);
}


// ---- XR_EXT_interaction_render_model extension commands
XrResult GenValidUsageInputsXrEnumerateInteractionRenderModelIdsEXT(
XrSession session,
const XrInteractionRenderModelIdsEnumerateInfoEXT* getInfo,
uint32_t renderModelIdCapacityInput,
uint32_t* renderModelIdCountOutput,
XrRenderModelIdEXT* renderModelIds) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateInteractionRenderModelIdsEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateInteractionRenderModelIdsEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateInteractionRenderModelIdsEXT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateInteractionRenderModelIdsEXT", objects_info,
                                "Invalid NULL for XrInteractionRenderModelIdsEnumerateInfoEXT \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrInteractionRenderModelIdsEnumerateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateInteractionRenderModelIdsEXT", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateInteractionRenderModelIdsEXT-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateInteractionRenderModelIdsEXT",
                                objects_info,
                                "Command xrEnumerateInteractionRenderModelIdsEXT param getInfo is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when renderModelIdCapacityInput is non-zero
        if (0 != renderModelIdCapacityInput && nullptr == renderModelIds) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateInteractionRenderModelIdsEXT-renderModelIds-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateInteractionRenderModelIdsEXT",
                                objects_info,
                                "Command xrEnumerateInteractionRenderModelIdsEXT param renderModelIds is NULL, but renderModelIdCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == renderModelIdCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateInteractionRenderModelIdsEXT-renderModelIdCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateInteractionRenderModelIdsEXT", objects_info,
                                "Invalid NULL for uint32_t \"renderModelIdCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateInteractionRenderModelIdsEXT-renderModelIdCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrEnumerateInteractionRenderModelIdsEXT-renderModelIds-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateInteractionRenderModelIdsEXT(
    XrSession session,
    const XrInteractionRenderModelIdsEnumerateInfoEXT* getInfo,
    uint32_t renderModelIdCapacityInput,
    uint32_t* renderModelIdCountOutput,
    XrRenderModelIdEXT* renderModelIds) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateInteractionRenderModelIdsEXT(session, getInfo, renderModelIdCapacityInput, renderModelIdCountOutput, renderModelIds);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateInteractionRenderModelIdsEXT(
    XrSession session,
    const XrInteractionRenderModelIdsEnumerateInfoEXT* getInfo,
    uint32_t renderModelIdCapacityInput,
    uint32_t* renderModelIdCountOutput,
    XrRenderModelIdEXT* renderModelIds) {
    XrResult test_result = GenValidUsageInputsXrEnumerateInteractionRenderModelIdsEXT(session, getInfo, renderModelIdCapacityInput, renderModelIdCountOutput, renderModelIds);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateInteractionRenderModelIdsEXT(session, getInfo, renderModelIdCapacityInput, renderModelIdCountOutput, renderModelIds);
}

XrResult GenValidUsageInputsXrEnumerateRenderModelSubactionPathsEXT(
XrRenderModelEXT renderModel,
const XrInteractionRenderModelSubactionPathInfoEXT* info,
uint32_t pathCapacityInput,
uint32_t* pathCountOutput,
XrPath* paths) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderModel, XR_OBJECT_TYPE_RENDER_MODEL_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrRenderModelEXTHandle(&renderModel);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrRenderModelEXT handle \"renderModel\" ";
                oss << HandleToHexString(renderModel);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateRenderModelSubactionPathsEXT-renderModel-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRenderModelSubactionPathsEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrInteractionRenderModelSubactionPathInfoEXT is valid
        if (nullptr != info) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateRenderModelSubactionPathsEXT",
                                                            objects_info, false, true, info);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateRenderModelSubactionPathsEXT-info-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRenderModelSubactionPathsEXT",
                                    objects_info,
                                    "Command xrEnumerateRenderModelSubactionPathsEXT param info is invalid");
                return xr_result;
            }
        }
        // Optional array must be non-NULL when pathCapacityInput is non-zero
        if (0 != pathCapacityInput && nullptr == paths) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateRenderModelSubactionPathsEXT-paths-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRenderModelSubactionPathsEXT",
                                objects_info,
                                "Command xrEnumerateRenderModelSubactionPathsEXT param paths is NULL, but pathCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == pathCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateRenderModelSubactionPathsEXT-pathCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRenderModelSubactionPathsEXT", objects_info,
                                "Invalid NULL for uint32_t \"pathCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateRenderModelSubactionPathsEXT-pathCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrEnumerateRenderModelSubactionPathsEXT-paths-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateRenderModelSubactionPathsEXT(
    XrRenderModelEXT renderModel,
    const XrInteractionRenderModelSubactionPathInfoEXT* info,
    uint32_t pathCapacityInput,
    uint32_t* pathCountOutput,
    XrPath* paths) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateRenderModelSubactionPathsEXT(renderModel, info, pathCapacityInput, pathCountOutput, paths);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateRenderModelSubactionPathsEXT(
    XrRenderModelEXT renderModel,
    const XrInteractionRenderModelSubactionPathInfoEXT* info,
    uint32_t pathCapacityInput,
    uint32_t* pathCountOutput,
    XrPath* paths) {
    XrResult test_result = GenValidUsageInputsXrEnumerateRenderModelSubactionPathsEXT(renderModel, info, pathCapacityInput, pathCountOutput, paths);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateRenderModelSubactionPathsEXT(renderModel, info, pathCapacityInput, pathCountOutput, paths);
}

XrResult GenValidUsageInputsXrGetRenderModelPoseTopLevelUserPathEXT(
XrRenderModelEXT renderModel,
const XrInteractionRenderModelTopLevelUserPathGetInfoEXT* info,
XrPath* topLevelUserPath) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderModel, XR_OBJECT_TYPE_RENDER_MODEL_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrRenderModelEXTHandle(&renderModel);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrRenderModelEXT handle \"renderModel\" ";
                oss << HandleToHexString(renderModel);
                CoreValidLogMessage(nullptr, "VUID-xrGetRenderModelPoseTopLevelUserPathEXT-renderModel-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPoseTopLevelUserPathEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelPoseTopLevelUserPathEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPoseTopLevelUserPathEXT", objects_info,
                                "Invalid NULL for XrInteractionRenderModelTopLevelUserPathGetInfoEXT \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrInteractionRenderModelTopLevelUserPathGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetRenderModelPoseTopLevelUserPathEXT", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelPoseTopLevelUserPathEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPoseTopLevelUserPathEXT",
                                objects_info,
                                "Command xrGetRenderModelPoseTopLevelUserPathEXT param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == topLevelUserPath) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetRenderModelPoseTopLevelUserPathEXT-topLevelUserPath-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetRenderModelPoseTopLevelUserPathEXT", objects_info,
                                "Invalid NULL for XrPath \"topLevelUserPath\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetRenderModelPoseTopLevelUserPathEXT-topLevelUserPath-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetRenderModelPoseTopLevelUserPathEXT(
    XrRenderModelEXT renderModel,
    const XrInteractionRenderModelTopLevelUserPathGetInfoEXT* info,
    XrPath* topLevelUserPath) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_rendermodelext_info.getWithInstanceInfo(renderModel);
        GenValidUsageXrHandleInfo *gen_rendermodelext_info = info_with_instance.first;
        (void)gen_rendermodelext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetRenderModelPoseTopLevelUserPathEXT(renderModel, info, topLevelUserPath);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetRenderModelPoseTopLevelUserPathEXT(
    XrRenderModelEXT renderModel,
    const XrInteractionRenderModelTopLevelUserPathGetInfoEXT* info,
    XrPath* topLevelUserPath) {
    XrResult test_result = GenValidUsageInputsXrGetRenderModelPoseTopLevelUserPathEXT(renderModel, info, topLevelUserPath);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetRenderModelPoseTopLevelUserPathEXT(renderModel, info, topLevelUserPath);
}


// ---- XR_QCOM_tracking_optimization_settings extension commands
XrResult GenValidUsageInputsXrSetTrackingOptimizationSettingsHintQCOM(
XrSession session,
XrTrackingOptimizationSettingsDomainQCOM domain,
XrTrackingOptimizationSettingsHintQCOM hint) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetTrackingOptimizationSettingsHintQCOM-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetTrackingOptimizationSettingsHintQCOM",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrTrackingOptimizationSettingsDomainQCOM value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrSetTrackingOptimizationSettingsHintQCOM", "xrSetTrackingOptimizationSettingsHintQCOM", "domain", objects_info, domain)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrTrackingOptimizationSettingsDomainQCOM \"domain\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(domain));
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetTrackingOptimizationSettingsHintQCOM-domain-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrSetTrackingOptimizationSettingsHintQCOM",
                                objects_info, oss_enum.str());
        }
        // Make sure the enum type XrTrackingOptimizationSettingsHintQCOM value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrSetTrackingOptimizationSettingsHintQCOM", "xrSetTrackingOptimizationSettingsHintQCOM", "hint", objects_info, hint)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrTrackingOptimizationSettingsHintQCOM \"hint\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(hint));
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetTrackingOptimizationSettingsHintQCOM-hint-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrSetTrackingOptimizationSettingsHintQCOM",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetTrackingOptimizationSettingsHintQCOM(
    XrSession session,
    XrTrackingOptimizationSettingsDomainQCOM domain,
    XrTrackingOptimizationSettingsHintQCOM hint) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetTrackingOptimizationSettingsHintQCOM(session, domain, hint);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetTrackingOptimizationSettingsHintQCOM(
    XrSession session,
    XrTrackingOptimizationSettingsDomainQCOM domain,
    XrTrackingOptimizationSettingsHintQCOM hint) {
    XrResult test_result = GenValidUsageInputsXrSetTrackingOptimizationSettingsHintQCOM(session, domain, hint);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetTrackingOptimizationSettingsHintQCOM(session, domain, hint);
}


// ---- XR_QCOM_hand_tracking_gesture extension commands
XrResult GenValidUsageInputsXrGetHandGestureQCOM(
XrHandTrackerEXT handTracker,
XrTime time,
XrHandGestureQCOM* handGesture) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handTracker, XR_OBJECT_TYPE_HAND_TRACKER_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrHandTrackerEXTHandle(&handTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrHandTrackerEXT handle \"handTracker\" ";
                oss << HandleToHexString(handTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetHandGestureQCOM-handTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetHandGestureQCOM",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == handGesture) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetHandGestureQCOM-handGesture-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetHandGestureQCOM", objects_info,
                                "Invalid NULL for XrHandGestureQCOM \"handGesture\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHandGestureQCOM is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetHandGestureQCOM", objects_info,
                                                        false, true, handGesture);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetHandGestureQCOM-handGesture-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetHandGestureQCOM",
                                objects_info,
                                "Command xrGetHandGestureQCOM param handGesture is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetHandGestureQCOM(
    XrHandTrackerEXT handTracker,
    XrTime time,
    XrHandGestureQCOM* handGesture) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetHandGestureQCOM(handTracker, time, handGesture);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetHandGestureQCOM(
    XrHandTrackerEXT handTracker,
    XrTime time,
    XrHandGestureQCOM* handGesture) {
    XrResult test_result = GenValidUsageInputsXrGetHandGestureQCOM(handTracker, time, handGesture);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetHandGestureQCOM(handTracker, time, handGesture);
}


// ---- XR_HTC_passthrough extension commands
XrResult GenValidUsageInputsXrCreatePassthroughHTC(
XrSession session,
const XrPassthroughCreateInfoHTC* createInfo,
XrPassthroughHTC* passthrough) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreatePassthroughHTC-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughHTC-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughHTC", objects_info,
                                "Invalid NULL for XrPassthroughCreateInfoHTC \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughCreateInfoHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreatePassthroughHTC", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughHTC-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughHTC",
                                objects_info,
                                "Command xrCreatePassthroughHTC param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == passthrough) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughHTC-passthrough-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughHTC", objects_info,
                                "Invalid NULL for XrPassthroughHTC \"passthrough\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreatePassthroughHTC(
    XrSession session,
    const XrPassthroughCreateInfoHTC* createInfo,
    XrPassthroughHTC* passthrough) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreatePassthroughHTC(session, createInfo, passthrough);
        if (XR_SUCCESS == result && nullptr != passthrough) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_passthroughhtc_info.insert(*passthrough, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreatePassthroughHTC(
    XrSession session,
    const XrPassthroughCreateInfoHTC* createInfo,
    XrPassthroughHTC* passthrough) {
    XrResult test_result = GenValidUsageInputsXrCreatePassthroughHTC(session, createInfo, passthrough);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreatePassthroughHTC(session, createInfo, passthrough);
}

XrResult GenValidUsageInputsXrDestroyPassthroughHTC(
XrPassthroughHTC passthrough) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(passthrough, XR_OBJECT_TYPE_PASSTHROUGH_HTC);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughHTCHandle(&passthrough);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughHTC handle \"passthrough\" ";
                oss << HandleToHexString(passthrough);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyPassthroughHTC-passthrough-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyPassthroughHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughhtc_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughhtc_info = info_with_instance.first;
        (void)gen_passthroughhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyPassthroughHTC(
    XrPassthroughHTC passthrough) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughhtc_info.getWithInstanceInfo(passthrough);
        GenValidUsageXrHandleInfo *gen_passthroughhtc_info = info_with_instance.first;
        (void)gen_passthroughhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyPassthroughHTC(passthrough);
        if (XR_SUCCEEDED(result)) {
            g_passthroughhtc_info.erase(passthrough);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyPassthroughHTC(
    XrPassthroughHTC passthrough) {
    XrResult test_result = GenValidUsageInputsXrDestroyPassthroughHTC(passthrough);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyPassthroughHTC(passthrough);
}


// ---- XR_HTC_foveation extension commands
XrResult GenValidUsageInputsXrApplyFoveationHTC(
XrSession session,
const XrFoveationApplyInfoHTC* applyInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrApplyFoveationHTC-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyFoveationHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == applyInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrApplyFoveationHTC-applyInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyFoveationHTC", objects_info,
                                "Invalid NULL for XrFoveationApplyInfoHTC \"applyInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFoveationApplyInfoHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrApplyFoveationHTC", objects_info,
                                                        true, true, applyInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrApplyFoveationHTC-applyInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyFoveationHTC",
                                objects_info,
                                "Command xrApplyFoveationHTC param applyInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrApplyFoveationHTC(
    XrSession session,
    const XrFoveationApplyInfoHTC* applyInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ApplyFoveationHTC(session, applyInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrApplyFoveationHTC(
    XrSession session,
    const XrFoveationApplyInfoHTC* applyInfo) {
    XrResult test_result = GenValidUsageInputsXrApplyFoveationHTC(session, applyInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrApplyFoveationHTC(session, applyInfo);
}


// ---- XR_HTC_anchor extension commands
XrResult GenValidUsageInputsXrCreateSpatialAnchorHTC(
XrSession session,
const XrSpatialAnchorCreateInfoHTC* createInfo,
XrSpace* anchor) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorHTC-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorHTC-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorHTC", objects_info,
                                "Invalid NULL for XrSpatialAnchorCreateInfoHTC \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorCreateInfoHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorHTC", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorHTC-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorHTC",
                                objects_info,
                                "Command xrCreateSpatialAnchorHTC param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchor) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorHTC-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorHTC", objects_info,
                                "Invalid NULL for XrSpace \"anchor\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorHTC(
    XrSession session,
    const XrSpatialAnchorCreateInfoHTC* createInfo,
    XrSpace* anchor) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorHTC(session, createInfo, anchor);
        if (XR_SUCCESS == result && nullptr != anchor) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*anchor, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorHTC(
    XrSession session,
    const XrSpatialAnchorCreateInfoHTC* createInfo,
    XrSpace* anchor) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorHTC(session, createInfo, anchor);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorHTC(session, createInfo, anchor);
}

XrResult GenValidUsageInputsXrGetSpatialAnchorNameHTC(
XrSpace anchor,
XrSpatialAnchorNameHTC* name) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(anchor, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&anchor);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"anchor\" ";
                oss << HandleToHexString(anchor);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialAnchorNameHTC-anchor-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialAnchorNameHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == name) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialAnchorNameHTC-name-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialAnchorNameHTC", objects_info,
                                "Invalid NULL for XrSpatialAnchorNameHTC \"name\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorNameHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialAnchorNameHTC", objects_info,
                                                        false, true, name);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialAnchorNameHTC-name-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialAnchorNameHTC",
                                objects_info,
                                "Command xrGetSpatialAnchorNameHTC param name is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialAnchorNameHTC(
    XrSpace anchor,
    XrSpatialAnchorNameHTC* name) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialAnchorNameHTC(anchor, name);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialAnchorNameHTC(
    XrSpace anchor,
    XrSpatialAnchorNameHTC* name) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialAnchorNameHTC(anchor, name);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialAnchorNameHTC(anchor, name);
}


// ---- XR_HTC_body_tracking extension commands
XrResult GenValidUsageInputsXrCreateBodyTrackerHTC(
XrSession session,
const XrBodyTrackerCreateInfoHTC* createInfo,
XrBodyTrackerHTC* bodyTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateBodyTrackerHTC-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateBodyTrackerHTC-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerHTC", objects_info,
                                "Invalid NULL for XrBodyTrackerCreateInfoHTC \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyTrackerCreateInfoHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateBodyTrackerHTC", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateBodyTrackerHTC-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerHTC",
                                objects_info,
                                "Command xrCreateBodyTrackerHTC param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bodyTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateBodyTrackerHTC-bodyTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerHTC", objects_info,
                                "Invalid NULL for XrBodyTrackerHTC \"bodyTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateBodyTrackerHTC(
    XrSession session,
    const XrBodyTrackerCreateInfoHTC* createInfo,
    XrBodyTrackerHTC* bodyTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateBodyTrackerHTC(session, createInfo, bodyTracker);
        if (XR_SUCCESS == result && nullptr != bodyTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_bodytrackerhtc_info.insert(*bodyTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateBodyTrackerHTC(
    XrSession session,
    const XrBodyTrackerCreateInfoHTC* createInfo,
    XrBodyTrackerHTC* bodyTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateBodyTrackerHTC(session, createInfo, bodyTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateBodyTrackerHTC(session, createInfo, bodyTracker);
}

XrResult GenValidUsageInputsXrDestroyBodyTrackerHTC(
XrBodyTrackerHTC bodyTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_HTC);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerHTCHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerHTC handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyBodyTrackerHTC-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyBodyTrackerHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerhtc_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerhtc_info = info_with_instance.first;
        (void)gen_bodytrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyBodyTrackerHTC(
    XrBodyTrackerHTC bodyTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerhtc_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerhtc_info = info_with_instance.first;
        (void)gen_bodytrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyBodyTrackerHTC(bodyTracker);
        if (XR_SUCCEEDED(result)) {
            g_bodytrackerhtc_info.erase(bodyTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyBodyTrackerHTC(
    XrBodyTrackerHTC bodyTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyBodyTrackerHTC(bodyTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyBodyTrackerHTC(bodyTracker);
}

XrResult GenValidUsageInputsXrLocateBodyJointsHTC(
XrBodyTrackerHTC bodyTracker,
const XrBodyJointsLocateInfoHTC* locateInfo,
XrBodyJointLocationsHTC* locations) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_HTC);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerHTCHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerHTC handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrLocateBodyJointsHTC-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerhtc_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerhtc_info = info_with_instance.first;
        (void)gen_bodytrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsHTC-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsHTC", objects_info,
                                "Invalid NULL for XrBodyJointsLocateInfoHTC \"locateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyJointsLocateInfoHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateBodyJointsHTC", objects_info,
                                                        true, true, locateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsHTC-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsHTC",
                                objects_info,
                                "Command xrLocateBodyJointsHTC param locateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locations) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsHTC-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsHTC", objects_info,
                                "Invalid NULL for XrBodyJointLocationsHTC \"locations\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyJointLocationsHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateBodyJointsHTC", objects_info,
                                                        false, true, locations);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsHTC-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsHTC",
                                objects_info,
                                "Command xrLocateBodyJointsHTC param locations is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLocateBodyJointsHTC(
    XrBodyTrackerHTC bodyTracker,
    const XrBodyJointsLocateInfoHTC* locateInfo,
    XrBodyJointLocationsHTC* locations) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerhtc_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerhtc_info = info_with_instance.first;
        (void)gen_bodytrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LocateBodyJointsHTC(bodyTracker, locateInfo, locations);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLocateBodyJointsHTC(
    XrBodyTrackerHTC bodyTracker,
    const XrBodyJointsLocateInfoHTC* locateInfo,
    XrBodyJointLocationsHTC* locations) {
    XrResult test_result = GenValidUsageInputsXrLocateBodyJointsHTC(bodyTracker, locateInfo, locations);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLocateBodyJointsHTC(bodyTracker, locateInfo, locations);
}

XrResult GenValidUsageInputsXrGetBodySkeletonHTC(
XrBodyTrackerHTC bodyTracker,
XrSpace baseSpace,
uint32_t skeletonGenerationId,
XrBodySkeletonHTC* skeleton) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_HTC);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerHTCHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerHTC handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetBodySkeletonHTC-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetBodySkeletonHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerhtc_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerhtc_info = info_with_instance.first;
        (void)gen_bodytrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(baseSpace, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&baseSpace);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"baseSpace\" ";
                oss << HandleToHexString(baseSpace);
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetBodySkeletonHTC-baseSpace-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetBodySkeletonHTC",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_BODY_TRACKER_HTC,  MakeHandleGeneric(bodyTracker),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(baseSpace), true)) {
            std::ostringstream oss_error;
            oss_error << "XrBodyTrackerHTC " << HandleToHexString(bodyTracker);
            oss_error <<  " and XrSpace ";
            oss_error << HandleToHexString(baseSpace);
            oss_error <<  " must share a parent";
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetBodySkeletonHTC-commonparent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetBodySkeletonHTC",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == skeleton) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetBodySkeletonHTC-skeleton-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetBodySkeletonHTC", objects_info,
                                "Invalid NULL for XrBodySkeletonHTC \"skeleton\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodySkeletonHTC is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetBodySkeletonHTC", objects_info,
                                                        false, true, skeleton);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetBodySkeletonHTC-skeleton-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetBodySkeletonHTC",
                                objects_info,
                                "Command xrGetBodySkeletonHTC param skeleton is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetBodySkeletonHTC(
    XrBodyTrackerHTC bodyTracker,
    XrSpace baseSpace,
    uint32_t skeletonGenerationId,
    XrBodySkeletonHTC* skeleton) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerhtc_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerhtc_info = info_with_instance.first;
        (void)gen_bodytrackerhtc_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetBodySkeletonHTC(bodyTracker, baseSpace, skeletonGenerationId, skeleton);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetBodySkeletonHTC(
    XrBodyTrackerHTC bodyTracker,
    XrSpace baseSpace,
    uint32_t skeletonGenerationId,
    XrBodySkeletonHTC* skeleton) {
    XrResult test_result = GenValidUsageInputsXrGetBodySkeletonHTC(bodyTracker, baseSpace, skeletonGenerationId, skeleton);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetBodySkeletonHTC(bodyTracker, baseSpace, skeletonGenerationId, skeleton);
}


// ---- XR_MNDX_force_feedback_curl extension commands
XrResult GenValidUsageInputsXrApplyForceFeedbackCurlMNDX(
XrHandTrackerEXT handTracker,
const XrForceFeedbackCurlApplyLocationsMNDX* locations) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handTracker, XR_OBJECT_TYPE_HAND_TRACKER_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrHandTrackerEXTHandle(&handTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrHandTrackerEXT handle \"handTracker\" ";
                oss << HandleToHexString(handTracker);
                CoreValidLogMessage(nullptr, "VUID-xrApplyForceFeedbackCurlMNDX-handTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyForceFeedbackCurlMNDX",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locations) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrApplyForceFeedbackCurlMNDX-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyForceFeedbackCurlMNDX", objects_info,
                                "Invalid NULL for XrForceFeedbackCurlApplyLocationsMNDX \"locations\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrForceFeedbackCurlApplyLocationsMNDX is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrApplyForceFeedbackCurlMNDX", objects_info,
                                                        true, true, locations);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrApplyForceFeedbackCurlMNDX-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrApplyForceFeedbackCurlMNDX",
                                objects_info,
                                "Command xrApplyForceFeedbackCurlMNDX param locations is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrApplyForceFeedbackCurlMNDX(
    XrHandTrackerEXT handTracker,
    const XrForceFeedbackCurlApplyLocationsMNDX* locations) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_handtrackerext_info.getWithInstanceInfo(handTracker);
        GenValidUsageXrHandleInfo *gen_handtrackerext_info = info_with_instance.first;
        (void)gen_handtrackerext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ApplyForceFeedbackCurlMNDX(handTracker, locations);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrApplyForceFeedbackCurlMNDX(
    XrHandTrackerEXT handTracker,
    const XrForceFeedbackCurlApplyLocationsMNDX* locations) {
    XrResult test_result = GenValidUsageInputsXrApplyForceFeedbackCurlMNDX(handTracker, locations);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrApplyForceFeedbackCurlMNDX(handTracker, locations);
}


// ---- XR_BD_body_tracking extension commands
XrResult GenValidUsageInputsXrCreateBodyTrackerBD(
XrSession session,
const XrBodyTrackerCreateInfoBD* createInfo,
XrBodyTrackerBD* bodyTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateBodyTrackerBD-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateBodyTrackerBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerBD", objects_info,
                                "Invalid NULL for XrBodyTrackerCreateInfoBD \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyTrackerCreateInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateBodyTrackerBD", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateBodyTrackerBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerBD",
                                objects_info,
                                "Command xrCreateBodyTrackerBD param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bodyTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateBodyTrackerBD-bodyTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateBodyTrackerBD", objects_info,
                                "Invalid NULL for XrBodyTrackerBD \"bodyTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateBodyTrackerBD(
    XrSession session,
    const XrBodyTrackerCreateInfoBD* createInfo,
    XrBodyTrackerBD* bodyTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateBodyTrackerBD(session, createInfo, bodyTracker);
        if (XR_SUCCESS == result && nullptr != bodyTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_bodytrackerbd_info.insert(*bodyTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateBodyTrackerBD(
    XrSession session,
    const XrBodyTrackerCreateInfoBD* createInfo,
    XrBodyTrackerBD* bodyTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateBodyTrackerBD(session, createInfo, bodyTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateBodyTrackerBD(session, createInfo, bodyTracker);
}

XrResult GenValidUsageInputsXrDestroyBodyTrackerBD(
XrBodyTrackerBD bodyTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerBDHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerBD handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyBodyTrackerBD-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyBodyTrackerBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerbd_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerbd_info = info_with_instance.first;
        (void)gen_bodytrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyBodyTrackerBD(
    XrBodyTrackerBD bodyTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerbd_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerbd_info = info_with_instance.first;
        (void)gen_bodytrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyBodyTrackerBD(bodyTracker);
        if (XR_SUCCEEDED(result)) {
            g_bodytrackerbd_info.erase(bodyTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyBodyTrackerBD(
    XrBodyTrackerBD bodyTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyBodyTrackerBD(bodyTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyBodyTrackerBD(bodyTracker);
}

XrResult GenValidUsageInputsXrLocateBodyJointsBD(
XrBodyTrackerBD bodyTracker,
const XrBodyJointsLocateInfoBD* locateInfo,
XrBodyJointLocationsBD* locations) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(bodyTracker, XR_OBJECT_TYPE_BODY_TRACKER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrBodyTrackerBDHandle(&bodyTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrBodyTrackerBD handle \"bodyTracker\" ";
                oss << HandleToHexString(bodyTracker);
                CoreValidLogMessage(nullptr, "VUID-xrLocateBodyJointsBD-bodyTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_bodytrackerbd_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerbd_info = info_with_instance.first;
        (void)gen_bodytrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locateInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsBD-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsBD", objects_info,
                                "Invalid NULL for XrBodyJointsLocateInfoBD \"locateInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyJointsLocateInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateBodyJointsBD", objects_info,
                                                        true, true, locateInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsBD-locateInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsBD",
                                objects_info,
                                "Command xrLocateBodyJointsBD param locateInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locations) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsBD-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsBD", objects_info,
                                "Invalid NULL for XrBodyJointLocationsBD \"locations\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrBodyJointLocationsBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrLocateBodyJointsBD", objects_info,
                                                        false, true, locations);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrLocateBodyJointsBD-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrLocateBodyJointsBD",
                                objects_info,
                                "Command xrLocateBodyJointsBD param locations is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrLocateBodyJointsBD(
    XrBodyTrackerBD bodyTracker,
    const XrBodyJointsLocateInfoBD* locateInfo,
    XrBodyJointLocationsBD* locations) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_bodytrackerbd_info.getWithInstanceInfo(bodyTracker);
        GenValidUsageXrHandleInfo *gen_bodytrackerbd_info = info_with_instance.first;
        (void)gen_bodytrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->LocateBodyJointsBD(bodyTracker, locateInfo, locations);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrLocateBodyJointsBD(
    XrBodyTrackerBD bodyTracker,
    const XrBodyJointsLocateInfoBD* locateInfo,
    XrBodyJointLocationsBD* locations) {
    XrResult test_result = GenValidUsageInputsXrLocateBodyJointsBD(bodyTracker, locateInfo, locations);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrLocateBodyJointsBD(bodyTracker, locateInfo, locations);
}


// ---- XR_BD_facial_simulation extension commands
XrResult GenValidUsageInputsXrEnumerateFacialSimulationModesBD(
XrSession session,
uint32_t modeCapacityInput,
uint32_t* modeCountOutput,
XrFacialSimulationModeBD* modes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateFacialSimulationModesBD-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateFacialSimulationModesBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when modeCapacityInput is non-zero
        if (0 != modeCapacityInput && nullptr == modes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateFacialSimulationModesBD-modes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateFacialSimulationModesBD",
                                objects_info,
                                "Command xrEnumerateFacialSimulationModesBD param modes is NULL, but modeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == modeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateFacialSimulationModesBD-modeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateFacialSimulationModesBD", objects_info,
                                "Invalid NULL for uint32_t \"modeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateFacialSimulationModesBD-modeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateFacialSimulationModesBD-modes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateFacialSimulationModesBD(
    XrSession session,
    uint32_t modeCapacityInput,
    uint32_t* modeCountOutput,
    XrFacialSimulationModeBD* modes) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateFacialSimulationModesBD(session, modeCapacityInput, modeCountOutput, modes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateFacialSimulationModesBD(
    XrSession session,
    uint32_t modeCapacityInput,
    uint32_t* modeCountOutput,
    XrFacialSimulationModeBD* modes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateFacialSimulationModesBD(session, modeCapacityInput, modeCountOutput, modes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateFacialSimulationModesBD(session, modeCapacityInput, modeCountOutput, modes);
}

XrResult GenValidUsageInputsXrCreateFaceTrackerBD(
XrSession session,
const XrFaceTrackerCreateInfoBD* createInfo,
XrFaceTrackerBD* tracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateFaceTrackerBD-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTrackerBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerBD", objects_info,
                                "Invalid NULL for XrFaceTrackerCreateInfoBD \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceTrackerCreateInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateFaceTrackerBD", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTrackerBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerBD",
                                objects_info,
                                "Command xrCreateFaceTrackerBD param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == tracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTrackerBD-tracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerBD", objects_info,
                                "Invalid NULL for XrFaceTrackerBD \"tracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateFaceTrackerBD(
    XrSession session,
    const XrFaceTrackerCreateInfoBD* createInfo,
    XrFaceTrackerBD* tracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateFaceTrackerBD(session, createInfo, tracker);
        if (XR_SUCCESS == result && nullptr != tracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_facetrackerbd_info.insert(*tracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateFaceTrackerBD(
    XrSession session,
    const XrFaceTrackerCreateInfoBD* createInfo,
    XrFaceTrackerBD* tracker) {
    XrResult test_result = GenValidUsageInputsXrCreateFaceTrackerBD(session, createInfo, tracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateFaceTrackerBD(session, createInfo, tracker);
}

XrResult GenValidUsageInputsXrDestroyFaceTrackerBD(
XrFaceTrackerBD tracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_FACE_TRACKER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTrackerBDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTrackerBD handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyFaceTrackerBD-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyFaceTrackerBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetrackerbd_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_facetrackerbd_info = info_with_instance.first;
        (void)gen_facetrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyFaceTrackerBD(
    XrFaceTrackerBD tracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetrackerbd_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_facetrackerbd_info = info_with_instance.first;
        (void)gen_facetrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyFaceTrackerBD(tracker);
        if (XR_SUCCEEDED(result)) {
            g_facetrackerbd_info.erase(tracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyFaceTrackerBD(
    XrFaceTrackerBD tracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyFaceTrackerBD(tracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyFaceTrackerBD(tracker);
}

XrResult GenValidUsageInputsXrGetFacialSimulationDataBD(
XrFaceTrackerBD tracker,
const XrFacialSimulationDataGetInfoBD*info,
XrFacialSimulationDataBD* facialData) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_FACE_TRACKER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTrackerBDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTrackerBD handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetFacialSimulationDataBD-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialSimulationDataBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetrackerbd_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_facetrackerbd_info = info_with_instance.first;
        (void)gen_facetrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialSimulationDataBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialSimulationDataBD", objects_info,
                                "Invalid NULL for XrFacialSimulationDataGetInfoBD \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFacialSimulationDataGetInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFacialSimulationDataBD", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialSimulationDataBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialSimulationDataBD",
                                objects_info,
                                "Command xrGetFacialSimulationDataBD param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == facialData) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialSimulationDataBD-facialData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialSimulationDataBD", objects_info,
                                "Invalid NULL for XrFacialSimulationDataBD \"facialData\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFacialSimulationDataBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFacialSimulationDataBD", objects_info,
                                                        false, true, facialData);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialSimulationDataBD-facialData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialSimulationDataBD",
                                objects_info,
                                "Command xrGetFacialSimulationDataBD param facialData is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFacialSimulationDataBD(
    XrFaceTrackerBD tracker,
    const XrFacialSimulationDataGetInfoBD*info,
    XrFacialSimulationDataBD* facialData) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetrackerbd_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_facetrackerbd_info = info_with_instance.first;
        (void)gen_facetrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFacialSimulationDataBD(tracker, info, facialData);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFacialSimulationDataBD(
    XrFaceTrackerBD tracker,
    const XrFacialSimulationDataGetInfoBD*info,
    XrFacialSimulationDataBD* facialData) {
    XrResult test_result = GenValidUsageInputsXrGetFacialSimulationDataBD(tracker, info, facialData);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFacialSimulationDataBD(tracker, info, facialData);
}

XrResult GenValidUsageInputsXrSetFacialSimulationModeBD(
XrFaceTrackerBD tracker,
XrFacialSimulationModeBD mode) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_FACE_TRACKER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTrackerBDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTrackerBD handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrSetFacialSimulationModeBD-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetFacialSimulationModeBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetrackerbd_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_facetrackerbd_info = info_with_instance.first;
        (void)gen_facetrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrFacialSimulationModeBD value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrSetFacialSimulationModeBD", "xrSetFacialSimulationModeBD", "mode", objects_info, mode)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrFacialSimulationModeBD \"mode\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(mode));
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetFacialSimulationModeBD-mode-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrSetFacialSimulationModeBD",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetFacialSimulationModeBD(
    XrFaceTrackerBD tracker,
    XrFacialSimulationModeBD mode) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetrackerbd_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_facetrackerbd_info = info_with_instance.first;
        (void)gen_facetrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetFacialSimulationModeBD(tracker, mode);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetFacialSimulationModeBD(
    XrFaceTrackerBD tracker,
    XrFacialSimulationModeBD mode) {
    XrResult test_result = GenValidUsageInputsXrSetFacialSimulationModeBD(tracker, mode);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetFacialSimulationModeBD(tracker, mode);
}

XrResult GenValidUsageInputsXrGetFacialSimulationModeBD(
XrFaceTrackerBD tracker,
XrFacialSimulationModeBD*mode) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_FACE_TRACKER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTrackerBDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTrackerBD handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetFacialSimulationModeBD-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialSimulationModeBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetrackerbd_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_facetrackerbd_info = info_with_instance.first;
        (void)gen_facetrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == mode) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialSimulationModeBD-mode-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialSimulationModeBD", objects_info,
                                "Invalid NULL for XrFacialSimulationModeBD \"mode\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Make sure the enum type XrFacialSimulationModeBD value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetFacialSimulationModeBD", "xrGetFacialSimulationModeBD", "mode", objects_info, *mode)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrFacialSimulationModeBD \"mode\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(*mode));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialSimulationModeBD-mode-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetFacialSimulationModeBD",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFacialSimulationModeBD(
    XrFaceTrackerBD tracker,
    XrFacialSimulationModeBD*mode) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetrackerbd_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_facetrackerbd_info = info_with_instance.first;
        (void)gen_facetrackerbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFacialSimulationModeBD(tracker, mode);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFacialSimulationModeBD(
    XrFaceTrackerBD tracker,
    XrFacialSimulationModeBD*mode) {
    XrResult test_result = GenValidUsageInputsXrGetFacialSimulationModeBD(tracker, mode);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFacialSimulationModeBD(tracker, mode);
}


// ---- XR_BD_spatial_sensing extension commands
XrResult GenValidUsageInputsXrEnumerateSpatialEntityComponentTypesBD(
XrSenseDataSnapshotBD snapshot,
XrSpatialEntityIdBD entityId,
uint32_t componentTypeCapacityInput,
uint32_t* componentTypeCountOutput,
XrSpatialEntityComponentTypeBD* componentTypes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataSnapshotBDHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataSnapshotBD handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSpatialEntityComponentTypesBD-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialEntityComponentTypesBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when componentTypeCapacityInput is non-zero
        if (0 != componentTypeCapacityInput && nullptr == componentTypes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialEntityComponentTypesBD-componentTypes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialEntityComponentTypesBD",
                                objects_info,
                                "Command xrEnumerateSpatialEntityComponentTypesBD param componentTypes is NULL, but componentTypeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == componentTypeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialEntityComponentTypesBD-componentTypeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialEntityComponentTypesBD", objects_info,
                                "Invalid NULL for uint32_t \"componentTypeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSpatialEntityComponentTypesBD-componentTypeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSpatialEntityComponentTypesBD-componentTypes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSpatialEntityComponentTypesBD(
    XrSenseDataSnapshotBD snapshot,
    XrSpatialEntityIdBD entityId,
    uint32_t componentTypeCapacityInput,
    uint32_t* componentTypeCountOutput,
    XrSpatialEntityComponentTypeBD* componentTypes) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateSpatialEntityComponentTypesBD(snapshot, entityId, componentTypeCapacityInput, componentTypeCountOutput, componentTypes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSpatialEntityComponentTypesBD(
    XrSenseDataSnapshotBD snapshot,
    XrSpatialEntityIdBD entityId,
    uint32_t componentTypeCapacityInput,
    uint32_t* componentTypeCountOutput,
    XrSpatialEntityComponentTypeBD* componentTypes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSpatialEntityComponentTypesBD(snapshot, entityId, componentTypeCapacityInput, componentTypeCountOutput, componentTypes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSpatialEntityComponentTypesBD(snapshot, entityId, componentTypeCapacityInput, componentTypeCountOutput, componentTypes);
}

XrResult GenValidUsageInputsXrGetSpatialEntityUuidBD(
XrSenseDataSnapshotBD snapshot,
XrSpatialEntityIdBD entityId,
XrUuidEXT* uuid) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataSnapshotBDHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataSnapshotBD handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialEntityUuidBD-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialEntityUuidBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == uuid) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialEntityUuidBD-uuid-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialEntityUuidBD", objects_info,
                                "Invalid NULL for XrUuidEXT \"uuid\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpatialEntityUuidBD-uuid-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialEntityUuidBD(
    XrSenseDataSnapshotBD snapshot,
    XrSpatialEntityIdBD entityId,
    XrUuidEXT* uuid) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialEntityUuidBD(snapshot, entityId, uuid);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialEntityUuidBD(
    XrSenseDataSnapshotBD snapshot,
    XrSpatialEntityIdBD entityId,
    XrUuidEXT* uuid) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialEntityUuidBD(snapshot, entityId, uuid);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialEntityUuidBD(snapshot, entityId, uuid);
}

XrResult GenValidUsageInputsXrGetSpatialEntityComponentDataBD(
XrSenseDataSnapshotBD snapshot,
const XrSpatialEntityComponentGetInfoBD* getInfo,
XrSpatialEntityComponentDataBaseHeaderBD* componentData) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataSnapshotBDHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataSnapshotBD handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialEntityComponentDataBD-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialEntityComponentDataBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialEntityComponentDataBD-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialEntityComponentDataBD", objects_info,
                                "Invalid NULL for XrSpatialEntityComponentGetInfoBD \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialEntityComponentGetInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialEntityComponentDataBD", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialEntityComponentDataBD-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialEntityComponentDataBD",
                                objects_info,
                                "Command xrGetSpatialEntityComponentDataBD param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == componentData) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialEntityComponentDataBD-componentData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialEntityComponentDataBD", objects_info,
                                "Invalid NULL for XrSpatialEntityComponentDataBaseHeaderBD \"componentData\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the base-structure XrSpatialEntityComponentDataBaseHeaderBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialEntityComponentDataBD", objects_info,
                                                        false, true, componentData);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialEntityComponentDataBD-componentData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialEntityComponentDataBD",
                                objects_info,
                                "Command xrGetSpatialEntityComponentDataBD param componentData is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialEntityComponentDataBD(
    XrSenseDataSnapshotBD snapshot,
    const XrSpatialEntityComponentGetInfoBD* getInfo,
    XrSpatialEntityComponentDataBaseHeaderBD* componentData) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialEntityComponentDataBD(snapshot, getInfo, componentData);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialEntityComponentDataBD(
    XrSenseDataSnapshotBD snapshot,
    const XrSpatialEntityComponentGetInfoBD* getInfo,
    XrSpatialEntityComponentDataBaseHeaderBD* componentData) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialEntityComponentDataBD(snapshot, getInfo, componentData);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialEntityComponentDataBD(snapshot, getInfo, componentData);
}

XrResult GenValidUsageInputsXrCreateSenseDataProviderBD(
XrSession session,
const XrSenseDataProviderCreateInfoBD* createInfo,
XrSenseDataProviderBD* provider) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSenseDataProviderBD-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSenseDataProviderBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSenseDataProviderBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSenseDataProviderBD", objects_info,
                                "Invalid NULL for XrSenseDataProviderCreateInfoBD \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSenseDataProviderCreateInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSenseDataProviderBD", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSenseDataProviderBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSenseDataProviderBD",
                                objects_info,
                                "Command xrCreateSenseDataProviderBD param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == provider) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSenseDataProviderBD-provider-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSenseDataProviderBD", objects_info,
                                "Invalid NULL for XrSenseDataProviderBD \"provider\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSenseDataProviderBD(
    XrSession session,
    const XrSenseDataProviderCreateInfoBD* createInfo,
    XrSenseDataProviderBD* provider) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSenseDataProviderBD(session, createInfo, provider);
        if (XR_SUCCESS == result && nullptr != provider) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_sensedataproviderbd_info.insert(*provider, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSenseDataProviderBD(
    XrSession session,
    const XrSenseDataProviderCreateInfoBD* createInfo,
    XrSenseDataProviderBD* provider) {
    XrResult test_result = GenValidUsageInputsXrCreateSenseDataProviderBD(session, createInfo, provider);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSenseDataProviderBD(session, createInfo, provider);
}

XrResult GenValidUsageInputsXrStartSenseDataProviderAsyncBD(
XrSenseDataProviderBD provider,
const XrSenseDataProviderStartInfoBD* startInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrStartSenseDataProviderAsyncBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartSenseDataProviderAsyncBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == startInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartSenseDataProviderAsyncBD-startInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartSenseDataProviderAsyncBD", objects_info,
                                "Invalid NULL for XrSenseDataProviderStartInfoBD \"startInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSenseDataProviderStartInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrStartSenseDataProviderAsyncBD", objects_info,
                                                        true, true, startInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartSenseDataProviderAsyncBD-startInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartSenseDataProviderAsyncBD",
                                objects_info,
                                "Command xrStartSenseDataProviderAsyncBD param startInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartSenseDataProviderAsyncBD-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartSenseDataProviderAsyncBD", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrStartSenseDataProviderAsyncBD-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStartSenseDataProviderAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSenseDataProviderStartInfoBD* startInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StartSenseDataProviderAsyncBD(provider, startInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStartSenseDataProviderAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSenseDataProviderStartInfoBD* startInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrStartSenseDataProviderAsyncBD(provider, startInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStartSenseDataProviderAsyncBD(provider, startInfo, future);
}

XrResult GenValidUsageInputsXrStartSenseDataProviderCompleteBD(
XrSession session,
XrFutureEXT future,
XrFutureCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrStartSenseDataProviderCompleteBD-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartSenseDataProviderCompleteBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartSenseDataProviderCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartSenseDataProviderCompleteBD", objects_info,
                                "Invalid NULL for XrFutureCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFutureCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrStartSenseDataProviderCompleteBD", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartSenseDataProviderCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartSenseDataProviderCompleteBD",
                                objects_info,
                                "Command xrStartSenseDataProviderCompleteBD param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStartSenseDataProviderCompleteBD(
    XrSession session,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StartSenseDataProviderCompleteBD(session, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStartSenseDataProviderCompleteBD(
    XrSession session,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrStartSenseDataProviderCompleteBD(session, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStartSenseDataProviderCompleteBD(session, future, completion);
}

XrResult GenValidUsageInputsXrGetSenseDataProviderStateBD(
XrSenseDataProviderBD provider,
XrSenseDataProviderStateBD* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrGetSenseDataProviderStateBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSenseDataProviderStateBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSenseDataProviderStateBD-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSenseDataProviderStateBD", objects_info,
                                "Invalid NULL for XrSenseDataProviderStateBD \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Make sure the enum type XrSenseDataProviderStateBD value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetSenseDataProviderStateBD", "xrGetSenseDataProviderStateBD", "state", objects_info, *state)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrSenseDataProviderStateBD \"state\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(*state));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSenseDataProviderStateBD-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetSenseDataProviderStateBD",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSenseDataProviderStateBD(
    XrSenseDataProviderBD provider,
    XrSenseDataProviderStateBD* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSenseDataProviderStateBD(provider, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSenseDataProviderStateBD(
    XrSenseDataProviderBD provider,
    XrSenseDataProviderStateBD* state) {
    XrResult test_result = GenValidUsageInputsXrGetSenseDataProviderStateBD(provider, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSenseDataProviderStateBD(provider, state);
}

XrResult GenValidUsageInputsXrQuerySenseDataAsyncBD(
XrSenseDataProviderBD provider,
const XrSenseDataQueryInfoBD* queryInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrQuerySenseDataAsyncBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySenseDataAsyncBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == queryInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySenseDataAsyncBD-queryInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySenseDataAsyncBD", objects_info,
                                "Invalid NULL for XrSenseDataQueryInfoBD \"queryInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSenseDataQueryInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySenseDataAsyncBD", objects_info,
                                                        true, true, queryInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySenseDataAsyncBD-queryInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySenseDataAsyncBD",
                                objects_info,
                                "Command xrQuerySenseDataAsyncBD param queryInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySenseDataAsyncBD-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySenseDataAsyncBD", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrQuerySenseDataAsyncBD-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQuerySenseDataAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSenseDataQueryInfoBD* queryInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QuerySenseDataAsyncBD(provider, queryInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQuerySenseDataAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSenseDataQueryInfoBD* queryInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrQuerySenseDataAsyncBD(provider, queryInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQuerySenseDataAsyncBD(provider, queryInfo, future);
}

XrResult GenValidUsageInputsXrQuerySenseDataCompleteBD(
XrSenseDataProviderBD provider,
XrFutureEXT future,
XrSenseDataQueryCompletionBD* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrQuerySenseDataCompleteBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySenseDataCompleteBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySenseDataCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySenseDataCompleteBD", objects_info,
                                "Invalid NULL for XrSenseDataQueryCompletionBD \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSenseDataQueryCompletionBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySenseDataCompleteBD", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySenseDataCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySenseDataCompleteBD",
                                objects_info,
                                "Command xrQuerySenseDataCompleteBD param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQuerySenseDataCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrSenseDataQueryCompletionBD* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QuerySenseDataCompleteBD(provider, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQuerySenseDataCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrSenseDataQueryCompletionBD* completion) {
    XrResult test_result = GenValidUsageInputsXrQuerySenseDataCompleteBD(provider, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQuerySenseDataCompleteBD(provider, future, completion);
}

XrResult GenValidUsageInputsXrDestroySenseDataSnapshotBD(
XrSenseDataSnapshotBD snapshot) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataSnapshotBDHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataSnapshotBD handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySenseDataSnapshotBD-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySenseDataSnapshotBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySenseDataSnapshotBD(
    XrSenseDataSnapshotBD snapshot) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySenseDataSnapshotBD(snapshot);
        if (XR_SUCCEEDED(result)) {
            g_sensedatasnapshotbd_info.erase(snapshot);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySenseDataSnapshotBD(
    XrSenseDataSnapshotBD snapshot) {
    XrResult test_result = GenValidUsageInputsXrDestroySenseDataSnapshotBD(snapshot);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySenseDataSnapshotBD(snapshot);
}

XrResult GenValidUsageInputsXrGetQueriedSenseDataBD(
XrSenseDataSnapshotBD snapshot,
XrQueriedSenseDataGetInfoBD* getInfo,
XrQueriedSenseDataBD* queriedSenseData) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SENSE_DATA_SNAPSHOT_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataSnapshotBDHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataSnapshotBD handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetQueriedSenseDataBD-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetQueriedSenseDataBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetQueriedSenseDataBD-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetQueriedSenseDataBD", objects_info,
                                "Invalid NULL for XrQueriedSenseDataGetInfoBD \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrQueriedSenseDataGetInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetQueriedSenseDataBD", objects_info,
                                                        false, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetQueriedSenseDataBD-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetQueriedSenseDataBD",
                                objects_info,
                                "Command xrGetQueriedSenseDataBD param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == queriedSenseData) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetQueriedSenseDataBD-queriedSenseData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetQueriedSenseDataBD", objects_info,
                                "Invalid NULL for XrQueriedSenseDataBD \"queriedSenseData\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrQueriedSenseDataBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetQueriedSenseDataBD", objects_info,
                                                        false, true, queriedSenseData);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetQueriedSenseDataBD-queriedSenseData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetQueriedSenseDataBD",
                                objects_info,
                                "Command xrGetQueriedSenseDataBD param queriedSenseData is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetQueriedSenseDataBD(
    XrSenseDataSnapshotBD snapshot,
    XrQueriedSenseDataGetInfoBD* getInfo,
    XrQueriedSenseDataBD* queriedSenseData) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedatasnapshotbd_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_sensedatasnapshotbd_info = info_with_instance.first;
        (void)gen_sensedatasnapshotbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetQueriedSenseDataBD(snapshot, getInfo, queriedSenseData);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetQueriedSenseDataBD(
    XrSenseDataSnapshotBD snapshot,
    XrQueriedSenseDataGetInfoBD* getInfo,
    XrQueriedSenseDataBD* queriedSenseData) {
    XrResult test_result = GenValidUsageInputsXrGetQueriedSenseDataBD(snapshot, getInfo, queriedSenseData);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetQueriedSenseDataBD(snapshot, getInfo, queriedSenseData);
}

XrResult GenValidUsageInputsXrStopSenseDataProviderBD(
XrSenseDataProviderBD provider) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrStopSenseDataProviderBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopSenseDataProviderBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStopSenseDataProviderBD(
    XrSenseDataProviderBD provider) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StopSenseDataProviderBD(provider);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStopSenseDataProviderBD(
    XrSenseDataProviderBD provider) {
    XrResult test_result = GenValidUsageInputsXrStopSenseDataProviderBD(provider);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStopSenseDataProviderBD(provider);
}

XrResult GenValidUsageInputsXrDestroySenseDataProviderBD(
XrSenseDataProviderBD provider) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySenseDataProviderBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySenseDataProviderBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySenseDataProviderBD(
    XrSenseDataProviderBD provider) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySenseDataProviderBD(provider);
        if (XR_SUCCEEDED(result)) {
            g_sensedataproviderbd_info.erase(provider);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySenseDataProviderBD(
    XrSenseDataProviderBD provider) {
    XrResult test_result = GenValidUsageInputsXrDestroySenseDataProviderBD(provider);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySenseDataProviderBD(provider);
}

XrResult GenValidUsageInputsXrCreateSpatialEntityAnchorBD(
XrSenseDataProviderBD provider,
const XrSpatialEntityAnchorCreateInfoBD* createInfo,
XrAnchorBD* anchor) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialEntityAnchorBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialEntityAnchorBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialEntityAnchorBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialEntityAnchorBD", objects_info,
                                "Invalid NULL for XrSpatialEntityAnchorCreateInfoBD \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialEntityAnchorCreateInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialEntityAnchorBD", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialEntityAnchorBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialEntityAnchorBD",
                                objects_info,
                                "Command xrCreateSpatialEntityAnchorBD param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchor) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialEntityAnchorBD-anchor-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialEntityAnchorBD", objects_info,
                                "Invalid NULL for XrAnchorBD \"anchor\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialEntityAnchorBD(
    XrSenseDataProviderBD provider,
    const XrSpatialEntityAnchorCreateInfoBD* createInfo,
    XrAnchorBD* anchor) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialEntityAnchorBD(provider, createInfo, anchor);
        if (XR_SUCCESS == result && nullptr != anchor) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD;
            handle_info->direct_parent_handle = MakeHandleGeneric(provider);
            g_anchorbd_info.insert(*anchor, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialEntityAnchorBD(
    XrSenseDataProviderBD provider,
    const XrSpatialEntityAnchorCreateInfoBD* createInfo,
    XrAnchorBD* anchor) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialEntityAnchorBD(provider, createInfo, anchor);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialEntityAnchorBD(provider, createInfo, anchor);
}

XrResult GenValidUsageInputsXrDestroyAnchorBD(
XrAnchorBD anchor) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(anchor, XR_OBJECT_TYPE_ANCHOR_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrAnchorBDHandle(&anchor);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrAnchorBD handle \"anchor\" ";
                oss << HandleToHexString(anchor);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyAnchorBD-anchor-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyAnchorBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_anchorbd_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_anchorbd_info = info_with_instance.first;
        (void)gen_anchorbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyAnchorBD(
    XrAnchorBD anchor) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_anchorbd_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_anchorbd_info = info_with_instance.first;
        (void)gen_anchorbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyAnchorBD(anchor);
        if (XR_SUCCEEDED(result)) {
            g_anchorbd_info.erase(anchor);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyAnchorBD(
    XrAnchorBD anchor) {
    XrResult test_result = GenValidUsageInputsXrDestroyAnchorBD(anchor);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyAnchorBD(anchor);
}

XrResult GenValidUsageInputsXrGetAnchorUuidBD(
XrAnchorBD anchor,
XrUuidEXT* uuid) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(anchor, XR_OBJECT_TYPE_ANCHOR_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrAnchorBDHandle(&anchor);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrAnchorBD handle \"anchor\" ";
                oss << HandleToHexString(anchor);
                CoreValidLogMessage(nullptr, "VUID-xrGetAnchorUuidBD-anchor-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAnchorUuidBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_anchorbd_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_anchorbd_info = info_with_instance.first;
        (void)gen_anchorbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == uuid) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetAnchorUuidBD-uuid-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAnchorUuidBD", objects_info,
                                "Invalid NULL for XrUuidEXT \"uuid\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetAnchorUuidBD-uuid-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetAnchorUuidBD(
    XrAnchorBD anchor,
    XrUuidEXT* uuid) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_anchorbd_info.getWithInstanceInfo(anchor);
        GenValidUsageXrHandleInfo *gen_anchorbd_info = info_with_instance.first;
        (void)gen_anchorbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetAnchorUuidBD(anchor, uuid);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetAnchorUuidBD(
    XrAnchorBD anchor,
    XrUuidEXT* uuid) {
    XrResult test_result = GenValidUsageInputsXrGetAnchorUuidBD(anchor, uuid);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetAnchorUuidBD(anchor, uuid);
}

XrResult GenValidUsageInputsXrCreateAnchorSpaceBD(
XrSession session,
const XrAnchorSpaceCreateInfoBD* createInfo,
XrSpace* space) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateAnchorSpaceBD-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAnchorSpaceBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateAnchorSpaceBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAnchorSpaceBD", objects_info,
                                "Invalid NULL for XrAnchorSpaceCreateInfoBD \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrAnchorSpaceCreateInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateAnchorSpaceBD", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateAnchorSpaceBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAnchorSpaceBD",
                                objects_info,
                                "Command xrCreateAnchorSpaceBD param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == space) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateAnchorSpaceBD-space-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAnchorSpaceBD", objects_info,
                                "Invalid NULL for XrSpace \"space\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateAnchorSpaceBD(
    XrSession session,
    const XrAnchorSpaceCreateInfoBD* createInfo,
    XrSpace* space) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateAnchorSpaceBD(session, createInfo, space);
        if (XR_SUCCESS == result && nullptr != space) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*space, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateAnchorSpaceBD(
    XrSession session,
    const XrAnchorSpaceCreateInfoBD* createInfo,
    XrSpace* space) {
    XrResult test_result = GenValidUsageInputsXrCreateAnchorSpaceBD(session, createInfo, space);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateAnchorSpaceBD(session, createInfo, space);
}


// ---- XR_BD_spatial_anchor extension commands
XrResult GenValidUsageInputsXrCreateSpatialAnchorAsyncBD(
XrSenseDataProviderBD provider,
const XrSpatialAnchorCreateInfoBD* info,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorAsyncBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorAsyncBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrSpatialAnchorCreateInfoBD \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorCreateInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorAsyncBD", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorAsyncBD",
                                objects_info,
                                "Command xrCreateSpatialAnchorAsyncBD param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorAsyncBD-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSpatialAnchorAsyncBD-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSpatialAnchorCreateInfoBD* info,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorAsyncBD(provider, info, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSpatialAnchorCreateInfoBD* info,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorAsyncBD(provider, info, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorAsyncBD(provider, info, future);
}

XrResult GenValidUsageInputsXrCreateSpatialAnchorCompleteBD(
XrSenseDataProviderBD provider,
XrFutureEXT future,
XrSpatialAnchorCreateCompletionBD* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorCompleteBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorCompleteBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorCompleteBD", objects_info,
                                "Invalid NULL for XrSpatialAnchorCreateCompletionBD \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorCreateCompletionBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorCompleteBD", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorCompleteBD",
                                objects_info,
                                "Command xrCreateSpatialAnchorCompleteBD param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrSpatialAnchorCreateCompletionBD* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorCompleteBD(provider, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrSpatialAnchorCreateCompletionBD* completion) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorCompleteBD(provider, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorCompleteBD(provider, future, completion);
}

XrResult GenValidUsageInputsXrPersistSpatialAnchorAsyncBD(
XrSenseDataProviderBD provider,
const XrSpatialAnchorPersistInfoBD* info,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrPersistSpatialAnchorAsyncBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorAsyncBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrSpatialAnchorPersistInfoBD \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorPersistInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPersistSpatialAnchorAsyncBD", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorAsyncBD",
                                objects_info,
                                "Command xrPersistSpatialAnchorAsyncBD param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialAnchorAsyncBD-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrPersistSpatialAnchorAsyncBD-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPersistSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSpatialAnchorPersistInfoBD* info,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PersistSpatialAnchorAsyncBD(provider, info, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPersistSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSpatialAnchorPersistInfoBD* info,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrPersistSpatialAnchorAsyncBD(provider, info, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPersistSpatialAnchorAsyncBD(provider, info, future);
}

XrResult GenValidUsageInputsXrPersistSpatialAnchorCompleteBD(
XrSenseDataProviderBD provider,
XrFutureEXT future,
XrFutureCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrPersistSpatialAnchorCompleteBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorCompleteBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorCompleteBD", objects_info,
                                "Invalid NULL for XrFutureCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFutureCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPersistSpatialAnchorCompleteBD", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialAnchorCompleteBD",
                                objects_info,
                                "Command xrPersistSpatialAnchorCompleteBD param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPersistSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PersistSpatialAnchorCompleteBD(provider, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPersistSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrPersistSpatialAnchorCompleteBD(provider, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPersistSpatialAnchorCompleteBD(provider, future, completion);
}

XrResult GenValidUsageInputsXrUnpersistSpatialAnchorAsyncBD(
XrSenseDataProviderBD provider,
const XrSpatialAnchorUnpersistInfoBD* info,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrUnpersistSpatialAnchorAsyncBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorAsyncBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrSpatialAnchorUnpersistInfoBD \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorUnpersistInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUnpersistSpatialAnchorAsyncBD", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorAsyncBD",
                                objects_info,
                                "Command xrUnpersistSpatialAnchorAsyncBD param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialAnchorAsyncBD-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrUnpersistSpatialAnchorAsyncBD-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUnpersistSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSpatialAnchorUnpersistInfoBD* info,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UnpersistSpatialAnchorAsyncBD(provider, info, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUnpersistSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSpatialAnchorUnpersistInfoBD* info,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrUnpersistSpatialAnchorAsyncBD(provider, info, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUnpersistSpatialAnchorAsyncBD(provider, info, future);
}

XrResult GenValidUsageInputsXrUnpersistSpatialAnchorCompleteBD(
XrSenseDataProviderBD provider,
XrFutureEXT future,
XrFutureCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrUnpersistSpatialAnchorCompleteBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorCompleteBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorCompleteBD", objects_info,
                                "Invalid NULL for XrFutureCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFutureCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUnpersistSpatialAnchorCompleteBD", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialAnchorCompleteBD",
                                objects_info,
                                "Command xrUnpersistSpatialAnchorCompleteBD param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUnpersistSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UnpersistSpatialAnchorCompleteBD(provider, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUnpersistSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrUnpersistSpatialAnchorCompleteBD(provider, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUnpersistSpatialAnchorCompleteBD(provider, future, completion);
}


// ---- XR_BD_spatial_anchor_sharing extension commands
XrResult GenValidUsageInputsXrShareSpatialAnchorAsyncBD(
XrSenseDataProviderBD provider,
const XrSpatialAnchorShareInfoBD* info,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrShareSpatialAnchorAsyncBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpatialAnchorAsyncBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrSpatialAnchorShareInfoBD \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorShareInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrShareSpatialAnchorAsyncBD", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpatialAnchorAsyncBD",
                                objects_info,
                                "Command xrShareSpatialAnchorAsyncBD param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpatialAnchorAsyncBD-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrShareSpatialAnchorAsyncBD-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrShareSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSpatialAnchorShareInfoBD* info,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ShareSpatialAnchorAsyncBD(provider, info, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrShareSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSpatialAnchorShareInfoBD* info,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrShareSpatialAnchorAsyncBD(provider, info, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrShareSpatialAnchorAsyncBD(provider, info, future);
}

XrResult GenValidUsageInputsXrShareSpatialAnchorCompleteBD(
XrSenseDataProviderBD provider,
XrFutureEXT future,
XrFutureCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrShareSpatialAnchorCompleteBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpatialAnchorCompleteBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpatialAnchorCompleteBD", objects_info,
                                "Invalid NULL for XrFutureCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFutureCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrShareSpatialAnchorCompleteBD", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareSpatialAnchorCompleteBD",
                                objects_info,
                                "Command xrShareSpatialAnchorCompleteBD param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrShareSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ShareSpatialAnchorCompleteBD(provider, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrShareSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrShareSpatialAnchorCompleteBD(provider, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrShareSpatialAnchorCompleteBD(provider, future, completion);
}

XrResult GenValidUsageInputsXrDownloadSharedSpatialAnchorAsyncBD(
XrSenseDataProviderBD provider,
const XrSharedSpatialAnchorDownloadInfoBD* info,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrDownloadSharedSpatialAnchorAsyncBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDownloadSharedSpatialAnchorAsyncBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDownloadSharedSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDownloadSharedSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrSharedSpatialAnchorDownloadInfoBD \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSharedSpatialAnchorDownloadInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrDownloadSharedSpatialAnchorAsyncBD", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDownloadSharedSpatialAnchorAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDownloadSharedSpatialAnchorAsyncBD",
                                objects_info,
                                "Command xrDownloadSharedSpatialAnchorAsyncBD param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDownloadSharedSpatialAnchorAsyncBD-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDownloadSharedSpatialAnchorAsyncBD", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrDownloadSharedSpatialAnchorAsyncBD-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDownloadSharedSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSharedSpatialAnchorDownloadInfoBD* info,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DownloadSharedSpatialAnchorAsyncBD(provider, info, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDownloadSharedSpatialAnchorAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSharedSpatialAnchorDownloadInfoBD* info,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrDownloadSharedSpatialAnchorAsyncBD(provider, info, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDownloadSharedSpatialAnchorAsyncBD(provider, info, future);
}

XrResult GenValidUsageInputsXrDownloadSharedSpatialAnchorCompleteBD(
XrSenseDataProviderBD provider,
XrFutureEXT future,
XrFutureCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrDownloadSharedSpatialAnchorCompleteBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDownloadSharedSpatialAnchorCompleteBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDownloadSharedSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDownloadSharedSpatialAnchorCompleteBD", objects_info,
                                "Invalid NULL for XrFutureCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFutureCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrDownloadSharedSpatialAnchorCompleteBD", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrDownloadSharedSpatialAnchorCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDownloadSharedSpatialAnchorCompleteBD",
                                objects_info,
                                "Command xrDownloadSharedSpatialAnchorCompleteBD param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDownloadSharedSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DownloadSharedSpatialAnchorCompleteBD(provider, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDownloadSharedSpatialAnchorCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrDownloadSharedSpatialAnchorCompleteBD(provider, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDownloadSharedSpatialAnchorCompleteBD(provider, future, completion);
}


// ---- XR_BD_spatial_scene extension commands
XrResult GenValidUsageInputsXrCaptureSceneAsyncBD(
XrSenseDataProviderBD provider,
const XrSceneCaptureInfoBD* info,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrCaptureSceneAsyncBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCaptureSceneAsyncBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCaptureSceneAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCaptureSceneAsyncBD", objects_info,
                                "Invalid NULL for XrSceneCaptureInfoBD \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneCaptureInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCaptureSceneAsyncBD", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCaptureSceneAsyncBD-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCaptureSceneAsyncBD",
                                objects_info,
                                "Command xrCaptureSceneAsyncBD param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCaptureSceneAsyncBD-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCaptureSceneAsyncBD", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCaptureSceneAsyncBD-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCaptureSceneAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSceneCaptureInfoBD* info,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CaptureSceneAsyncBD(provider, info, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCaptureSceneAsyncBD(
    XrSenseDataProviderBD provider,
    const XrSceneCaptureInfoBD* info,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrCaptureSceneAsyncBD(provider, info, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCaptureSceneAsyncBD(provider, info, future);
}

XrResult GenValidUsageInputsXrCaptureSceneCompleteBD(
XrSenseDataProviderBD provider,
XrFutureEXT future,
XrFutureCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(provider, XR_OBJECT_TYPE_SENSE_DATA_PROVIDER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSenseDataProviderBDHandle(&provider);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSenseDataProviderBD handle \"provider\" ";
                oss << HandleToHexString(provider);
                CoreValidLogMessage(nullptr, "VUID-xrCaptureSceneCompleteBD-provider-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCaptureSceneCompleteBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCaptureSceneCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCaptureSceneCompleteBD", objects_info,
                                "Invalid NULL for XrFutureCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFutureCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCaptureSceneCompleteBD", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCaptureSceneCompleteBD-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCaptureSceneCompleteBD",
                                objects_info,
                                "Command xrCaptureSceneCompleteBD param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCaptureSceneCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_sensedataproviderbd_info.getWithInstanceInfo(provider);
        GenValidUsageXrHandleInfo *gen_sensedataproviderbd_info = info_with_instance.first;
        (void)gen_sensedataproviderbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CaptureSceneCompleteBD(provider, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCaptureSceneCompleteBD(
    XrSenseDataProviderBD provider,
    XrFutureEXT future,
    XrFutureCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrCaptureSceneCompleteBD(provider, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCaptureSceneCompleteBD(provider, future, completion);
}


// ---- XR_BD_spatial_audio_rendering extension commands
XrResult GenValidUsageInputsXrEnumerateSupportedAudioSampleRateBD(
XrSession session,
uint32_t sampleRateCapacityInput,
uint32_t* sampleRateCountOutput,
XrAudioSampleRateBD* sampleRates) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSupportedAudioSampleRateBD-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedAudioSampleRateBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when sampleRateCapacityInput is non-zero
        if (0 != sampleRateCapacityInput && nullptr == sampleRates) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedAudioSampleRateBD-sampleRates-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedAudioSampleRateBD",
                                objects_info,
                                "Command xrEnumerateSupportedAudioSampleRateBD param sampleRates is NULL, but sampleRateCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == sampleRateCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedAudioSampleRateBD-sampleRateCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedAudioSampleRateBD", objects_info,
                                "Invalid NULL for uint32_t \"sampleRateCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSupportedAudioSampleRateBD-sampleRateCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSupportedAudioSampleRateBD-sampleRates-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSupportedAudioSampleRateBD(
    XrSession session,
    uint32_t sampleRateCapacityInput,
    uint32_t* sampleRateCountOutput,
    XrAudioSampleRateBD* sampleRates) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumerateSupportedAudioSampleRateBD(session, sampleRateCapacityInput, sampleRateCountOutput, sampleRates);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSupportedAudioSampleRateBD(
    XrSession session,
    uint32_t sampleRateCapacityInput,
    uint32_t* sampleRateCountOutput,
    XrAudioSampleRateBD* sampleRates) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSupportedAudioSampleRateBD(session, sampleRateCapacityInput, sampleRateCountOutput, sampleRates);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSupportedAudioSampleRateBD(session, sampleRateCapacityInput, sampleRateCountOutput, sampleRates);
}

XrResult GenValidUsageInputsXrQueryFramesPerBufferRangeBD(
XrSession session,
XrAudioSampleRateBD sampleRate,
uint32_t* min,
uint32_t* max) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrQueryFramesPerBufferRangeBD-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryFramesPerBufferRangeBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrAudioSampleRateBD value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrQueryFramesPerBufferRangeBD", "xrQueryFramesPerBufferRangeBD", "sampleRate", objects_info, sampleRate)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrAudioSampleRateBD \"sampleRate\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(sampleRate));
            CoreValidLogMessage(gen_instance_info, "VUID-xrQueryFramesPerBufferRangeBD-sampleRate-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrQueryFramesPerBufferRangeBD",
                                objects_info, oss_enum.str());
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == min) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQueryFramesPerBufferRangeBD-min-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryFramesPerBufferRangeBD", objects_info,
                                "Invalid NULL for uint32_t \"min\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrQueryFramesPerBufferRangeBD-min-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == max) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQueryFramesPerBufferRangeBD-max-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryFramesPerBufferRangeBD", objects_info,
                                "Invalid NULL for uint32_t \"max\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrQueryFramesPerBufferRangeBD-max-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQueryFramesPerBufferRangeBD(
    XrSession session,
    XrAudioSampleRateBD sampleRate,
    uint32_t* min,
    uint32_t* max) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QueryFramesPerBufferRangeBD(session, sampleRate, min, max);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQueryFramesPerBufferRangeBD(
    XrSession session,
    XrAudioSampleRateBD sampleRate,
    uint32_t* min,
    uint32_t* max) {
    XrResult test_result = GenValidUsageInputsXrQueryFramesPerBufferRangeBD(session, sampleRate, min, max);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQueryFramesPerBufferRangeBD(session, sampleRate, min, max);
}

XrResult GenValidUsageInputsXrCreateSpatialAudioRendererBD(
XrSession session,
const XrSpatialAudioRendererCreateInfoBD* createInfo,
XrSpatialAudioRendererBD* renderer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAudioRendererBD-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAudioRendererBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAudioRendererBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAudioRendererBD", objects_info,
                                "Invalid NULL for XrSpatialAudioRendererCreateInfoBD \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAudioRendererCreateInfoBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAudioRendererBD", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAudioRendererBD-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAudioRendererBD",
                                objects_info,
                                "Command xrCreateSpatialAudioRendererBD param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == renderer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAudioRendererBD-renderer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAudioRendererBD", objects_info,
                                "Invalid NULL for XrSpatialAudioRendererBD \"renderer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAudioRendererBD(
    XrSession session,
    const XrSpatialAudioRendererCreateInfoBD* createInfo,
    XrSpatialAudioRendererBD* renderer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAudioRendererBD(session, createInfo, renderer);
        if (XR_SUCCESS == result && nullptr != renderer) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_spatialaudiorendererbd_info.insert(*renderer, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAudioRendererBD(
    XrSession session,
    const XrSpatialAudioRendererCreateInfoBD* createInfo,
    XrSpatialAudioRendererBD* renderer) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAudioRendererBD(session, createInfo, renderer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAudioRendererBD(session, createInfo, renderer);
}

XrResult GenValidUsageInputsXrDestroySpatialAudioRendererBD(
XrSpatialAudioRendererBD renderer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderer, XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAudioRendererBDHandle(&renderer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAudioRendererBD handle \"renderer\" ";
                oss << HandleToHexString(renderer);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpatialAudioRendererBD-renderer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpatialAudioRendererBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpatialAudioRendererBD(
    XrSpatialAudioRendererBD renderer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpatialAudioRendererBD(renderer);
        if (XR_SUCCEEDED(result)) {
            g_spatialaudiorendererbd_info.erase(renderer);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpatialAudioRendererBD(
    XrSpatialAudioRendererBD renderer) {
    XrResult test_result = GenValidUsageInputsXrDestroySpatialAudioRendererBD(renderer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpatialAudioRendererBD(renderer);
}

XrResult GenValidUsageInputsXrCreateSoundObstacleMaterialBD(
XrSpatialAudioRendererBD renderer,
const XrSoundObstacleMaterialConfigBD* config,
XrSoundObstacleMaterialBD* material) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderer, XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAudioRendererBDHandle(&renderer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAudioRendererBD handle \"renderer\" ";
                oss << HandleToHexString(renderer);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSoundObstacleMaterialBD-renderer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleMaterialBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == config) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObstacleMaterialBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleMaterialBD", objects_info,
                                "Invalid NULL for XrSoundObstacleMaterialConfigBD \"config\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSoundObstacleMaterialConfigBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSoundObstacleMaterialBD", objects_info,
                                                        true, true, config);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObstacleMaterialBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleMaterialBD",
                                objects_info,
                                "Command xrCreateSoundObstacleMaterialBD param config is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == material) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObstacleMaterialBD-material-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleMaterialBD", objects_info,
                                "Invalid NULL for XrSoundObstacleMaterialBD \"material\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSoundObstacleMaterialBD(
    XrSpatialAudioRendererBD renderer,
    const XrSoundObstacleMaterialConfigBD* config,
    XrSoundObstacleMaterialBD* material) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSoundObstacleMaterialBD(renderer, config, material);
        if (XR_SUCCESS == result && nullptr != material) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD;
            handle_info->direct_parent_handle = MakeHandleGeneric(renderer);
            g_soundobstaclematerialbd_info.insert(*material, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSoundObstacleMaterialBD(
    XrSpatialAudioRendererBD renderer,
    const XrSoundObstacleMaterialConfigBD* config,
    XrSoundObstacleMaterialBD* material) {
    XrResult test_result = GenValidUsageInputsXrCreateSoundObstacleMaterialBD(renderer, config, material);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSoundObstacleMaterialBD(renderer, config, material);
}

XrResult GenValidUsageInputsXrUpdateSoundObstacleMaterialConfigBD(
XrSoundObstacleMaterialBD material,
const XrSoundObstacleMaterialConfigBD* config) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(material, XR_OBJECT_TYPE_SOUND_OBSTACLE_MATERIAL_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundObstacleMaterialBDHandle(&material);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundObstacleMaterialBD handle \"material\" ";
                oss << HandleToHexString(material);
                CoreValidLogMessage(nullptr, "VUID-xrUpdateSoundObstacleMaterialConfigBD-material-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObstacleMaterialConfigBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundobstaclematerialbd_info.getWithInstanceInfo(material);
        GenValidUsageXrHandleInfo *gen_soundobstaclematerialbd_info = info_with_instance.first;
        (void)gen_soundobstaclematerialbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == config) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObstacleMaterialConfigBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObstacleMaterialConfigBD", objects_info,
                                "Invalid NULL for XrSoundObstacleMaterialConfigBD \"config\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSoundObstacleMaterialConfigBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSoundObstacleMaterialConfigBD", objects_info,
                                                        true, true, config);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObstacleMaterialConfigBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObstacleMaterialConfigBD",
                                objects_info,
                                "Command xrUpdateSoundObstacleMaterialConfigBD param config is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUpdateSoundObstacleMaterialConfigBD(
    XrSoundObstacleMaterialBD material,
    const XrSoundObstacleMaterialConfigBD* config) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundobstaclematerialbd_info.getWithInstanceInfo(material);
        GenValidUsageXrHandleInfo *gen_soundobstaclematerialbd_info = info_with_instance.first;
        (void)gen_soundobstaclematerialbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UpdateSoundObstacleMaterialConfigBD(material, config);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUpdateSoundObstacleMaterialConfigBD(
    XrSoundObstacleMaterialBD material,
    const XrSoundObstacleMaterialConfigBD* config) {
    XrResult test_result = GenValidUsageInputsXrUpdateSoundObstacleMaterialConfigBD(material, config);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUpdateSoundObstacleMaterialConfigBD(material, config);
}

XrResult GenValidUsageInputsXrDestroySoundObstacleMaterialBD(
XrSoundObstacleMaterialBD material) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(material, XR_OBJECT_TYPE_SOUND_OBSTACLE_MATERIAL_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundObstacleMaterialBDHandle(&material);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundObstacleMaterialBD handle \"material\" ";
                oss << HandleToHexString(material);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySoundObstacleMaterialBD-material-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySoundObstacleMaterialBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundobstaclematerialbd_info.getWithInstanceInfo(material);
        GenValidUsageXrHandleInfo *gen_soundobstaclematerialbd_info = info_with_instance.first;
        (void)gen_soundobstaclematerialbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySoundObstacleMaterialBD(
    XrSoundObstacleMaterialBD material) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundobstaclematerialbd_info.getWithInstanceInfo(material);
        GenValidUsageXrHandleInfo *gen_soundobstaclematerialbd_info = info_with_instance.first;
        (void)gen_soundobstaclematerialbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySoundObstacleMaterialBD(material);
        if (XR_SUCCEEDED(result)) {
            g_soundobstaclematerialbd_info.erase(material);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySoundObstacleMaterialBD(
    XrSoundObstacleMaterialBD material) {
    XrResult test_result = GenValidUsageInputsXrDestroySoundObstacleMaterialBD(material);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySoundObstacleMaterialBD(material);
}

XrResult GenValidUsageInputsXrCreateSoundObstacleBD(
XrSpatialAudioRendererBD renderer,
const XrSoundObstacleConfigBD* config,
const XrSoundTriangleMeshBD* mesh,
XrSoundObstacleBD* soundObstacle) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderer, XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAudioRendererBDHandle(&renderer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAudioRendererBD handle \"renderer\" ";
                oss << HandleToHexString(renderer);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSoundObstacleBD-renderer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == config) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObstacleBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleBD", objects_info,
                                "Invalid NULL for XrSoundObstacleConfigBD \"config\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSoundObstacleConfigBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSoundObstacleBD", objects_info,
                                                        true, true, config);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObstacleBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleBD",
                                objects_info,
                                "Command xrCreateSoundObstacleBD param config is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == mesh) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObstacleBD-mesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleBD", objects_info,
                                "Invalid NULL for XrSoundTriangleMeshBD \"mesh\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSoundTriangleMeshBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSoundObstacleBD", objects_info,
                                                        true, true, mesh);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObstacleBD-mesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleBD",
                                objects_info,
                                "Command xrCreateSoundObstacleBD param mesh is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == soundObstacle) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObstacleBD-soundObstacle-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObstacleBD", objects_info,
                                "Invalid NULL for XrSoundObstacleBD \"soundObstacle\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSoundObstacleBD(
    XrSpatialAudioRendererBD renderer,
    const XrSoundObstacleConfigBD* config,
    const XrSoundTriangleMeshBD* mesh,
    XrSoundObstacleBD* soundObstacle) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSoundObstacleBD(renderer, config, mesh, soundObstacle);
        if (XR_SUCCESS == result && nullptr != soundObstacle) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD;
            handle_info->direct_parent_handle = MakeHandleGeneric(renderer);
            g_soundobstaclebd_info.insert(*soundObstacle, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSoundObstacleBD(
    XrSpatialAudioRendererBD renderer,
    const XrSoundObstacleConfigBD* config,
    const XrSoundTriangleMeshBD* mesh,
    XrSoundObstacleBD* soundObstacle) {
    XrResult test_result = GenValidUsageInputsXrCreateSoundObstacleBD(renderer, config, mesh, soundObstacle);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSoundObstacleBD(renderer, config, mesh, soundObstacle);
}

XrResult GenValidUsageInputsXrUpdateSoundObstacleConfigBD(
XrSoundObstacleBD soundObstacle,
const XrSoundObstacleConfigBD* config,
const XrSoundTriangleMeshBD* mesh,
XrSoundObstacleFlagsBD flags) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(soundObstacle, XR_OBJECT_TYPE_SOUND_OBSTACLE_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundObstacleBDHandle(&soundObstacle);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundObstacleBD handle \"soundObstacle\" ";
                oss << HandleToHexString(soundObstacle);
                CoreValidLogMessage(nullptr, "VUID-xrUpdateSoundObstacleConfigBD-soundObstacle-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObstacleConfigBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundobstaclebd_info.getWithInstanceInfo(soundObstacle);
        GenValidUsageXrHandleInfo *gen_soundobstaclebd_info = info_with_instance.first;
        (void)gen_soundobstaclebd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrSoundObstacleConfigBD is valid
        if (nullptr != config) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSoundObstacleConfigBD",
                                                            objects_info, false, true, config);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObstacleConfigBD-config-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObstacleConfigBD",
                                    objects_info,
                                    "Command xrUpdateSoundObstacleConfigBD param config is invalid");
                return xr_result;
            }
        }
        // Validate that the structure XrSoundTriangleMeshBD is valid
        if (nullptr != mesh) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSoundObstacleConfigBD",
                                                            objects_info, false, true, mesh);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObstacleConfigBD-mesh-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObstacleConfigBD",
                                    objects_info,
                                    "Command xrUpdateSoundObstacleConfigBD param mesh is invalid");
                return xr_result;
            }
        }
        ValidateXrFlagsResult sound_obstacle_flags_bd_result = ValidateXrSoundObstacleFlagsBD(flags);
        // Flags must be non-zero in this case.
        if (VALIDATE_XR_FLAGS_ZERO == sound_obstacle_flags_bd_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObstacleConfigBD-flags-requiredbitmask",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObstacleConfigBD",
                                objects_info, "XrSoundObstacleFlagsBD \"flags\" flag must be non-zero");
            return XR_ERROR_VALIDATION_FAILURE;
        } else if (VALIDATE_XR_FLAGS_SUCCESS != sound_obstacle_flags_bd_result) {
            // Otherwise, flags must be valid.
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrSoundObstacleFlagsBD \"flags\" flag value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(flags));
            oss_enum <<" contains illegal bit";
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObstacleConfigBD-flags-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObstacleConfigBD",
                                objects_info, oss_enum.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUpdateSoundObstacleConfigBD(
    XrSoundObstacleBD soundObstacle,
    const XrSoundObstacleConfigBD* config,
    const XrSoundTriangleMeshBD* mesh,
    XrSoundObstacleFlagsBD flags) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundobstaclebd_info.getWithInstanceInfo(soundObstacle);
        GenValidUsageXrHandleInfo *gen_soundobstaclebd_info = info_with_instance.first;
        (void)gen_soundobstaclebd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UpdateSoundObstacleConfigBD(soundObstacle, config, mesh, flags);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUpdateSoundObstacleConfigBD(
    XrSoundObstacleBD soundObstacle,
    const XrSoundObstacleConfigBD* config,
    const XrSoundTriangleMeshBD* mesh,
    XrSoundObstacleFlagsBD flags) {
    XrResult test_result = GenValidUsageInputsXrUpdateSoundObstacleConfigBD(soundObstacle, config, mesh, flags);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUpdateSoundObstacleConfigBD(soundObstacle, config, mesh, flags);
}

XrResult GenValidUsageInputsXrDestroySoundObstacleBD(
XrSoundObstacleBD soundObstacle) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(soundObstacle, XR_OBJECT_TYPE_SOUND_OBSTACLE_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundObstacleBDHandle(&soundObstacle);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundObstacleBD handle \"soundObstacle\" ";
                oss << HandleToHexString(soundObstacle);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySoundObstacleBD-soundObstacle-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySoundObstacleBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundobstaclebd_info.getWithInstanceInfo(soundObstacle);
        GenValidUsageXrHandleInfo *gen_soundobstaclebd_info = info_with_instance.first;
        (void)gen_soundobstaclebd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySoundObstacleBD(
    XrSoundObstacleBD soundObstacle) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundobstaclebd_info.getWithInstanceInfo(soundObstacle);
        GenValidUsageXrHandleInfo *gen_soundobstaclebd_info = info_with_instance.first;
        (void)gen_soundobstaclebd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySoundObstacleBD(soundObstacle);
        if (XR_SUCCEEDED(result)) {
            g_soundobstaclebd_info.erase(soundObstacle);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySoundObstacleBD(
    XrSoundObstacleBD soundObstacle) {
    XrResult test_result = GenValidUsageInputsXrDestroySoundObstacleBD(soundObstacle);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySoundObstacleBD(soundObstacle);
}

XrResult GenValidUsageInputsXrCreateSoundObjectBD(
XrSpatialAudioRendererBD renderer,
const XrSoundObjectConfigBD* config,
XrSoundObjectBD* soundObject) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderer, XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAudioRendererBDHandle(&renderer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAudioRendererBD handle \"renderer\" ";
                oss << HandleToHexString(renderer);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSoundObjectBD-renderer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObjectBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == config) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObjectBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObjectBD", objects_info,
                                "Invalid NULL for XrSoundObjectConfigBD \"config\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSoundObjectConfigBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSoundObjectBD", objects_info,
                                                        true, true, config);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObjectBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObjectBD",
                                objects_info,
                                "Command xrCreateSoundObjectBD param config is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == soundObject) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundObjectBD-soundObject-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundObjectBD", objects_info,
                                "Invalid NULL for XrSoundObjectBD \"soundObject\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSoundObjectBD(
    XrSpatialAudioRendererBD renderer,
    const XrSoundObjectConfigBD* config,
    XrSoundObjectBD* soundObject) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSoundObjectBD(renderer, config, soundObject);
        if (XR_SUCCESS == result && nullptr != soundObject) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD;
            handle_info->direct_parent_handle = MakeHandleGeneric(renderer);
            g_soundobjectbd_info.insert(*soundObject, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSoundObjectBD(
    XrSpatialAudioRendererBD renderer,
    const XrSoundObjectConfigBD* config,
    XrSoundObjectBD* soundObject) {
    XrResult test_result = GenValidUsageInputsXrCreateSoundObjectBD(renderer, config, soundObject);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSoundObjectBD(renderer, config, soundObject);
}

XrResult GenValidUsageInputsXrUpdateSoundObjectConfigBD(
XrSoundObjectBD soundObject,
const XrSoundObjectConfigBD* config,
XrSoundObjectFlagsBD flags) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(soundObject, XR_OBJECT_TYPE_SOUND_OBJECT_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundObjectBDHandle(&soundObject);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundObjectBD handle \"soundObject\" ";
                oss << HandleToHexString(soundObject);
                CoreValidLogMessage(nullptr, "VUID-xrUpdateSoundObjectConfigBD-soundObject-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObjectConfigBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundobjectbd_info.getWithInstanceInfo(soundObject);
        GenValidUsageXrHandleInfo *gen_soundobjectbd_info = info_with_instance.first;
        (void)gen_soundobjectbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == config) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObjectConfigBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObjectConfigBD", objects_info,
                                "Invalid NULL for XrSoundObjectConfigBD \"config\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSoundObjectConfigBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSoundObjectConfigBD", objects_info,
                                                        true, true, config);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObjectConfigBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObjectConfigBD",
                                objects_info,
                                "Command xrUpdateSoundObjectConfigBD param config is invalid");
            return xr_result;
        }
        ValidateXrFlagsResult sound_object_flags_bd_result = ValidateXrSoundObjectFlagsBD(flags);
        // Flags must be non-zero in this case.
        if (VALIDATE_XR_FLAGS_ZERO == sound_object_flags_bd_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObjectConfigBD-flags-requiredbitmask",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObjectConfigBD",
                                objects_info, "XrSoundObjectFlagsBD \"flags\" flag must be non-zero");
            return XR_ERROR_VALIDATION_FAILURE;
        } else if (VALIDATE_XR_FLAGS_SUCCESS != sound_object_flags_bd_result) {
            // Otherwise, flags must be valid.
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrSoundObjectFlagsBD \"flags\" flag value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(flags));
            oss_enum <<" contains illegal bit";
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundObjectConfigBD-flags-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundObjectConfigBD",
                                objects_info, oss_enum.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUpdateSoundObjectConfigBD(
    XrSoundObjectBD soundObject,
    const XrSoundObjectConfigBD* config,
    XrSoundObjectFlagsBD flags) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundobjectbd_info.getWithInstanceInfo(soundObject);
        GenValidUsageXrHandleInfo *gen_soundobjectbd_info = info_with_instance.first;
        (void)gen_soundobjectbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UpdateSoundObjectConfigBD(soundObject, config, flags);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUpdateSoundObjectConfigBD(
    XrSoundObjectBD soundObject,
    const XrSoundObjectConfigBD* config,
    XrSoundObjectFlagsBD flags) {
    XrResult test_result = GenValidUsageInputsXrUpdateSoundObjectConfigBD(soundObject, config, flags);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUpdateSoundObjectConfigBD(soundObject, config, flags);
}

XrResult GenValidUsageInputsXrSubmitSoundObjectBufferBD(
XrSoundObjectBD soundObject,
const XrAudioBufferBD* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(soundObject, XR_OBJECT_TYPE_SOUND_OBJECT_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundObjectBDHandle(&soundObject);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundObjectBD handle \"soundObject\" ";
                oss << HandleToHexString(soundObject);
                CoreValidLogMessage(nullptr, "VUID-xrSubmitSoundObjectBufferBD-soundObject-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitSoundObjectBufferBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundobjectbd_info.getWithInstanceInfo(soundObject);
        GenValidUsageXrHandleInfo *gen_soundobjectbd_info = info_with_instance.first;
        (void)gen_soundobjectbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitSoundObjectBufferBD-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitSoundObjectBufferBD", objects_info,
                                "Invalid NULL for XrAudioBufferBD \"buffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrAudioBufferBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSubmitSoundObjectBufferBD", objects_info,
                                                        true, true, buffer);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitSoundObjectBufferBD-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitSoundObjectBufferBD",
                                objects_info,
                                "Command xrSubmitSoundObjectBufferBD param buffer is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSubmitSoundObjectBufferBD(
    XrSoundObjectBD soundObject,
    const XrAudioBufferBD* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundobjectbd_info.getWithInstanceInfo(soundObject);
        GenValidUsageXrHandleInfo *gen_soundobjectbd_info = info_with_instance.first;
        (void)gen_soundobjectbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SubmitSoundObjectBufferBD(soundObject, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSubmitSoundObjectBufferBD(
    XrSoundObjectBD soundObject,
    const XrAudioBufferBD* buffer) {
    XrResult test_result = GenValidUsageInputsXrSubmitSoundObjectBufferBD(soundObject, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSubmitSoundObjectBufferBD(soundObject, buffer);
}

XrResult GenValidUsageInputsXrDestroySoundObjectBD(
XrSoundObjectBD soundObject) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(soundObject, XR_OBJECT_TYPE_SOUND_OBJECT_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundObjectBDHandle(&soundObject);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundObjectBD handle \"soundObject\" ";
                oss << HandleToHexString(soundObject);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySoundObjectBD-soundObject-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySoundObjectBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundobjectbd_info.getWithInstanceInfo(soundObject);
        GenValidUsageXrHandleInfo *gen_soundobjectbd_info = info_with_instance.first;
        (void)gen_soundobjectbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySoundObjectBD(
    XrSoundObjectBD soundObject) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundobjectbd_info.getWithInstanceInfo(soundObject);
        GenValidUsageXrHandleInfo *gen_soundobjectbd_info = info_with_instance.first;
        (void)gen_soundobjectbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySoundObjectBD(soundObject);
        if (XR_SUCCEEDED(result)) {
            g_soundobjectbd_info.erase(soundObject);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySoundObjectBD(
    XrSoundObjectBD soundObject) {
    XrResult test_result = GenValidUsageInputsXrDestroySoundObjectBD(soundObject);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySoundObjectBD(soundObject);
}

XrResult GenValidUsageInputsXrCreateSoundFieldBD(
XrSpatialAudioRendererBD renderer,
const XrSoundFieldConfigBD* config,
XrSoundFieldBD* soundField) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderer, XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAudioRendererBDHandle(&renderer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAudioRendererBD handle \"renderer\" ";
                oss << HandleToHexString(renderer);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSoundFieldBD-renderer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundFieldBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == config) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundFieldBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundFieldBD", objects_info,
                                "Invalid NULL for XrSoundFieldConfigBD \"config\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSoundFieldConfigBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSoundFieldBD", objects_info,
                                                        true, true, config);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundFieldBD-config-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundFieldBD",
                                objects_info,
                                "Command xrCreateSoundFieldBD param config is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == soundField) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSoundFieldBD-soundField-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSoundFieldBD", objects_info,
                                "Invalid NULL for XrSoundFieldBD \"soundField\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSoundFieldBD(
    XrSpatialAudioRendererBD renderer,
    const XrSoundFieldConfigBD* config,
    XrSoundFieldBD* soundField) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSoundFieldBD(renderer, config, soundField);
        if (XR_SUCCESS == result && nullptr != soundField) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD;
            handle_info->direct_parent_handle = MakeHandleGeneric(renderer);
            g_soundfieldbd_info.insert(*soundField, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSoundFieldBD(
    XrSpatialAudioRendererBD renderer,
    const XrSoundFieldConfigBD* config,
    XrSoundFieldBD* soundField) {
    XrResult test_result = GenValidUsageInputsXrCreateSoundFieldBD(renderer, config, soundField);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSoundFieldBD(renderer, config, soundField);
}

XrResult GenValidUsageInputsXrUpdateSoundFieldConfigBD(
XrSoundFieldBD soundField,
const XrSoundFieldConfigBD* config,
XrSoundFieldFlagsBD flags) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(soundField, XR_OBJECT_TYPE_SOUND_FIELD_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundFieldBDHandle(&soundField);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundFieldBD handle \"soundField\" ";
                oss << HandleToHexString(soundField);
                CoreValidLogMessage(nullptr, "VUID-xrUpdateSoundFieldConfigBD-soundField-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundFieldConfigBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundfieldbd_info.getWithInstanceInfo(soundField);
        GenValidUsageXrHandleInfo *gen_soundfieldbd_info = info_with_instance.first;
        (void)gen_soundfieldbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrSoundFieldConfigBD is valid
        if (nullptr != config) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrUpdateSoundFieldConfigBD",
                                                            objects_info, false, true, config);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundFieldConfigBD-config-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundFieldConfigBD",
                                    objects_info,
                                    "Command xrUpdateSoundFieldConfigBD param config is invalid");
                return xr_result;
            }
        }
        ValidateXrFlagsResult sound_field_flags_bd_result = ValidateXrSoundFieldFlagsBD(flags);
        // Flags must be non-zero in this case.
        if (VALIDATE_XR_FLAGS_ZERO == sound_field_flags_bd_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundFieldConfigBD-flags-requiredbitmask",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundFieldConfigBD",
                                objects_info, "XrSoundFieldFlagsBD \"flags\" flag must be non-zero");
            return XR_ERROR_VALIDATION_FAILURE;
        } else if (VALIDATE_XR_FLAGS_SUCCESS != sound_field_flags_bd_result) {
            // Otherwise, flags must be valid.
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrSoundFieldFlagsBD \"flags\" flag value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(flags));
            oss_enum <<" contains illegal bit";
            CoreValidLogMessage(gen_instance_info, "VUID-xrUpdateSoundFieldConfigBD-flags-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUpdateSoundFieldConfigBD",
                                objects_info, oss_enum.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUpdateSoundFieldConfigBD(
    XrSoundFieldBD soundField,
    const XrSoundFieldConfigBD* config,
    XrSoundFieldFlagsBD flags) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundfieldbd_info.getWithInstanceInfo(soundField);
        GenValidUsageXrHandleInfo *gen_soundfieldbd_info = info_with_instance.first;
        (void)gen_soundfieldbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UpdateSoundFieldConfigBD(soundField, config, flags);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUpdateSoundFieldConfigBD(
    XrSoundFieldBD soundField,
    const XrSoundFieldConfigBD* config,
    XrSoundFieldFlagsBD flags) {
    XrResult test_result = GenValidUsageInputsXrUpdateSoundFieldConfigBD(soundField, config, flags);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUpdateSoundFieldConfigBD(soundField, config, flags);
}

XrResult GenValidUsageInputsXrSubmitSoundFieldBufferBD(
XrSoundFieldBD soundField,
const XrAudioBufferBD* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(soundField, XR_OBJECT_TYPE_SOUND_FIELD_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundFieldBDHandle(&soundField);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundFieldBD handle \"soundField\" ";
                oss << HandleToHexString(soundField);
                CoreValidLogMessage(nullptr, "VUID-xrSubmitSoundFieldBufferBD-soundField-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitSoundFieldBufferBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundfieldbd_info.getWithInstanceInfo(soundField);
        GenValidUsageXrHandleInfo *gen_soundfieldbd_info = info_with_instance.first;
        (void)gen_soundfieldbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitSoundFieldBufferBD-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitSoundFieldBufferBD", objects_info,
                                "Invalid NULL for XrAudioBufferBD \"buffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrAudioBufferBD is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSubmitSoundFieldBufferBD", objects_info,
                                                        true, true, buffer);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSubmitSoundFieldBufferBD-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSubmitSoundFieldBufferBD",
                                objects_info,
                                "Command xrSubmitSoundFieldBufferBD param buffer is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSubmitSoundFieldBufferBD(
    XrSoundFieldBD soundField,
    const XrAudioBufferBD* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundfieldbd_info.getWithInstanceInfo(soundField);
        GenValidUsageXrHandleInfo *gen_soundfieldbd_info = info_with_instance.first;
        (void)gen_soundfieldbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SubmitSoundFieldBufferBD(soundField, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSubmitSoundFieldBufferBD(
    XrSoundFieldBD soundField,
    const XrAudioBufferBD* buffer) {
    XrResult test_result = GenValidUsageInputsXrSubmitSoundFieldBufferBD(soundField, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSubmitSoundFieldBufferBD(soundField, buffer);
}

XrResult GenValidUsageInputsXrDestroySoundFieldBD(
XrSoundFieldBD soundField) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(soundField, XR_OBJECT_TYPE_SOUND_FIELD_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSoundFieldBDHandle(&soundField);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSoundFieldBD handle \"soundField\" ";
                oss << HandleToHexString(soundField);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySoundFieldBD-soundField-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySoundFieldBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_soundfieldbd_info.getWithInstanceInfo(soundField);
        GenValidUsageXrHandleInfo *gen_soundfieldbd_info = info_with_instance.first;
        (void)gen_soundfieldbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySoundFieldBD(
    XrSoundFieldBD soundField) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_soundfieldbd_info.getWithInstanceInfo(soundField);
        GenValidUsageXrHandleInfo *gen_soundfieldbd_info = info_with_instance.first;
        (void)gen_soundfieldbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySoundFieldBD(soundField);
        if (XR_SUCCEEDED(result)) {
            g_soundfieldbd_info.erase(soundField);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySoundFieldBD(
    XrSoundFieldBD soundField) {
    XrResult test_result = GenValidUsageInputsXrDestroySoundFieldBD(soundField);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySoundFieldBD(soundField);
}

XrResult GenValidUsageInputsXrWaitAudioPeriodBD(
XrSpatialAudioRendererBD renderer,
XrDuration timeout) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderer, XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAudioRendererBDHandle(&renderer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAudioRendererBD handle \"renderer\" ";
                oss << HandleToHexString(renderer);
                CoreValidLogMessage(nullptr, "VUID-xrWaitAudioPeriodBD-renderer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrWaitAudioPeriodBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrWaitAudioPeriodBD(
    XrSpatialAudioRendererBD renderer,
    XrDuration timeout) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->WaitAudioPeriodBD(renderer, timeout);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrWaitAudioPeriodBD(
    XrSpatialAudioRendererBD renderer,
    XrDuration timeout) {
    XrResult test_result = GenValidUsageInputsXrWaitAudioPeriodBD(renderer, timeout);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrWaitAudioPeriodBD(renderer, timeout);
}

XrResult GenValidUsageInputsXrEndAudioPeriodBD(
XrSpatialAudioRendererBD renderer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(renderer, XR_OBJECT_TYPE_SPATIAL_AUDIO_RENDERER_BD);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialAudioRendererBDHandle(&renderer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialAudioRendererBD handle \"renderer\" ";
                oss << HandleToHexString(renderer);
                CoreValidLogMessage(nullptr, "VUID-xrEndAudioPeriodBD-renderer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEndAudioPeriodBD",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEndAudioPeriodBD(
    XrSpatialAudioRendererBD renderer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialaudiorendererbd_info.getWithInstanceInfo(renderer);
        GenValidUsageXrHandleInfo *gen_spatialaudiorendererbd_info = info_with_instance.first;
        (void)gen_spatialaudiorendererbd_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EndAudioPeriodBD(renderer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEndAudioPeriodBD(
    XrSpatialAudioRendererBD renderer) {
    XrResult test_result = GenValidUsageInputsXrEndAudioPeriodBD(renderer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEndAudioPeriodBD(renderer);
}


// ---- XR_EXT_plane_detection extension commands
XrResult GenValidUsageInputsXrCreatePlaneDetectorEXT(
XrSession session,
const XrPlaneDetectorCreateInfoEXT* createInfo,
XrPlaneDetectorEXT* planeDetector) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreatePlaneDetectorEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePlaneDetectorEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePlaneDetectorEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePlaneDetectorEXT", objects_info,
                                "Invalid NULL for XrPlaneDetectorCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPlaneDetectorCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreatePlaneDetectorEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePlaneDetectorEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePlaneDetectorEXT",
                                objects_info,
                                "Command xrCreatePlaneDetectorEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == planeDetector) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePlaneDetectorEXT-planeDetector-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePlaneDetectorEXT", objects_info,
                                "Invalid NULL for XrPlaneDetectorEXT \"planeDetector\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreatePlaneDetectorEXT(
    XrSession session,
    const XrPlaneDetectorCreateInfoEXT* createInfo,
    XrPlaneDetectorEXT* planeDetector) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreatePlaneDetectorEXT(session, createInfo, planeDetector);
        if (XR_SUCCESS == result && nullptr != planeDetector) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_planedetectorext_info.insert(*planeDetector, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreatePlaneDetectorEXT(
    XrSession session,
    const XrPlaneDetectorCreateInfoEXT* createInfo,
    XrPlaneDetectorEXT* planeDetector) {
    XrResult test_result = GenValidUsageInputsXrCreatePlaneDetectorEXT(session, createInfo, planeDetector);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreatePlaneDetectorEXT(session, createInfo, planeDetector);
}

XrResult GenValidUsageInputsXrDestroyPlaneDetectorEXT(
XrPlaneDetectorEXT planeDetector) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(planeDetector, XR_OBJECT_TYPE_PLANE_DETECTOR_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPlaneDetectorEXTHandle(&planeDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPlaneDetectorEXT handle \"planeDetector\" ";
                oss << HandleToHexString(planeDetector);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyPlaneDetectorEXT-planeDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyPlaneDetectorEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyPlaneDetectorEXT(
    XrPlaneDetectorEXT planeDetector) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyPlaneDetectorEXT(planeDetector);
        if (XR_SUCCEEDED(result)) {
            g_planedetectorext_info.erase(planeDetector);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyPlaneDetectorEXT(
    XrPlaneDetectorEXT planeDetector) {
    XrResult test_result = GenValidUsageInputsXrDestroyPlaneDetectorEXT(planeDetector);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyPlaneDetectorEXT(planeDetector);
}

XrResult GenValidUsageInputsXrBeginPlaneDetectionEXT(
XrPlaneDetectorEXT planeDetector,
const XrPlaneDetectorBeginInfoEXT* beginInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(planeDetector, XR_OBJECT_TYPE_PLANE_DETECTOR_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPlaneDetectorEXTHandle(&planeDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPlaneDetectorEXT handle \"planeDetector\" ";
                oss << HandleToHexString(planeDetector);
                CoreValidLogMessage(nullptr, "VUID-xrBeginPlaneDetectionEXT-planeDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrBeginPlaneDetectionEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == beginInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrBeginPlaneDetectionEXT-beginInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrBeginPlaneDetectionEXT", objects_info,
                                "Invalid NULL for XrPlaneDetectorBeginInfoEXT \"beginInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPlaneDetectorBeginInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrBeginPlaneDetectionEXT", objects_info,
                                                        true, true, beginInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrBeginPlaneDetectionEXT-beginInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrBeginPlaneDetectionEXT",
                                objects_info,
                                "Command xrBeginPlaneDetectionEXT param beginInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrBeginPlaneDetectionEXT(
    XrPlaneDetectorEXT planeDetector,
    const XrPlaneDetectorBeginInfoEXT* beginInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->BeginPlaneDetectionEXT(planeDetector, beginInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrBeginPlaneDetectionEXT(
    XrPlaneDetectorEXT planeDetector,
    const XrPlaneDetectorBeginInfoEXT* beginInfo) {
    XrResult test_result = GenValidUsageInputsXrBeginPlaneDetectionEXT(planeDetector, beginInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrBeginPlaneDetectionEXT(planeDetector, beginInfo);
}

XrResult GenValidUsageInputsXrGetPlaneDetectionStateEXT(
XrPlaneDetectorEXT planeDetector,
XrPlaneDetectionStateEXT* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(planeDetector, XR_OBJECT_TYPE_PLANE_DETECTOR_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPlaneDetectorEXTHandle(&planeDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPlaneDetectorEXT handle \"planeDetector\" ";
                oss << HandleToHexString(planeDetector);
                CoreValidLogMessage(nullptr, "VUID-xrGetPlaneDetectionStateEXT-planeDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlaneDetectionStateEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPlaneDetectionStateEXT-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlaneDetectionStateEXT", objects_info,
                                "Invalid NULL for XrPlaneDetectionStateEXT \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Make sure the enum type XrPlaneDetectionStateEXT value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetPlaneDetectionStateEXT", "xrGetPlaneDetectionStateEXT", "state", objects_info, *state)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrPlaneDetectionStateEXT \"state\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(*state));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPlaneDetectionStateEXT-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetPlaneDetectionStateEXT",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetPlaneDetectionStateEXT(
    XrPlaneDetectorEXT planeDetector,
    XrPlaneDetectionStateEXT* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetPlaneDetectionStateEXT(planeDetector, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetPlaneDetectionStateEXT(
    XrPlaneDetectorEXT planeDetector,
    XrPlaneDetectionStateEXT* state) {
    XrResult test_result = GenValidUsageInputsXrGetPlaneDetectionStateEXT(planeDetector, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetPlaneDetectionStateEXT(planeDetector, state);
}

XrResult GenValidUsageInputsXrGetPlaneDetectionsEXT(
XrPlaneDetectorEXT planeDetector,
const XrPlaneDetectorGetInfoEXT* info,
XrPlaneDetectorLocationsEXT* locations) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(planeDetector, XR_OBJECT_TYPE_PLANE_DETECTOR_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPlaneDetectorEXTHandle(&planeDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPlaneDetectorEXT handle \"planeDetector\" ";
                oss << HandleToHexString(planeDetector);
                CoreValidLogMessage(nullptr, "VUID-xrGetPlaneDetectionsEXT-planeDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlaneDetectionsEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPlaneDetectionsEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlaneDetectionsEXT", objects_info,
                                "Invalid NULL for XrPlaneDetectorGetInfoEXT \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPlaneDetectorGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetPlaneDetectionsEXT", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPlaneDetectionsEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlaneDetectionsEXT",
                                objects_info,
                                "Command xrGetPlaneDetectionsEXT param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == locations) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPlaneDetectionsEXT-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlaneDetectionsEXT", objects_info,
                                "Invalid NULL for XrPlaneDetectorLocationsEXT \"locations\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPlaneDetectorLocationsEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetPlaneDetectionsEXT", objects_info,
                                                        false, true, locations);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPlaneDetectionsEXT-locations-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlaneDetectionsEXT",
                                objects_info,
                                "Command xrGetPlaneDetectionsEXT param locations is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetPlaneDetectionsEXT(
    XrPlaneDetectorEXT planeDetector,
    const XrPlaneDetectorGetInfoEXT* info,
    XrPlaneDetectorLocationsEXT* locations) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetPlaneDetectionsEXT(planeDetector, info, locations);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetPlaneDetectionsEXT(
    XrPlaneDetectorEXT planeDetector,
    const XrPlaneDetectorGetInfoEXT* info,
    XrPlaneDetectorLocationsEXT* locations) {
    XrResult test_result = GenValidUsageInputsXrGetPlaneDetectionsEXT(planeDetector, info, locations);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetPlaneDetectionsEXT(planeDetector, info, locations);
}

XrResult GenValidUsageInputsXrGetPlanePolygonBufferEXT(
XrPlaneDetectorEXT planeDetector,
uint64_t planeId,
uint32_t polygonBufferIndex,
XrPlaneDetectorPolygonBufferEXT* polygonBuffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(planeDetector, XR_OBJECT_TYPE_PLANE_DETECTOR_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPlaneDetectorEXTHandle(&planeDetector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPlaneDetectorEXT handle \"planeDetector\" ";
                oss << HandleToHexString(planeDetector);
                CoreValidLogMessage(nullptr, "VUID-xrGetPlanePolygonBufferEXT-planeDetector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlanePolygonBufferEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == polygonBuffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPlanePolygonBufferEXT-polygonBuffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlanePolygonBufferEXT", objects_info,
                                "Invalid NULL for XrPlaneDetectorPolygonBufferEXT \"polygonBuffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPlaneDetectorPolygonBufferEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetPlanePolygonBufferEXT", objects_info,
                                                        false, true, polygonBuffer);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPlanePolygonBufferEXT-polygonBuffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPlanePolygonBufferEXT",
                                objects_info,
                                "Command xrGetPlanePolygonBufferEXT param polygonBuffer is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetPlanePolygonBufferEXT(
    XrPlaneDetectorEXT planeDetector,
    uint64_t planeId,
    uint32_t polygonBufferIndex,
    XrPlaneDetectorPolygonBufferEXT* polygonBuffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_planedetectorext_info.getWithInstanceInfo(planeDetector);
        GenValidUsageXrHandleInfo *gen_planedetectorext_info = info_with_instance.first;
        (void)gen_planedetectorext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetPlanePolygonBufferEXT(planeDetector, planeId, polygonBufferIndex, polygonBuffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetPlanePolygonBufferEXT(
    XrPlaneDetectorEXT planeDetector,
    uint64_t planeId,
    uint32_t polygonBufferIndex,
    XrPlaneDetectorPolygonBufferEXT* polygonBuffer) {
    XrResult test_result = GenValidUsageInputsXrGetPlanePolygonBufferEXT(planeDetector, planeId, polygonBufferIndex, polygonBuffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetPlanePolygonBufferEXT(planeDetector, planeId, polygonBufferIndex, polygonBuffer);
}


// ---- XR_ANDROID_trackables extension commands
XrResult GenValidUsageInputsXrEnumerateSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSupportedTrackableTypesANDROID-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedTrackableTypesANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when trackableTypeCapacityInput is non-zero
        if (0 != trackableTypeCapacityInput && nullptr == trackableTypes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedTrackableTypesANDROID-trackableTypes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedTrackableTypesANDROID",
                                objects_info,
                                "Command xrEnumerateSupportedTrackableTypesANDROID param trackableTypes is NULL, but trackableTypeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == trackableTypeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedTrackableTypesANDROID-trackableTypeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedTrackableTypesANDROID", objects_info,
                                "Invalid NULL for uint32_t \"trackableTypeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSupportedTrackableTypesANDROID-trackableTypeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSupportedTrackableTypesANDROID-trackableTypes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSupportedTrackableTypesANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t trackableTypeCapacityInput,
    uint32_t* trackableTypeCountOutput,
    XrTrackableTypeANDROID* trackableTypes) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSupportedTrackableTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSupportedTrackableTypesANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t trackableTypeCapacityInput,
    uint32_t* trackableTypeCountOutput,
    XrTrackableTypeANDROID* trackableTypes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSupportedTrackableTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSupportedTrackableTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
}

XrResult GenValidUsageInputsXrEnumerateSupportedAnchorTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSupportedAnchorTrackableTypesANDROID-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedAnchorTrackableTypesANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when trackableTypeCapacityInput is non-zero
        if (0 != trackableTypeCapacityInput && nullptr == trackableTypes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedAnchorTrackableTypesANDROID-trackableTypes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedAnchorTrackableTypesANDROID",
                                objects_info,
                                "Command xrEnumerateSupportedAnchorTrackableTypesANDROID param trackableTypes is NULL, but trackableTypeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == trackableTypeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedAnchorTrackableTypesANDROID-trackableTypeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedAnchorTrackableTypesANDROID", objects_info,
                                "Invalid NULL for uint32_t \"trackableTypeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSupportedAnchorTrackableTypesANDROID-trackableTypeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSupportedAnchorTrackableTypesANDROID-trackableTypes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSupportedAnchorTrackableTypesANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t trackableTypeCapacityInput,
    uint32_t* trackableTypeCountOutput,
    XrTrackableTypeANDROID* trackableTypes) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSupportedAnchorTrackableTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSupportedAnchorTrackableTypesANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t trackableTypeCapacityInput,
    uint32_t* trackableTypeCountOutput,
    XrTrackableTypeANDROID* trackableTypes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSupportedAnchorTrackableTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSupportedAnchorTrackableTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
}

XrResult GenValidUsageInputsXrCreateTrackableTrackerANDROID(
XrSession session,
const XrTrackableTrackerCreateInfoANDROID* createInfo,
XrTrackableTrackerANDROID* trackableTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateTrackableTrackerANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableTrackerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTrackableTrackerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableTrackerANDROID", objects_info,
                                "Invalid NULL for XrTrackableTrackerCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableTrackerCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateTrackableTrackerANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTrackableTrackerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableTrackerANDROID",
                                objects_info,
                                "Command xrCreateTrackableTrackerANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == trackableTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTrackableTrackerANDROID-trackableTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableTrackerANDROID", objects_info,
                                "Invalid NULL for XrTrackableTrackerANDROID \"trackableTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateTrackableTrackerANDROID(
    XrSession session,
    const XrTrackableTrackerCreateInfoANDROID* createInfo,
    XrTrackableTrackerANDROID* trackableTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateTrackableTrackerANDROID(session, createInfo, trackableTracker);
        if (XR_SUCCESS == result && nullptr != trackableTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_trackabletrackerandroid_info.insert(*trackableTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateTrackableTrackerANDROID(
    XrSession session,
    const XrTrackableTrackerCreateInfoANDROID* createInfo,
    XrTrackableTrackerANDROID* trackableTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateTrackableTrackerANDROID(session, createInfo, trackableTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateTrackableTrackerANDROID(session, createInfo, trackableTracker);
}

XrResult GenValidUsageInputsXrDestroyTrackableTrackerANDROID(
XrTrackableTrackerANDROID trackableTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(trackableTracker, XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&trackableTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableTrackerANDROID handle \"trackableTracker\" ";
                oss << HandleToHexString(trackableTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyTrackableTrackerANDROID-trackableTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyTrackableTrackerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(trackableTracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyTrackableTrackerANDROID(
    XrTrackableTrackerANDROID trackableTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(trackableTracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyTrackableTrackerANDROID(trackableTracker);
        if (XR_SUCCEEDED(result)) {
            g_trackabletrackerandroid_info.erase(trackableTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyTrackableTrackerANDROID(
    XrTrackableTrackerANDROID trackableTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyTrackableTrackerANDROID(trackableTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyTrackableTrackerANDROID(trackableTracker);
}

XrResult GenValidUsageInputsXrGetAllTrackablesANDROID(
XrTrackableTrackerANDROID trackableTracker,
uint32_t trackableCapacityInput,
uint32_t* trackableCountOutput,
XrTrackableANDROID* trackables) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(trackableTracker, XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&trackableTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableTrackerANDROID handle \"trackableTracker\" ";
                oss << HandleToHexString(trackableTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetAllTrackablesANDROID-trackableTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAllTrackablesANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(trackableTracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when trackableCapacityInput is non-zero
        if (0 != trackableCapacityInput && nullptr == trackables) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetAllTrackablesANDROID-trackables-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAllTrackablesANDROID",
                                objects_info,
                                "Command xrGetAllTrackablesANDROID param trackables is NULL, but trackableCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == trackableCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetAllTrackablesANDROID-trackableCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAllTrackablesANDROID", objects_info,
                                "Invalid NULL for uint32_t \"trackableCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetAllTrackablesANDROID-trackableCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetAllTrackablesANDROID-trackables-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetAllTrackablesANDROID(
    XrTrackableTrackerANDROID trackableTracker,
    uint32_t trackableCapacityInput,
    uint32_t* trackableCountOutput,
    XrTrackableANDROID* trackables) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(trackableTracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetAllTrackablesANDROID(trackableTracker, trackableCapacityInput, trackableCountOutput, trackables);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetAllTrackablesANDROID(
    XrTrackableTrackerANDROID trackableTracker,
    uint32_t trackableCapacityInput,
    uint32_t* trackableCountOutput,
    XrTrackableANDROID* trackables) {
    XrResult test_result = GenValidUsageInputsXrGetAllTrackablesANDROID(trackableTracker, trackableCapacityInput, trackableCountOutput, trackables);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetAllTrackablesANDROID(trackableTracker, trackableCapacityInput, trackableCountOutput, trackables);
}

XrResult GenValidUsageInputsXrGetTrackablePlaneANDROID(
XrTrackableTrackerANDROID trackableTracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackablePlaneANDROID* planeOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(trackableTracker, XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&trackableTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableTrackerANDROID handle \"trackableTracker\" ";
                oss << HandleToHexString(trackableTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetTrackablePlaneANDROID-trackableTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackablePlaneANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(trackableTracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackablePlaneANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackablePlaneANDROID", objects_info,
                                "Invalid NULL for XrTrackableGetInfoANDROID \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackablePlaneANDROID", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackablePlaneANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackablePlaneANDROID",
                                objects_info,
                                "Command xrGetTrackablePlaneANDROID param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == planeOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackablePlaneANDROID-planeOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackablePlaneANDROID", objects_info,
                                "Invalid NULL for XrTrackablePlaneANDROID \"planeOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackablePlaneANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackablePlaneANDROID", objects_info,
                                                        false, true, planeOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackablePlaneANDROID-planeOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackablePlaneANDROID",
                                objects_info,
                                "Command xrGetTrackablePlaneANDROID param planeOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetTrackablePlaneANDROID(
    XrTrackableTrackerANDROID trackableTracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackablePlaneANDROID* planeOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(trackableTracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetTrackablePlaneANDROID(trackableTracker, getInfo, planeOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetTrackablePlaneANDROID(
    XrTrackableTrackerANDROID trackableTracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackablePlaneANDROID* planeOutput) {
    XrResult test_result = GenValidUsageInputsXrGetTrackablePlaneANDROID(trackableTracker, getInfo, planeOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetTrackablePlaneANDROID(trackableTracker, getInfo, planeOutput);
}

XrResult GenValidUsageInputsXrCreateAnchorSpaceANDROID(
XrSession session,
const XrAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateAnchorSpaceANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAnchorSpaceANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateAnchorSpaceANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAnchorSpaceANDROID", objects_info,
                                "Invalid NULL for XrAnchorSpaceCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrAnchorSpaceCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateAnchorSpaceANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateAnchorSpaceANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAnchorSpaceANDROID",
                                objects_info,
                                "Command xrCreateAnchorSpaceANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateAnchorSpaceANDROID-anchorOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateAnchorSpaceANDROID", objects_info,
                                "Invalid NULL for XrSpace \"anchorOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateAnchorSpaceANDROID(
    XrSession session,
    const XrAnchorSpaceCreateInfoANDROID* createInfo,
    XrSpace* anchorOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateAnchorSpaceANDROID(session, createInfo, anchorOutput);
        if (XR_SUCCESS == result && nullptr != anchorOutput) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*anchorOutput, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateAnchorSpaceANDROID(
    XrSession session,
    const XrAnchorSpaceCreateInfoANDROID* createInfo,
    XrSpace* anchorOutput) {
    XrResult test_result = GenValidUsageInputsXrCreateAnchorSpaceANDROID(session, createInfo, anchorOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateAnchorSpaceANDROID(session, createInfo, anchorOutput);
}


// ---- XR_ANDROID_eye_tracking extension commands
XrResult GenValidUsageInputsXrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateEyeTrackerANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEyeTrackerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEyeTrackerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEyeTrackerANDROID", objects_info,
                                "Invalid NULL for XrEyeTrackerCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEyeTrackerCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateEyeTrackerANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEyeTrackerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEyeTrackerANDROID",
                                objects_info,
                                "Command xrCreateEyeTrackerANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == eyeTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEyeTrackerANDROID-eyeTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEyeTrackerANDROID", objects_info,
                                "Invalid NULL for XrEyeTrackerANDROID \"eyeTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateEyeTrackerANDROID(
    XrSession session,
    const XrEyeTrackerCreateInfoANDROID* createInfo,
    XrEyeTrackerANDROID* eyeTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateEyeTrackerANDROID(session, createInfo, eyeTracker);
        if (XR_SUCCESS == result && nullptr != eyeTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_eyetrackerandroid_info.insert(*eyeTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateEyeTrackerANDROID(
    XrSession session,
    const XrEyeTrackerCreateInfoANDROID* createInfo,
    XrEyeTrackerANDROID* eyeTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateEyeTrackerANDROID(session, createInfo, eyeTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateEyeTrackerANDROID(session, createInfo, eyeTracker);
}

XrResult GenValidUsageInputsXrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(eyeTracker, XR_OBJECT_TYPE_EYE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEyeTrackerANDROIDHandle(&eyeTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEyeTrackerANDROID handle \"eyeTracker\" ";
                oss << HandleToHexString(eyeTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyEyeTrackerANDROID-eyeTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyEyeTrackerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_eyetrackerandroid_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerandroid_info = info_with_instance.first;
        (void)gen_eyetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyEyeTrackerANDROID(
    XrEyeTrackerANDROID eyeTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_eyetrackerandroid_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerandroid_info = info_with_instance.first;
        (void)gen_eyetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyEyeTrackerANDROID(eyeTracker);
        if (XR_SUCCEEDED(result)) {
            g_eyetrackerandroid_info.erase(eyeTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyEyeTrackerANDROID(
    XrEyeTrackerANDROID eyeTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyEyeTrackerANDROID(eyeTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyEyeTrackerANDROID(eyeTracker);
}

XrResult GenValidUsageInputsXrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(eyeTracker, XR_OBJECT_TYPE_EYE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEyeTrackerANDROIDHandle(&eyeTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEyeTrackerANDROID handle \"eyeTracker\" ";
                oss << HandleToHexString(eyeTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetFineTrackingEyesInfoANDROID-eyeTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFineTrackingEyesInfoANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_eyetrackerandroid_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerandroid_info = info_with_instance.first;
        (void)gen_eyetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFineTrackingEyesInfoANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFineTrackingEyesInfoANDROID", objects_info,
                                "Invalid NULL for XrEyesGetInfoANDROID \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEyesGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFineTrackingEyesInfoANDROID", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFineTrackingEyesInfoANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFineTrackingEyesInfoANDROID",
                                objects_info,
                                "Command xrGetFineTrackingEyesInfoANDROID param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == eyesOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFineTrackingEyesInfoANDROID-eyesOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFineTrackingEyesInfoANDROID", objects_info,
                                "Invalid NULL for XrEyesANDROID \"eyesOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEyesANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFineTrackingEyesInfoANDROID", objects_info,
                                                        false, true, eyesOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFineTrackingEyesInfoANDROID-eyesOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFineTrackingEyesInfoANDROID",
                                objects_info,
                                "Command xrGetFineTrackingEyesInfoANDROID param eyesOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFineTrackingEyesInfoANDROID(
    XrEyeTrackerANDROID eyeTracker,
    const XrEyesGetInfoANDROID* getInfo,
    XrEyesANDROID* eyesOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_eyetrackerandroid_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerandroid_info = info_with_instance.first;
        (void)gen_eyetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFineTrackingEyesInfoANDROID(eyeTracker, getInfo, eyesOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFineTrackingEyesInfoANDROID(
    XrEyeTrackerANDROID eyeTracker,
    const XrEyesGetInfoANDROID* getInfo,
    XrEyesANDROID* eyesOutput) {
    XrResult test_result = GenValidUsageInputsXrGetFineTrackingEyesInfoANDROID(eyeTracker, getInfo, eyesOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFineTrackingEyesInfoANDROID(eyeTracker, getInfo, eyesOutput);
}

XrResult GenValidUsageInputsXrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(eyeTracker, XR_OBJECT_TYPE_EYE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEyeTrackerANDROIDHandle(&eyeTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEyeTrackerANDROID handle \"eyeTracker\" ";
                oss << HandleToHexString(eyeTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetCoarseTrackingEyesInfoANDROID-eyeTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetCoarseTrackingEyesInfoANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_eyetrackerandroid_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerandroid_info = info_with_instance.first;
        (void)gen_eyetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetCoarseTrackingEyesInfoANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetCoarseTrackingEyesInfoANDROID", objects_info,
                                "Invalid NULL for XrEyesGetInfoANDROID \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEyesGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetCoarseTrackingEyesInfoANDROID", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetCoarseTrackingEyesInfoANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetCoarseTrackingEyesInfoANDROID",
                                objects_info,
                                "Command xrGetCoarseTrackingEyesInfoANDROID param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == eyesOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetCoarseTrackingEyesInfoANDROID-eyesOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetCoarseTrackingEyesInfoANDROID", objects_info,
                                "Invalid NULL for XrEyesANDROID \"eyesOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEyesANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetCoarseTrackingEyesInfoANDROID", objects_info,
                                                        false, true, eyesOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetCoarseTrackingEyesInfoANDROID-eyesOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetCoarseTrackingEyesInfoANDROID",
                                objects_info,
                                "Command xrGetCoarseTrackingEyesInfoANDROID param eyesOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetCoarseTrackingEyesInfoANDROID(
    XrEyeTrackerANDROID eyeTracker,
    const XrEyesGetInfoANDROID* getInfo,
    XrEyesANDROID* eyesOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_eyetrackerandroid_info.getWithInstanceInfo(eyeTracker);
        GenValidUsageXrHandleInfo *gen_eyetrackerandroid_info = info_with_instance.first;
        (void)gen_eyetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetCoarseTrackingEyesInfoANDROID(eyeTracker, getInfo, eyesOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetCoarseTrackingEyesInfoANDROID(
    XrEyeTrackerANDROID eyeTracker,
    const XrEyesGetInfoANDROID* getInfo,
    XrEyesANDROID* eyesOutput) {
    XrResult test_result = GenValidUsageInputsXrGetCoarseTrackingEyesInfoANDROID(eyeTracker, getInfo, eyesOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetCoarseTrackingEyesInfoANDROID(eyeTracker, getInfo, eyesOutput);
}


// ---- XR_ANDROID_device_anchor_persistence extension commands
XrResult GenValidUsageInputsXrEnumerateSupportedPersistenceAnchorTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSupportedPersistenceAnchorTypesANDROID-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedPersistenceAnchorTypesANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when trackableTypeCapacityInput is non-zero
        if (0 != trackableTypeCapacityInput && nullptr == trackableTypes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedPersistenceAnchorTypesANDROID-trackableTypes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedPersistenceAnchorTypesANDROID",
                                objects_info,
                                "Command xrEnumerateSupportedPersistenceAnchorTypesANDROID param trackableTypes is NULL, but trackableTypeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == trackableTypeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedPersistenceAnchorTypesANDROID-trackableTypeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedPersistenceAnchorTypesANDROID", objects_info,
                                "Invalid NULL for uint32_t \"trackableTypeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSupportedPersistenceAnchorTypesANDROID-trackableTypeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSupportedPersistenceAnchorTypesANDROID-trackableTypes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSupportedPersistenceAnchorTypesANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t trackableTypeCapacityInput,
    uint32_t* trackableTypeCountOutput,
    XrTrackableTypeANDROID* trackableTypes) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSupportedPersistenceAnchorTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSupportedPersistenceAnchorTypesANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t trackableTypeCapacityInput,
    uint32_t* trackableTypeCountOutput,
    XrTrackableTypeANDROID* trackableTypes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSupportedPersistenceAnchorTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSupportedPersistenceAnchorTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
}

XrResult GenValidUsageInputsXrCreateDeviceAnchorPersistenceANDROID(
XrSession session,
const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
XrDeviceAnchorPersistenceANDROID* outHandle) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateDeviceAnchorPersistenceANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateDeviceAnchorPersistenceANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateDeviceAnchorPersistenceANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateDeviceAnchorPersistenceANDROID", objects_info,
                                "Invalid NULL for XrDeviceAnchorPersistenceCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrDeviceAnchorPersistenceCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateDeviceAnchorPersistenceANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateDeviceAnchorPersistenceANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateDeviceAnchorPersistenceANDROID",
                                objects_info,
                                "Command xrCreateDeviceAnchorPersistenceANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outHandle) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateDeviceAnchorPersistenceANDROID-outHandle-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateDeviceAnchorPersistenceANDROID", objects_info,
                                "Invalid NULL for XrDeviceAnchorPersistenceANDROID \"outHandle\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateDeviceAnchorPersistenceANDROID(
    XrSession session,
    const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
    XrDeviceAnchorPersistenceANDROID* outHandle) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateDeviceAnchorPersistenceANDROID(session, createInfo, outHandle);
        if (XR_SUCCESS == result && nullptr != outHandle) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_deviceanchorpersistenceandroid_info.insert(*outHandle, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateDeviceAnchorPersistenceANDROID(
    XrSession session,
    const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
    XrDeviceAnchorPersistenceANDROID* outHandle) {
    XrResult test_result = GenValidUsageInputsXrCreateDeviceAnchorPersistenceANDROID(session, createInfo, outHandle);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateDeviceAnchorPersistenceANDROID(session, createInfo, outHandle);
}

XrResult GenValidUsageInputsXrDestroyDeviceAnchorPersistenceANDROID(
XrDeviceAnchorPersistenceANDROID handle) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handle, XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrDeviceAnchorPersistenceANDROIDHandle(&handle);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrDeviceAnchorPersistenceANDROID handle \"handle\" ";
                oss << HandleToHexString(handle);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyDeviceAnchorPersistenceANDROID-handle-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyDeviceAnchorPersistenceANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyDeviceAnchorPersistenceANDROID(
    XrDeviceAnchorPersistenceANDROID handle) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyDeviceAnchorPersistenceANDROID(handle);
        if (XR_SUCCEEDED(result)) {
            g_deviceanchorpersistenceandroid_info.erase(handle);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyDeviceAnchorPersistenceANDROID(
    XrDeviceAnchorPersistenceANDROID handle) {
    XrResult test_result = GenValidUsageInputsXrDestroyDeviceAnchorPersistenceANDROID(handle);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyDeviceAnchorPersistenceANDROID(handle);
}

XrResult GenValidUsageInputsXrPersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
XrUuidEXT* anchorIdOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handle, XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrDeviceAnchorPersistenceANDROIDHandle(&handle);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrDeviceAnchorPersistenceANDROID handle \"handle\" ";
                oss << HandleToHexString(handle);
                CoreValidLogMessage(nullptr, "VUID-xrPersistAnchorANDROID-handle-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistAnchorANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == persistedInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistAnchorANDROID-persistedInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistAnchorANDROID", objects_info,
                                "Invalid NULL for XrPersistedAnchorSpaceInfoANDROID \"persistedInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPersistedAnchorSpaceInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPersistAnchorANDROID", objects_info,
                                                        true, true, persistedInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistAnchorANDROID-persistedInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistAnchorANDROID",
                                objects_info,
                                "Command xrPersistAnchorANDROID param persistedInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorIdOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistAnchorANDROID-anchorIdOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistAnchorANDROID", objects_info,
                                "Invalid NULL for XrUuidEXT \"anchorIdOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrPersistAnchorANDROID-anchorIdOutput-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
    XrUuidEXT* anchorIdOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PersistAnchorANDROID(handle, persistedInfo, anchorIdOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
    XrUuidEXT* anchorIdOutput) {
    XrResult test_result = GenValidUsageInputsXrPersistAnchorANDROID(handle, persistedInfo, anchorIdOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPersistAnchorANDROID(handle, persistedInfo, anchorIdOutput);
}

XrResult GenValidUsageInputsXrGetAnchorPersistStateANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId,
XrAnchorPersistStateANDROID* persistState) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handle, XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrDeviceAnchorPersistenceANDROIDHandle(&handle);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrDeviceAnchorPersistenceANDROID handle \"handle\" ";
                oss << HandleToHexString(handle);
                CoreValidLogMessage(nullptr, "VUID-xrGetAnchorPersistStateANDROID-handle-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAnchorPersistStateANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetAnchorPersistStateANDROID-anchorId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAnchorPersistStateANDROID", objects_info,
                                "Invalid NULL for XrUuidEXT \"anchorId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetAnchorPersistStateANDROID-anchorId-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == persistState) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetAnchorPersistStateANDROID-persistState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAnchorPersistStateANDROID", objects_info,
                                "Invalid NULL for XrAnchorPersistStateANDROID \"persistState\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Make sure the enum type XrAnchorPersistStateANDROID value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetAnchorPersistStateANDROID", "xrGetAnchorPersistStateANDROID", "persistState", objects_info, *persistState)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrAnchorPersistStateANDROID \"persistState\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(*persistState));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetAnchorPersistStateANDROID-persistState-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetAnchorPersistStateANDROID",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetAnchorPersistStateANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    const XrUuidEXT* anchorId,
    XrAnchorPersistStateANDROID* persistState) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetAnchorPersistStateANDROID(handle, anchorId, persistState);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetAnchorPersistStateANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    const XrUuidEXT* anchorId,
    XrAnchorPersistStateANDROID* persistState) {
    XrResult test_result = GenValidUsageInputsXrGetAnchorPersistStateANDROID(handle, anchorId, persistState);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetAnchorPersistStateANDROID(handle, anchorId, persistState);
}

XrResult GenValidUsageInputsXrCreatePersistedAnchorSpaceANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handle, XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrDeviceAnchorPersistenceANDROIDHandle(&handle);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrDeviceAnchorPersistenceANDROID handle \"handle\" ";
                oss << HandleToHexString(handle);
                CoreValidLogMessage(nullptr, "VUID-xrCreatePersistedAnchorSpaceANDROID-handle-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePersistedAnchorSpaceANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePersistedAnchorSpaceANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePersistedAnchorSpaceANDROID", objects_info,
                                "Invalid NULL for XrPersistedAnchorSpaceCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPersistedAnchorSpaceCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreatePersistedAnchorSpaceANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePersistedAnchorSpaceANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePersistedAnchorSpaceANDROID",
                                objects_info,
                                "Command xrCreatePersistedAnchorSpaceANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePersistedAnchorSpaceANDROID-anchorOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePersistedAnchorSpaceANDROID", objects_info,
                                "Invalid NULL for XrSpace \"anchorOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreatePersistedAnchorSpaceANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
    XrSpace* anchorOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreatePersistedAnchorSpaceANDROID(handle, createInfo, anchorOutput);
        if (XR_SUCCESS == result && nullptr != anchorOutput) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID;
            handle_info->direct_parent_handle = MakeHandleGeneric(handle);
            g_space_info.insert(*anchorOutput, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreatePersistedAnchorSpaceANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
    XrSpace* anchorOutput) {
    XrResult test_result = GenValidUsageInputsXrCreatePersistedAnchorSpaceANDROID(handle, createInfo, anchorOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreatePersistedAnchorSpaceANDROID(handle, createInfo, anchorOutput);
}

XrResult GenValidUsageInputsXrEnumeratePersistedAnchorsANDROID(
XrDeviceAnchorPersistenceANDROID handle,
uint32_t anchorIdCapacityInput,
uint32_t* anchorIdCountOutput,
XrUuidEXT* anchorIds) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handle, XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrDeviceAnchorPersistenceANDROIDHandle(&handle);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrDeviceAnchorPersistenceANDROID handle \"handle\" ";
                oss << HandleToHexString(handle);
                CoreValidLogMessage(nullptr, "VUID-xrEnumeratePersistedAnchorsANDROID-handle-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePersistedAnchorsANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when anchorIdCapacityInput is non-zero
        if (0 != anchorIdCapacityInput && nullptr == anchorIds) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumeratePersistedAnchorsANDROID-anchorIds-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePersistedAnchorsANDROID",
                                objects_info,
                                "Command xrEnumeratePersistedAnchorsANDROID param anchorIds is NULL, but anchorIdCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorIdCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumeratePersistedAnchorsANDROID-anchorIdCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePersistedAnchorsANDROID", objects_info,
                                "Invalid NULL for uint32_t \"anchorIdCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumeratePersistedAnchorsANDROID-anchorIdCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrEnumeratePersistedAnchorsANDROID-anchorIds-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumeratePersistedAnchorsANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    uint32_t anchorIdCapacityInput,
    uint32_t* anchorIdCountOutput,
    XrUuidEXT* anchorIds) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->EnumeratePersistedAnchorsANDROID(handle, anchorIdCapacityInput, anchorIdCountOutput, anchorIds);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumeratePersistedAnchorsANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    uint32_t anchorIdCapacityInput,
    uint32_t* anchorIdCountOutput,
    XrUuidEXT* anchorIds) {
    XrResult test_result = GenValidUsageInputsXrEnumeratePersistedAnchorsANDROID(handle, anchorIdCapacityInput, anchorIdCountOutput, anchorIds);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumeratePersistedAnchorsANDROID(handle, anchorIdCapacityInput, anchorIdCountOutput, anchorIds);
}

XrResult GenValidUsageInputsXrUnpersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(handle, XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrDeviceAnchorPersistenceANDROIDHandle(&handle);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrDeviceAnchorPersistenceANDROID handle \"handle\" ";
                oss << HandleToHexString(handle);
                CoreValidLogMessage(nullptr, "VUID-xrUnpersistAnchorANDROID-handle-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistAnchorANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistAnchorANDROID-anchorId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistAnchorANDROID", objects_info,
                                "Invalid NULL for XrUuidEXT \"anchorId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrUnpersistAnchorANDROID-anchorId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUnpersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    const XrUuidEXT* anchorId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_deviceanchorpersistenceandroid_info.getWithInstanceInfo(handle);
        GenValidUsageXrHandleInfo *gen_deviceanchorpersistenceandroid_info = info_with_instance.first;
        (void)gen_deviceanchorpersistenceandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UnpersistAnchorANDROID(handle, anchorId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUnpersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID handle,
    const XrUuidEXT* anchorId) {
    XrResult test_result = GenValidUsageInputsXrUnpersistAnchorANDROID(handle, anchorId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUnpersistAnchorANDROID(handle, anchorId);
}


// ---- XR_ANDROID_face_tracking extension commands
XrResult GenValidUsageInputsXrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateFaceTrackerANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTrackerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerANDROID", objects_info,
                                "Invalid NULL for XrFaceTrackerCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceTrackerCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateFaceTrackerANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTrackerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerANDROID",
                                objects_info,
                                "Command xrCreateFaceTrackerANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == faceTracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFaceTrackerANDROID-faceTracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFaceTrackerANDROID", objects_info,
                                "Invalid NULL for XrFaceTrackerANDROID \"faceTracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateFaceTrackerANDROID(
    XrSession session,
    const XrFaceTrackerCreateInfoANDROID* createInfo,
    XrFaceTrackerANDROID* faceTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateFaceTrackerANDROID(session, createInfo, faceTracker);
        if (XR_SUCCESS == result && nullptr != faceTracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_facetrackerandroid_info.insert(*faceTracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateFaceTrackerANDROID(
    XrSession session,
    const XrFaceTrackerCreateInfoANDROID* createInfo,
    XrFaceTrackerANDROID* faceTracker) {
    XrResult test_result = GenValidUsageInputsXrCreateFaceTrackerANDROID(session, createInfo, faceTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateFaceTrackerANDROID(session, createInfo, faceTracker);
}

XrResult GenValidUsageInputsXrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(faceTracker, XR_OBJECT_TYPE_FACE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTrackerANDROIDHandle(&faceTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTrackerANDROID handle \"faceTracker\" ";
                oss << HandleToHexString(faceTracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyFaceTrackerANDROID-faceTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyFaceTrackerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetrackerandroid_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerandroid_info = info_with_instance.first;
        (void)gen_facetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID faceTracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetrackerandroid_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerandroid_info = info_with_instance.first;
        (void)gen_facetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyFaceTrackerANDROID(faceTracker);
        if (XR_SUCCEEDED(result)) {
            g_facetrackerandroid_info.erase(faceTracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID faceTracker) {
    XrResult test_result = GenValidUsageInputsXrDestroyFaceTrackerANDROID(faceTracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyFaceTrackerANDROID(faceTracker);
}

XrResult GenValidUsageInputsXrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(faceTracker, XR_OBJECT_TYPE_FACE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTrackerANDROIDHandle(&faceTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTrackerANDROID handle \"faceTracker\" ";
                oss << HandleToHexString(faceTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetFaceStateANDROID-faceTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceStateANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetrackerandroid_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerandroid_info = info_with_instance.first;
        (void)gen_facetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceStateANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceStateANDROID", objects_info,
                                "Invalid NULL for XrFaceStateGetInfoANDROID \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceStateGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFaceStateANDROID", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceStateANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceStateANDROID",
                                objects_info,
                                "Command xrGetFaceStateANDROID param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == faceStateOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceStateANDROID-faceStateOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceStateANDROID", objects_info,
                                "Invalid NULL for XrFaceStateANDROID \"faceStateOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFaceStateANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFaceStateANDROID", objects_info,
                                                        false, true, faceStateOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceStateANDROID-faceStateOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceStateANDROID",
                                objects_info,
                                "Command xrGetFaceStateANDROID param faceStateOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFaceStateANDROID(
    XrFaceTrackerANDROID faceTracker,
    const XrFaceStateGetInfoANDROID* getInfo,
    XrFaceStateANDROID* faceStateOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetrackerandroid_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerandroid_info = info_with_instance.first;
        (void)gen_facetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFaceStateANDROID(faceTracker, getInfo, faceStateOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFaceStateANDROID(
    XrFaceTrackerANDROID faceTracker,
    const XrFaceStateGetInfoANDROID* getInfo,
    XrFaceStateANDROID* faceStateOutput) {
    XrResult test_result = GenValidUsageInputsXrGetFaceStateANDROID(faceTracker, getInfo, faceStateOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFaceStateANDROID(faceTracker, getInfo, faceStateOutput);
}

XrResult GenValidUsageInputsXrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(faceTracker, XR_OBJECT_TYPE_FACE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFaceTrackerANDROIDHandle(&faceTracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFaceTrackerANDROID handle \"faceTracker\" ";
                oss << HandleToHexString(faceTracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetFaceCalibrationStateANDROID-faceTracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceCalibrationStateANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facetrackerandroid_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerandroid_info = info_with_instance.first;
        (void)gen_facetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == faceIsCalibratedOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFaceCalibrationStateANDROID-faceIsCalibratedOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFaceCalibrationStateANDROID", objects_info,
                                "Invalid NULL for XrBool32 \"faceIsCalibratedOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetFaceCalibrationStateANDROID-faceIsCalibratedOutput-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID faceTracker,
    XrBool32* faceIsCalibratedOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facetrackerandroid_info.getWithInstanceInfo(faceTracker);
        GenValidUsageXrHandleInfo *gen_facetrackerandroid_info = info_with_instance.first;
        (void)gen_facetrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFaceCalibrationStateANDROID(faceTracker, faceIsCalibratedOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID faceTracker,
    XrBool32* faceIsCalibratedOutput) {
    XrResult test_result = GenValidUsageInputsXrGetFaceCalibrationStateANDROID(faceTracker, faceIsCalibratedOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFaceCalibrationStateANDROID(faceTracker, faceIsCalibratedOutput);
}


// ---- XR_ANDROID_passthrough_camera_state extension commands
XrResult GenValidUsageInputsXrGetPassthroughCameraStateANDROID(
XrSession session,
const XrPassthroughCameraStateGetInfoANDROID* getInfo,
XrPassthroughCameraStateANDROID* cameraStateOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetPassthroughCameraStateANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPassthroughCameraStateANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPassthroughCameraStateANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPassthroughCameraStateANDROID", objects_info,
                                "Invalid NULL for XrPassthroughCameraStateGetInfoANDROID \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughCameraStateGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetPassthroughCameraStateANDROID", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPassthroughCameraStateANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPassthroughCameraStateANDROID",
                                objects_info,
                                "Command xrGetPassthroughCameraStateANDROID param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == cameraStateOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPassthroughCameraStateANDROID-cameraStateOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPassthroughCameraStateANDROID", objects_info,
                                "Invalid NULL for XrPassthroughCameraStateANDROID \"cameraStateOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Make sure the enum type XrPassthroughCameraStateANDROID value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrGetPassthroughCameraStateANDROID", "xrGetPassthroughCameraStateANDROID", "cameraStateOutput", objects_info, *cameraStateOutput)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrPassthroughCameraStateANDROID \"cameraStateOutput\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(*cameraStateOutput));
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPassthroughCameraStateANDROID-cameraStateOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrGetPassthroughCameraStateANDROID",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetPassthroughCameraStateANDROID(
    XrSession session,
    const XrPassthroughCameraStateGetInfoANDROID* getInfo,
    XrPassthroughCameraStateANDROID* cameraStateOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetPassthroughCameraStateANDROID(session, getInfo, cameraStateOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetPassthroughCameraStateANDROID(
    XrSession session,
    const XrPassthroughCameraStateGetInfoANDROID* getInfo,
    XrPassthroughCameraStateANDROID* cameraStateOutput) {
    XrResult test_result = GenValidUsageInputsXrGetPassthroughCameraStateANDROID(session, getInfo, cameraStateOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetPassthroughCameraStateANDROID(session, getInfo, cameraStateOutput);
}


// ---- XR_ANDROID_composition_layer_passthrough_mesh extension commands
XrResult GenValidUsageInputsXrCreatePassthroughLayerANDROID(
XrSession session,
const XrPassthroughLayerCreateInfoANDROID* createInfo,
XrPassthroughLayerANDROID* layer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreatePassthroughLayerANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughLayerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughLayerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughLayerANDROID", objects_info,
                                "Invalid NULL for XrPassthroughLayerCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughLayerCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreatePassthroughLayerANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughLayerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughLayerANDROID",
                                objects_info,
                                "Command xrCreatePassthroughLayerANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == layer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreatePassthroughLayerANDROID-layer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreatePassthroughLayerANDROID", objects_info,
                                "Invalid NULL for XrPassthroughLayerANDROID \"layer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreatePassthroughLayerANDROID(
    XrSession session,
    const XrPassthroughLayerCreateInfoANDROID* createInfo,
    XrPassthroughLayerANDROID* layer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreatePassthroughLayerANDROID(session, createInfo, layer);
        if (XR_SUCCESS == result && nullptr != layer) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_passthroughlayerandroid_info.insert(*layer, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreatePassthroughLayerANDROID(
    XrSession session,
    const XrPassthroughLayerCreateInfoANDROID* createInfo,
    XrPassthroughLayerANDROID* layer) {
    XrResult test_result = GenValidUsageInputsXrCreatePassthroughLayerANDROID(session, createInfo, layer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreatePassthroughLayerANDROID(session, createInfo, layer);
}

XrResult GenValidUsageInputsXrDestroyPassthroughLayerANDROID(
XrPassthroughLayerANDROID layer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(layer, XR_OBJECT_TYPE_PASSTHROUGH_LAYER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerANDROIDHandle(&layer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughLayerANDROID handle \"layer\" ";
                oss << HandleToHexString(layer);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyPassthroughLayerANDROID-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyPassthroughLayerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughlayerandroid_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerandroid_info = info_with_instance.first;
        (void)gen_passthroughlayerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyPassthroughLayerANDROID(
    XrPassthroughLayerANDROID layer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughlayerandroid_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerandroid_info = info_with_instance.first;
        (void)gen_passthroughlayerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyPassthroughLayerANDROID(layer);
        if (XR_SUCCEEDED(result)) {
            g_passthroughlayerandroid_info.erase(layer);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyPassthroughLayerANDROID(
    XrPassthroughLayerANDROID layer) {
    XrResult test_result = GenValidUsageInputsXrDestroyPassthroughLayerANDROID(layer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyPassthroughLayerANDROID(layer);
}

XrResult GenValidUsageInputsXrSetPassthroughLayerMeshANDROID(
XrPassthroughLayerANDROID layer,
const XrPassthroughLayerMeshANDROID* mesh) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(layer, XR_OBJECT_TYPE_PASSTHROUGH_LAYER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrPassthroughLayerANDROIDHandle(&layer);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrPassthroughLayerANDROID handle \"layer\" ";
                oss << HandleToHexString(layer);
                CoreValidLogMessage(nullptr, "VUID-xrSetPassthroughLayerMeshANDROID-layer-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetPassthroughLayerMeshANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_passthroughlayerandroid_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerandroid_info = info_with_instance.first;
        (void)gen_passthroughlayerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == mesh) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetPassthroughLayerMeshANDROID-mesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetPassthroughLayerMeshANDROID", objects_info,
                                "Invalid NULL for XrPassthroughLayerMeshANDROID \"mesh\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPassthroughLayerMeshANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetPassthroughLayerMeshANDROID", objects_info,
                                                        true, true, mesh);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetPassthroughLayerMeshANDROID-mesh-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetPassthroughLayerMeshANDROID",
                                objects_info,
                                "Command xrSetPassthroughLayerMeshANDROID param mesh is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetPassthroughLayerMeshANDROID(
    XrPassthroughLayerANDROID layer,
    const XrPassthroughLayerMeshANDROID* mesh) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_passthroughlayerandroid_info.getWithInstanceInfo(layer);
        GenValidUsageXrHandleInfo *gen_passthroughlayerandroid_info = info_with_instance.first;
        (void)gen_passthroughlayerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetPassthroughLayerMeshANDROID(layer, mesh);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetPassthroughLayerMeshANDROID(
    XrPassthroughLayerANDROID layer,
    const XrPassthroughLayerMeshANDROID* mesh) {
    XrResult test_result = GenValidUsageInputsXrSetPassthroughLayerMeshANDROID(layer, mesh);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetPassthroughLayerMeshANDROID(layer, mesh);
}


// ---- XR_ANDROID_raycast extension commands
XrResult GenValidUsageInputsXrEnumerateRaycastSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateRaycastSupportedTrackableTypesANDROID-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRaycastSupportedTrackableTypesANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when trackableTypeCapacityInput is non-zero
        if (0 != trackableTypeCapacityInput && nullptr == trackableTypes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateRaycastSupportedTrackableTypesANDROID-trackableTypes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRaycastSupportedTrackableTypesANDROID",
                                objects_info,
                                "Command xrEnumerateRaycastSupportedTrackableTypesANDROID param trackableTypes is NULL, but trackableTypeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == trackableTypeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateRaycastSupportedTrackableTypesANDROID-trackableTypeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateRaycastSupportedTrackableTypesANDROID", objects_info,
                                "Invalid NULL for uint32_t \"trackableTypeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateRaycastSupportedTrackableTypesANDROID-trackableTypeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateRaycastSupportedTrackableTypesANDROID-trackableTypes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateRaycastSupportedTrackableTypesANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t trackableTypeCapacityInput,
    uint32_t* trackableTypeCountOutput,
    XrTrackableTypeANDROID* trackableTypes) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateRaycastSupportedTrackableTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateRaycastSupportedTrackableTypesANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t trackableTypeCapacityInput,
    uint32_t* trackableTypeCountOutput,
    XrTrackableTypeANDROID* trackableTypes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateRaycastSupportedTrackableTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateRaycastSupportedTrackableTypesANDROID(instance, systemId, trackableTypeCapacityInput, trackableTypeCountOutput, trackableTypes);
}

XrResult GenValidUsageInputsXrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrRaycastANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRaycastANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == rayInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRaycastANDROID-rayInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRaycastANDROID", objects_info,
                                "Invalid NULL for XrRaycastInfoANDROID \"rayInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRaycastInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRaycastANDROID", objects_info,
                                                        true, true, rayInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRaycastANDROID-rayInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRaycastANDROID",
                                objects_info,
                                "Command xrRaycastANDROID param rayInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == results) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRaycastANDROID-results-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRaycastANDROID", objects_info,
                                "Invalid NULL for XrRaycastHitResultsANDROID \"results\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRaycastHitResultsANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRaycastANDROID", objects_info,
                                                        false, true, results);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRaycastANDROID-results-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRaycastANDROID",
                                objects_info,
                                "Command xrRaycastANDROID param results is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRaycastANDROID(
    XrSession session,
    const XrRaycastInfoANDROID* rayInfo,
    XrRaycastHitResultsANDROID* results) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RaycastANDROID(session, rayInfo, results);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRaycastANDROID(
    XrSession session,
    const XrRaycastInfoANDROID* rayInfo,
    XrRaycastHitResultsANDROID* results) {
    XrResult test_result = GenValidUsageInputsXrRaycastANDROID(session, rayInfo, results);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRaycastANDROID(session, rayInfo, results);
}


// ---- XR_ANDROID_performance_metrics extension commands
XrResult GenValidUsageInputsXrEnumeratePerformanceMetricsCounterPathsANDROID(
XrInstance instance,
uint32_t counterPathCapacityInput,
uint32_t* counterPathCountOutput,
XrPath* counterPaths) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumeratePerformanceMetricsCounterPathsANDROID-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePerformanceMetricsCounterPathsANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when counterPathCapacityInput is non-zero
        if (0 != counterPathCapacityInput && nullptr == counterPaths) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumeratePerformanceMetricsCounterPathsANDROID-counterPaths-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePerformanceMetricsCounterPathsANDROID",
                                objects_info,
                                "Command xrEnumeratePerformanceMetricsCounterPathsANDROID param counterPaths is NULL, but counterPathCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == counterPathCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumeratePerformanceMetricsCounterPathsANDROID-counterPathCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumeratePerformanceMetricsCounterPathsANDROID", objects_info,
                                "Invalid NULL for uint32_t \"counterPathCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumeratePerformanceMetricsCounterPathsANDROID-counterPathCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrEnumeratePerformanceMetricsCounterPathsANDROID-counterPaths-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumeratePerformanceMetricsCounterPathsANDROID(
    XrInstance instance,
    uint32_t counterPathCapacityInput,
    uint32_t* counterPathCountOutput,
    XrPath* counterPaths) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumeratePerformanceMetricsCounterPathsANDROID(instance, counterPathCapacityInput, counterPathCountOutput, counterPaths);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumeratePerformanceMetricsCounterPathsANDROID(
    XrInstance instance,
    uint32_t counterPathCapacityInput,
    uint32_t* counterPathCountOutput,
    XrPath* counterPaths) {
    XrResult test_result = GenValidUsageInputsXrEnumeratePerformanceMetricsCounterPathsANDROID(instance, counterPathCapacityInput, counterPathCountOutput, counterPaths);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumeratePerformanceMetricsCounterPathsANDROID(instance, counterPathCapacityInput, counterPathCountOutput, counterPaths);
}

XrResult GenValidUsageInputsXrSetPerformanceMetricsStateANDROID(
XrSession session,
const XrPerformanceMetricsStateANDROID* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetPerformanceMetricsStateANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetPerformanceMetricsStateANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetPerformanceMetricsStateANDROID-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetPerformanceMetricsStateANDROID", objects_info,
                                "Invalid NULL for XrPerformanceMetricsStateANDROID \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPerformanceMetricsStateANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetPerformanceMetricsStateANDROID", objects_info,
                                                        true, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetPerformanceMetricsStateANDROID-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetPerformanceMetricsStateANDROID",
                                objects_info,
                                "Command xrSetPerformanceMetricsStateANDROID param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetPerformanceMetricsStateANDROID(
    XrSession session,
    const XrPerformanceMetricsStateANDROID* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetPerformanceMetricsStateANDROID(session, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetPerformanceMetricsStateANDROID(
    XrSession session,
    const XrPerformanceMetricsStateANDROID* state) {
    XrResult test_result = GenValidUsageInputsXrSetPerformanceMetricsStateANDROID(session, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetPerformanceMetricsStateANDROID(session, state);
}

XrResult GenValidUsageInputsXrGetPerformanceMetricsStateANDROID(
XrSession session,
XrPerformanceMetricsStateANDROID* state) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetPerformanceMetricsStateANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPerformanceMetricsStateANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == state) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPerformanceMetricsStateANDROID-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPerformanceMetricsStateANDROID", objects_info,
                                "Invalid NULL for XrPerformanceMetricsStateANDROID \"state\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPerformanceMetricsStateANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetPerformanceMetricsStateANDROID", objects_info,
                                                        false, true, state);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetPerformanceMetricsStateANDROID-state-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetPerformanceMetricsStateANDROID",
                                objects_info,
                                "Command xrGetPerformanceMetricsStateANDROID param state is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetPerformanceMetricsStateANDROID(
    XrSession session,
    XrPerformanceMetricsStateANDROID* state) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetPerformanceMetricsStateANDROID(session, state);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetPerformanceMetricsStateANDROID(
    XrSession session,
    XrPerformanceMetricsStateANDROID* state) {
    XrResult test_result = GenValidUsageInputsXrGetPerformanceMetricsStateANDROID(session, state);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetPerformanceMetricsStateANDROID(session, state);
}

XrResult GenValidUsageInputsXrQueryPerformanceMetricsCounterANDROID(
XrSession session,
XrPath counterPath,
XrPerformanceMetricsCounterANDROID* counter) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrQueryPerformanceMetricsCounterANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryPerformanceMetricsCounterANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == counter) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQueryPerformanceMetricsCounterANDROID-counter-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryPerformanceMetricsCounterANDROID", objects_info,
                                "Invalid NULL for XrPerformanceMetricsCounterANDROID \"counter\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPerformanceMetricsCounterANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQueryPerformanceMetricsCounterANDROID", objects_info,
                                                        false, true, counter);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQueryPerformanceMetricsCounterANDROID-counter-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQueryPerformanceMetricsCounterANDROID",
                                objects_info,
                                "Command xrQueryPerformanceMetricsCounterANDROID param counter is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQueryPerformanceMetricsCounterANDROID(
    XrSession session,
    XrPath counterPath,
    XrPerformanceMetricsCounterANDROID* counter) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QueryPerformanceMetricsCounterANDROID(session, counterPath, counter);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQueryPerformanceMetricsCounterANDROID(
    XrSession session,
    XrPath counterPath,
    XrPerformanceMetricsCounterANDROID* counter) {
    XrResult test_result = GenValidUsageInputsXrQueryPerformanceMetricsCounterANDROID(session, counterPath, counter);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQueryPerformanceMetricsCounterANDROID(session, counterPath, counter);
}


// ---- XR_ANDROID_trackables_object extension commands
XrResult GenValidUsageInputsXrGetTrackableObjectANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableObjectANDROID* objectOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableTrackerANDROID handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetTrackableObjectANDROID-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableObjectANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableObjectANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableObjectANDROID", objects_info,
                                "Invalid NULL for XrTrackableGetInfoANDROID \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackableObjectANDROID", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableObjectANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableObjectANDROID",
                                objects_info,
                                "Command xrGetTrackableObjectANDROID param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == objectOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableObjectANDROID-objectOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableObjectANDROID", objects_info,
                                "Invalid NULL for XrTrackableObjectANDROID \"objectOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableObjectANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackableObjectANDROID", objects_info,
                                                        false, true, objectOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableObjectANDROID-objectOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableObjectANDROID",
                                objects_info,
                                "Command xrGetTrackableObjectANDROID param objectOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetTrackableObjectANDROID(
    XrTrackableTrackerANDROID tracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackableObjectANDROID* objectOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetTrackableObjectANDROID(tracker, getInfo, objectOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetTrackableObjectANDROID(
    XrTrackableTrackerANDROID tracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackableObjectANDROID* objectOutput) {
    XrResult test_result = GenValidUsageInputsXrGetTrackableObjectANDROID(tracker, getInfo, objectOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetTrackableObjectANDROID(tracker, getInfo, objectOutput);
}


// ---- XR_EXT_future extension commands
XrResult GenValidUsageInputsXrPollFutureEXT(
XrInstance instance,
const XrFuturePollInfoEXT* pollInfo,
XrFuturePollResultEXT* pollResult) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrPollFutureEXT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPollFutureEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == pollInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPollFutureEXT-pollInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPollFutureEXT", objects_info,
                                "Invalid NULL for XrFuturePollInfoEXT \"pollInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFuturePollInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPollFutureEXT", objects_info,
                                                        true, true, pollInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPollFutureEXT-pollInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPollFutureEXT",
                                objects_info,
                                "Command xrPollFutureEXT param pollInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == pollResult) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPollFutureEXT-pollResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPollFutureEXT", objects_info,
                                "Invalid NULL for XrFuturePollResultEXT \"pollResult\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFuturePollResultEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPollFutureEXT", objects_info,
                                                        false, true, pollResult);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPollFutureEXT-pollResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPollFutureEXT",
                                objects_info,
                                "Command xrPollFutureEXT param pollResult is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPollFutureEXT(
    XrInstance instance,
    const XrFuturePollInfoEXT* pollInfo,
    XrFuturePollResultEXT* pollResult) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->PollFutureEXT(instance, pollInfo, pollResult);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPollFutureEXT(
    XrInstance instance,
    const XrFuturePollInfoEXT* pollInfo,
    XrFuturePollResultEXT* pollResult) {
    XrResult test_result = GenValidUsageInputsXrPollFutureEXT(instance, pollInfo, pollResult);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPollFutureEXT(instance, pollInfo, pollResult);
}

XrResult GenValidUsageInputsXrCancelFutureEXT(
XrInstance instance,
const XrFutureCancelInfoEXT* cancelInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrCancelFutureEXT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCancelFutureEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == cancelInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCancelFutureEXT-cancelInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCancelFutureEXT", objects_info,
                                "Invalid NULL for XrFutureCancelInfoEXT \"cancelInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFutureCancelInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCancelFutureEXT", objects_info,
                                                        true, true, cancelInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCancelFutureEXT-cancelInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCancelFutureEXT",
                                objects_info,
                                "Command xrCancelFutureEXT param cancelInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCancelFutureEXT(
    XrInstance instance,
    const XrFutureCancelInfoEXT* cancelInfo) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->CancelFutureEXT(instance, cancelInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCancelFutureEXT(
    XrInstance instance,
    const XrFutureCancelInfoEXT* cancelInfo) {
    XrResult test_result = GenValidUsageInputsXrCancelFutureEXT(instance, cancelInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCancelFutureEXT(instance, cancelInfo);
}


// ---- XR_ML_user_calibration extension commands
XrResult GenValidUsageInputsXrEnableUserCalibrationEventsML(
XrInstance instance,
const XrUserCalibrationEnableEventsInfoML* enableInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnableUserCalibrationEventsML-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnableUserCalibrationEventsML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == enableInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnableUserCalibrationEventsML-enableInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnableUserCalibrationEventsML", objects_info,
                                "Invalid NULL for XrUserCalibrationEnableEventsInfoML \"enableInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrUserCalibrationEnableEventsInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrEnableUserCalibrationEventsML", objects_info,
                                                        true, true, enableInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnableUserCalibrationEventsML-enableInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnableUserCalibrationEventsML",
                                objects_info,
                                "Command xrEnableUserCalibrationEventsML param enableInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnableUserCalibrationEventsML(
    XrInstance instance,
    const XrUserCalibrationEnableEventsInfoML* enableInfo) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnableUserCalibrationEventsML(instance, enableInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnableUserCalibrationEventsML(
    XrInstance instance,
    const XrUserCalibrationEnableEventsInfoML* enableInfo) {
    XrResult test_result = GenValidUsageInputsXrEnableUserCalibrationEventsML(instance, enableInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnableUserCalibrationEventsML(instance, enableInfo);
}


// ---- XR_ML_system_notifications extension commands
XrResult GenValidUsageInputsXrSetSystemNotificationsML(
XrInstance instance,
const XrSystemNotificationsSetInfoML* info) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrSetSystemNotificationsML-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetSystemNotificationsML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetSystemNotificationsML-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetSystemNotificationsML", objects_info,
                                "Invalid NULL for XrSystemNotificationsSetInfoML \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSystemNotificationsSetInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetSystemNotificationsML", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetSystemNotificationsML-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetSystemNotificationsML",
                                objects_info,
                                "Command xrSetSystemNotificationsML param info is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetSystemNotificationsML(
    XrInstance instance,
    const XrSystemNotificationsSetInfoML* info) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->SetSystemNotificationsML(instance, info);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetSystemNotificationsML(
    XrInstance instance,
    const XrSystemNotificationsSetInfoML* info) {
    XrResult test_result = GenValidUsageInputsXrSetSystemNotificationsML(instance, info);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetSystemNotificationsML(instance, info);
}


// ---- XR_ML_world_mesh_detection extension commands
XrResult GenValidUsageInputsXrCreateWorldMeshDetectorML(
XrSession session,
const XrWorldMeshDetectorCreateInfoML* createInfo,
XrWorldMeshDetectorML* detector) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateWorldMeshDetectorML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateWorldMeshDetectorML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateWorldMeshDetectorML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateWorldMeshDetectorML", objects_info,
                                "Invalid NULL for XrWorldMeshDetectorCreateInfoML \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshDetectorCreateInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateWorldMeshDetectorML", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateWorldMeshDetectorML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateWorldMeshDetectorML",
                                objects_info,
                                "Command xrCreateWorldMeshDetectorML param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == detector) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateWorldMeshDetectorML-detector-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateWorldMeshDetectorML", objects_info,
                                "Invalid NULL for XrWorldMeshDetectorML \"detector\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateWorldMeshDetectorML(
    XrSession session,
    const XrWorldMeshDetectorCreateInfoML* createInfo,
    XrWorldMeshDetectorML* detector) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateWorldMeshDetectorML(session, createInfo, detector);
        if (XR_SUCCESS == result && nullptr != detector) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_worldmeshdetectorml_info.insert(*detector, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateWorldMeshDetectorML(
    XrSession session,
    const XrWorldMeshDetectorCreateInfoML* createInfo,
    XrWorldMeshDetectorML* detector) {
    XrResult test_result = GenValidUsageInputsXrCreateWorldMeshDetectorML(session, createInfo, detector);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateWorldMeshDetectorML(session, createInfo, detector);
}

XrResult GenValidUsageInputsXrDestroyWorldMeshDetectorML(
XrWorldMeshDetectorML detector) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(detector, XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrWorldMeshDetectorMLHandle(&detector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrWorldMeshDetectorML handle \"detector\" ";
                oss << HandleToHexString(detector);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyWorldMeshDetectorML-detector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyWorldMeshDetectorML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyWorldMeshDetectorML(
    XrWorldMeshDetectorML detector) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyWorldMeshDetectorML(detector);
        if (XR_SUCCEEDED(result)) {
            g_worldmeshdetectorml_info.erase(detector);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyWorldMeshDetectorML(
    XrWorldMeshDetectorML detector) {
    XrResult test_result = GenValidUsageInputsXrDestroyWorldMeshDetectorML(detector);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyWorldMeshDetectorML(detector);
}

XrResult GenValidUsageInputsXrRequestWorldMeshStateAsyncML(
XrWorldMeshDetectorML detector,
const XrWorldMeshStateRequestInfoML* stateRequest,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(detector, XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrWorldMeshDetectorMLHandle(&detector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrWorldMeshDetectorML handle \"detector\" ";
                oss << HandleToHexString(detector);
                CoreValidLogMessage(nullptr, "VUID-xrRequestWorldMeshStateAsyncML-detector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshStateAsyncML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == stateRequest) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshStateAsyncML-stateRequest-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshStateAsyncML", objects_info,
                                "Invalid NULL for XrWorldMeshStateRequestInfoML \"stateRequest\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshStateRequestInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRequestWorldMeshStateAsyncML", objects_info,
                                                        true, true, stateRequest);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshStateAsyncML-stateRequest-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshStateAsyncML",
                                objects_info,
                                "Command xrRequestWorldMeshStateAsyncML param stateRequest is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshStateAsyncML-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshStateAsyncML", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrRequestWorldMeshStateAsyncML-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestWorldMeshStateAsyncML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshStateRequestInfoML* stateRequest,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestWorldMeshStateAsyncML(detector, stateRequest, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestWorldMeshStateAsyncML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshStateRequestInfoML* stateRequest,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrRequestWorldMeshStateAsyncML(detector, stateRequest, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestWorldMeshStateAsyncML(detector, stateRequest, future);
}

XrResult GenValidUsageInputsXrRequestWorldMeshStateCompleteML(
XrWorldMeshDetectorML detector,
XrFutureEXT future,
XrWorldMeshStateRequestCompletionML* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(detector, XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrWorldMeshDetectorMLHandle(&detector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrWorldMeshDetectorML handle \"detector\" ";
                oss << HandleToHexString(detector);
                CoreValidLogMessage(nullptr, "VUID-xrRequestWorldMeshStateCompleteML-detector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshStateCompleteML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshStateCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshStateCompleteML", objects_info,
                                "Invalid NULL for XrWorldMeshStateRequestCompletionML \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshStateRequestCompletionML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRequestWorldMeshStateCompleteML", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshStateCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshStateCompleteML",
                                objects_info,
                                "Command xrRequestWorldMeshStateCompleteML param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestWorldMeshStateCompleteML(
    XrWorldMeshDetectorML detector,
    XrFutureEXT future,
    XrWorldMeshStateRequestCompletionML* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestWorldMeshStateCompleteML(detector, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestWorldMeshStateCompleteML(
    XrWorldMeshDetectorML detector,
    XrFutureEXT future,
    XrWorldMeshStateRequestCompletionML* completion) {
    XrResult test_result = GenValidUsageInputsXrRequestWorldMeshStateCompleteML(detector, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestWorldMeshStateCompleteML(detector, future, completion);
}

XrResult GenValidUsageInputsXrGetWorldMeshBufferRecommendSizeML(
XrWorldMeshDetectorML detector,
const XrWorldMeshBufferRecommendedSizeInfoML* sizeInfo,
XrWorldMeshBufferSizeML* size) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(detector, XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrWorldMeshDetectorMLHandle(&detector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrWorldMeshDetectorML handle \"detector\" ";
                oss << HandleToHexString(detector);
                CoreValidLogMessage(nullptr, "VUID-xrGetWorldMeshBufferRecommendSizeML-detector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetWorldMeshBufferRecommendSizeML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == sizeInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetWorldMeshBufferRecommendSizeML-sizeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetWorldMeshBufferRecommendSizeML", objects_info,
                                "Invalid NULL for XrWorldMeshBufferRecommendedSizeInfoML \"sizeInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshBufferRecommendedSizeInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetWorldMeshBufferRecommendSizeML", objects_info,
                                                        true, true, sizeInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetWorldMeshBufferRecommendSizeML-sizeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetWorldMeshBufferRecommendSizeML",
                                objects_info,
                                "Command xrGetWorldMeshBufferRecommendSizeML param sizeInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == size) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetWorldMeshBufferRecommendSizeML-size-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetWorldMeshBufferRecommendSizeML", objects_info,
                                "Invalid NULL for XrWorldMeshBufferSizeML \"size\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshBufferSizeML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetWorldMeshBufferRecommendSizeML", objects_info,
                                                        false, true, size);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetWorldMeshBufferRecommendSizeML-size-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetWorldMeshBufferRecommendSizeML",
                                objects_info,
                                "Command xrGetWorldMeshBufferRecommendSizeML param size is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetWorldMeshBufferRecommendSizeML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshBufferRecommendedSizeInfoML* sizeInfo,
    XrWorldMeshBufferSizeML* size) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetWorldMeshBufferRecommendSizeML(detector, sizeInfo, size);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetWorldMeshBufferRecommendSizeML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshBufferRecommendedSizeInfoML* sizeInfo,
    XrWorldMeshBufferSizeML* size) {
    XrResult test_result = GenValidUsageInputsXrGetWorldMeshBufferRecommendSizeML(detector, sizeInfo, size);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetWorldMeshBufferRecommendSizeML(detector, sizeInfo, size);
}

XrResult GenValidUsageInputsXrAllocateWorldMeshBufferML(
XrWorldMeshDetectorML detector,
const XrWorldMeshBufferSizeML* size,
XrWorldMeshBufferML* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(detector, XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrWorldMeshDetectorMLHandle(&detector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrWorldMeshDetectorML handle \"detector\" ";
                oss << HandleToHexString(detector);
                CoreValidLogMessage(nullptr, "VUID-xrAllocateWorldMeshBufferML-detector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAllocateWorldMeshBufferML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == size) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAllocateWorldMeshBufferML-size-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAllocateWorldMeshBufferML", objects_info,
                                "Invalid NULL for XrWorldMeshBufferSizeML \"size\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshBufferSizeML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrAllocateWorldMeshBufferML", objects_info,
                                                        true, true, size);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAllocateWorldMeshBufferML-size-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAllocateWorldMeshBufferML",
                                objects_info,
                                "Command xrAllocateWorldMeshBufferML param size is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAllocateWorldMeshBufferML-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAllocateWorldMeshBufferML", objects_info,
                                "Invalid NULL for XrWorldMeshBufferML \"buffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshBufferML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrAllocateWorldMeshBufferML", objects_info,
                                                        false, true, buffer);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrAllocateWorldMeshBufferML-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAllocateWorldMeshBufferML",
                                objects_info,
                                "Command xrAllocateWorldMeshBufferML param buffer is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrAllocateWorldMeshBufferML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshBufferSizeML* size,
    XrWorldMeshBufferML* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->AllocateWorldMeshBufferML(detector, size, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrAllocateWorldMeshBufferML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshBufferSizeML* size,
    XrWorldMeshBufferML* buffer) {
    XrResult test_result = GenValidUsageInputsXrAllocateWorldMeshBufferML(detector, size, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrAllocateWorldMeshBufferML(detector, size, buffer);
}

XrResult GenValidUsageInputsXrFreeWorldMeshBufferML(
XrWorldMeshDetectorML detector,
const XrWorldMeshBufferML* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(detector, XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrWorldMeshDetectorMLHandle(&detector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrWorldMeshDetectorML handle \"detector\" ";
                oss << HandleToHexString(detector);
                CoreValidLogMessage(nullptr, "VUID-xrFreeWorldMeshBufferML-detector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrFreeWorldMeshBufferML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrFreeWorldMeshBufferML-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrFreeWorldMeshBufferML", objects_info,
                                "Invalid NULL for XrWorldMeshBufferML \"buffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshBufferML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrFreeWorldMeshBufferML", objects_info,
                                                        true, true, buffer);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrFreeWorldMeshBufferML-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrFreeWorldMeshBufferML",
                                objects_info,
                                "Command xrFreeWorldMeshBufferML param buffer is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrFreeWorldMeshBufferML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshBufferML* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->FreeWorldMeshBufferML(detector, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrFreeWorldMeshBufferML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshBufferML* buffer) {
    XrResult test_result = GenValidUsageInputsXrFreeWorldMeshBufferML(detector, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrFreeWorldMeshBufferML(detector, buffer);
}

XrResult GenValidUsageInputsXrRequestWorldMeshAsyncML(
XrWorldMeshDetectorML detector,
const XrWorldMeshGetInfoML* getInfo,
XrWorldMeshBufferML* buffer,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(detector, XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrWorldMeshDetectorMLHandle(&detector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrWorldMeshDetectorML handle \"detector\" ";
                oss << HandleToHexString(detector);
                CoreValidLogMessage(nullptr, "VUID-xrRequestWorldMeshAsyncML-detector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshAsyncML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshAsyncML-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshAsyncML", objects_info,
                                "Invalid NULL for XrWorldMeshGetInfoML \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshGetInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRequestWorldMeshAsyncML", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshAsyncML-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshAsyncML",
                                objects_info,
                                "Command xrRequestWorldMeshAsyncML param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshAsyncML-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshAsyncML", objects_info,
                                "Invalid NULL for XrWorldMeshBufferML \"buffer\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshBufferML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRequestWorldMeshAsyncML", objects_info,
                                                        false, true, buffer);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshAsyncML-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshAsyncML",
                                objects_info,
                                "Command xrRequestWorldMeshAsyncML param buffer is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshAsyncML-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshAsyncML", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrRequestWorldMeshAsyncML-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestWorldMeshAsyncML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshGetInfoML* getInfo,
    XrWorldMeshBufferML* buffer,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestWorldMeshAsyncML(detector, getInfo, buffer, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestWorldMeshAsyncML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshGetInfoML* getInfo,
    XrWorldMeshBufferML* buffer,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrRequestWorldMeshAsyncML(detector, getInfo, buffer, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestWorldMeshAsyncML(detector, getInfo, buffer, future);
}

XrResult GenValidUsageInputsXrRequestWorldMeshCompleteML(
XrWorldMeshDetectorML detector,
const XrWorldMeshRequestCompletionInfoML* completionInfo,
XrFutureEXT future,
XrWorldMeshRequestCompletionML* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(detector, XR_OBJECT_TYPE_WORLD_MESH_DETECTOR_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrWorldMeshDetectorMLHandle(&detector);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrWorldMeshDetectorML handle \"detector\" ";
                oss << HandleToHexString(detector);
                CoreValidLogMessage(nullptr, "VUID-xrRequestWorldMeshCompleteML-detector-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshCompleteML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completionInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshCompleteML-completionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshCompleteML", objects_info,
                                "Invalid NULL for XrWorldMeshRequestCompletionInfoML \"completionInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshRequestCompletionInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRequestWorldMeshCompleteML", objects_info,
                                                        true, true, completionInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshCompleteML-completionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshCompleteML",
                                objects_info,
                                "Command xrRequestWorldMeshCompleteML param completionInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshCompleteML", objects_info,
                                "Invalid NULL for XrWorldMeshRequestCompletionML \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrWorldMeshRequestCompletionML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrRequestWorldMeshCompleteML", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestWorldMeshCompleteML-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestWorldMeshCompleteML",
                                objects_info,
                                "Command xrRequestWorldMeshCompleteML param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestWorldMeshCompleteML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshRequestCompletionInfoML* completionInfo,
    XrFutureEXT future,
    XrWorldMeshRequestCompletionML* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_worldmeshdetectorml_info.getWithInstanceInfo(detector);
        GenValidUsageXrHandleInfo *gen_worldmeshdetectorml_info = info_with_instance.first;
        (void)gen_worldmeshdetectorml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestWorldMeshCompleteML(detector, completionInfo, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestWorldMeshCompleteML(
    XrWorldMeshDetectorML detector,
    const XrWorldMeshRequestCompletionInfoML* completionInfo,
    XrFutureEXT future,
    XrWorldMeshRequestCompletionML* completion) {
    XrResult test_result = GenValidUsageInputsXrRequestWorldMeshCompleteML(detector, completionInfo, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestWorldMeshCompleteML(detector, completionInfo, future, completion);
}


// ---- XR_ML_facial_expression extension commands
XrResult GenValidUsageInputsXrCreateFacialExpressionClientML(
XrSession session,
const XrFacialExpressionClientCreateInfoML* createInfo,
XrFacialExpressionClientML* facialExpressionClient) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateFacialExpressionClientML-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFacialExpressionClientML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFacialExpressionClientML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFacialExpressionClientML", objects_info,
                                "Invalid NULL for XrFacialExpressionClientCreateInfoML \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFacialExpressionClientCreateInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateFacialExpressionClientML", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFacialExpressionClientML-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFacialExpressionClientML",
                                objects_info,
                                "Command xrCreateFacialExpressionClientML param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == facialExpressionClient) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateFacialExpressionClientML-facialExpressionClient-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateFacialExpressionClientML", objects_info,
                                "Invalid NULL for XrFacialExpressionClientML \"facialExpressionClient\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateFacialExpressionClientML(
    XrSession session,
    const XrFacialExpressionClientCreateInfoML* createInfo,
    XrFacialExpressionClientML* facialExpressionClient) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateFacialExpressionClientML(session, createInfo, facialExpressionClient);
        if (XR_SUCCESS == result && nullptr != facialExpressionClient) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_facialexpressionclientml_info.insert(*facialExpressionClient, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateFacialExpressionClientML(
    XrSession session,
    const XrFacialExpressionClientCreateInfoML* createInfo,
    XrFacialExpressionClientML* facialExpressionClient) {
    XrResult test_result = GenValidUsageInputsXrCreateFacialExpressionClientML(session, createInfo, facialExpressionClient);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateFacialExpressionClientML(session, createInfo, facialExpressionClient);
}

XrResult GenValidUsageInputsXrDestroyFacialExpressionClientML(
XrFacialExpressionClientML facialExpressionClient) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(facialExpressionClient, XR_OBJECT_TYPE_FACIAL_EXPRESSION_CLIENT_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFacialExpressionClientMLHandle(&facialExpressionClient);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFacialExpressionClientML handle \"facialExpressionClient\" ";
                oss << HandleToHexString(facialExpressionClient);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyFacialExpressionClientML-facialExpressionClient-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyFacialExpressionClientML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facialexpressionclientml_info.getWithInstanceInfo(facialExpressionClient);
        GenValidUsageXrHandleInfo *gen_facialexpressionclientml_info = info_with_instance.first;
        (void)gen_facialexpressionclientml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyFacialExpressionClientML(
    XrFacialExpressionClientML facialExpressionClient) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facialexpressionclientml_info.getWithInstanceInfo(facialExpressionClient);
        GenValidUsageXrHandleInfo *gen_facialexpressionclientml_info = info_with_instance.first;
        (void)gen_facialexpressionclientml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyFacialExpressionClientML(facialExpressionClient);
        if (XR_SUCCEEDED(result)) {
            g_facialexpressionclientml_info.erase(facialExpressionClient);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyFacialExpressionClientML(
    XrFacialExpressionClientML facialExpressionClient) {
    XrResult test_result = GenValidUsageInputsXrDestroyFacialExpressionClientML(facialExpressionClient);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyFacialExpressionClientML(facialExpressionClient);
}

XrResult GenValidUsageInputsXrGetFacialExpressionBlendShapePropertiesML(
XrFacialExpressionClientML facialExpressionClient,
const XrFacialExpressionBlendShapeGetInfoML* blendShapeGetInfo,
uint32_t blendShapeCount,
XrFacialExpressionBlendShapePropertiesML* blendShapes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(facialExpressionClient, XR_OBJECT_TYPE_FACIAL_EXPRESSION_CLIENT_ML);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrFacialExpressionClientMLHandle(&facialExpressionClient);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrFacialExpressionClientML handle \"facialExpressionClient\" ";
                oss << HandleToHexString(facialExpressionClient);
                CoreValidLogMessage(nullptr, "VUID-xrGetFacialExpressionBlendShapePropertiesML-facialExpressionClient-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialExpressionBlendShapePropertiesML",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_facialexpressionclientml_info.getWithInstanceInfo(facialExpressionClient);
        GenValidUsageXrHandleInfo *gen_facialexpressionclientml_info = info_with_instance.first;
        (void)gen_facialexpressionclientml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == blendShapeGetInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialExpressionBlendShapePropertiesML-blendShapeGetInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialExpressionBlendShapePropertiesML", objects_info,
                                "Invalid NULL for XrFacialExpressionBlendShapeGetInfoML \"blendShapeGetInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrFacialExpressionBlendShapeGetInfoML is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetFacialExpressionBlendShapePropertiesML", objects_info,
                                                        true, true, blendShapeGetInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialExpressionBlendShapePropertiesML-blendShapeGetInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialExpressionBlendShapePropertiesML",
                                objects_info,
                                "Command xrGetFacialExpressionBlendShapePropertiesML param blendShapeGetInfo is invalid");
            return xr_result;
        }
        // Non-optional array length must be non-zero
        if (0 >= blendShapeCount && nullptr != blendShapes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialExpressionBlendShapePropertiesML-blendShapeCount-arraylength",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialExpressionBlendShapePropertiesML",
                                objects_info,
                                "Command xrGetFacialExpressionBlendShapePropertiesML param blendShapeCount is non-optional and must be greater than 0");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        // Pointer/array variable with a length variable.  Make sure that
        // if length variable is non-zero that the pointer is not NULL
        if (nullptr == blendShapes && 0 != blendShapeCount) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialExpressionBlendShapePropertiesML-blendShapes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialExpressionBlendShapePropertiesML", objects_info,
                                "Invalid NULL for XrFacialExpressionBlendShapePropertiesML \"blendShapes\" is which not "
                                "optional since \"blendShapeCount\" is set and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        if (blendShapes) {
            for (uint32_t value_blendshapes_inc = 0; value_blendshapes_inc < blendShapeCount; ++value_blendshapes_inc) {
                // Validate that the structure XrFacialExpressionBlendShapePropertiesML is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrGetFacialExpressionBlendShapePropertiesML", objects_info,
                                                                true, true, &blendShapes[value_blendshapes_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrGetFacialExpressionBlendShapePropertiesML-blendShapes-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetFacialExpressionBlendShapePropertiesML",
                                        objects_info,
                                        "Command xrGetFacialExpressionBlendShapePropertiesML param blendShapes is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetFacialExpressionBlendShapePropertiesML(
    XrFacialExpressionClientML facialExpressionClient,
    const XrFacialExpressionBlendShapeGetInfoML* blendShapeGetInfo,
    uint32_t blendShapeCount,
    XrFacialExpressionBlendShapePropertiesML* blendShapes) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_facialexpressionclientml_info.getWithInstanceInfo(facialExpressionClient);
        GenValidUsageXrHandleInfo *gen_facialexpressionclientml_info = info_with_instance.first;
        (void)gen_facialexpressionclientml_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetFacialExpressionBlendShapePropertiesML(facialExpressionClient, blendShapeGetInfo, blendShapeCount, blendShapes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetFacialExpressionBlendShapePropertiesML(
    XrFacialExpressionClientML facialExpressionClient,
    const XrFacialExpressionBlendShapeGetInfoML* blendShapeGetInfo,
    uint32_t blendShapeCount,
    XrFacialExpressionBlendShapePropertiesML* blendShapes) {
    XrResult test_result = GenValidUsageInputsXrGetFacialExpressionBlendShapePropertiesML(facialExpressionClient, blendShapeGetInfo, blendShapeCount, blendShapes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetFacialExpressionBlendShapePropertiesML(facialExpressionClient, blendShapeGetInfo, blendShapeCount, blendShapes);
}


// ---- XR_META_boundary_visibility extension commands
XrResult GenValidUsageInputsXrRequestBoundaryVisibilityMETA(
XrSession session,
XrBoundaryVisibilityMETA boundaryVisibility) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrRequestBoundaryVisibilityMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRequestBoundaryVisibilityMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrBoundaryVisibilityMETA value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrRequestBoundaryVisibilityMETA", "xrRequestBoundaryVisibilityMETA", "boundaryVisibility", objects_info, boundaryVisibility)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrBoundaryVisibilityMETA \"boundaryVisibility\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(boundaryVisibility));
            CoreValidLogMessage(gen_instance_info, "VUID-xrRequestBoundaryVisibilityMETA-boundaryVisibility-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrRequestBoundaryVisibilityMETA",
                                objects_info, oss_enum.str());
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRequestBoundaryVisibilityMETA(
    XrSession session,
    XrBoundaryVisibilityMETA boundaryVisibility) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RequestBoundaryVisibilityMETA(session, boundaryVisibility);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRequestBoundaryVisibilityMETA(
    XrSession session,
    XrBoundaryVisibilityMETA boundaryVisibility) {
    XrResult test_result = GenValidUsageInputsXrRequestBoundaryVisibilityMETA(session, boundaryVisibility);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRequestBoundaryVisibilityMETA(session, boundaryVisibility);
}


// ---- XR_META_simultaneous_hands_and_controllers extension commands
XrResult GenValidUsageInputsXrResumeSimultaneousHandsAndControllersTrackingMETA(
XrSession session,
const XrSimultaneousHandsAndControllersTrackingResumeInfoMETA* resumeInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrResumeSimultaneousHandsAndControllersTrackingMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrResumeSimultaneousHandsAndControllersTrackingMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == resumeInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrResumeSimultaneousHandsAndControllersTrackingMETA-resumeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrResumeSimultaneousHandsAndControllersTrackingMETA", objects_info,
                                "Invalid NULL for XrSimultaneousHandsAndControllersTrackingResumeInfoMETA \"resumeInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSimultaneousHandsAndControllersTrackingResumeInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrResumeSimultaneousHandsAndControllersTrackingMETA", objects_info,
                                                        true, true, resumeInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrResumeSimultaneousHandsAndControllersTrackingMETA-resumeInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrResumeSimultaneousHandsAndControllersTrackingMETA",
                                objects_info,
                                "Command xrResumeSimultaneousHandsAndControllersTrackingMETA param resumeInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrResumeSimultaneousHandsAndControllersTrackingMETA(
    XrSession session,
    const XrSimultaneousHandsAndControllersTrackingResumeInfoMETA* resumeInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ResumeSimultaneousHandsAndControllersTrackingMETA(session, resumeInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrResumeSimultaneousHandsAndControllersTrackingMETA(
    XrSession session,
    const XrSimultaneousHandsAndControllersTrackingResumeInfoMETA* resumeInfo) {
    XrResult test_result = GenValidUsageInputsXrResumeSimultaneousHandsAndControllersTrackingMETA(session, resumeInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrResumeSimultaneousHandsAndControllersTrackingMETA(session, resumeInfo);
}

XrResult GenValidUsageInputsXrPauseSimultaneousHandsAndControllersTrackingMETA(
XrSession session,
const XrSimultaneousHandsAndControllersTrackingPauseInfoMETA* pauseInfo) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrPauseSimultaneousHandsAndControllersTrackingMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPauseSimultaneousHandsAndControllersTrackingMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == pauseInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPauseSimultaneousHandsAndControllersTrackingMETA-pauseInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPauseSimultaneousHandsAndControllersTrackingMETA", objects_info,
                                "Invalid NULL for XrSimultaneousHandsAndControllersTrackingPauseInfoMETA \"pauseInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSimultaneousHandsAndControllersTrackingPauseInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPauseSimultaneousHandsAndControllersTrackingMETA", objects_info,
                                                        true, true, pauseInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPauseSimultaneousHandsAndControllersTrackingMETA-pauseInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPauseSimultaneousHandsAndControllersTrackingMETA",
                                objects_info,
                                "Command xrPauseSimultaneousHandsAndControllersTrackingMETA param pauseInfo is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPauseSimultaneousHandsAndControllersTrackingMETA(
    XrSession session,
    const XrSimultaneousHandsAndControllersTrackingPauseInfoMETA* pauseInfo) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PauseSimultaneousHandsAndControllersTrackingMETA(session, pauseInfo);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPauseSimultaneousHandsAndControllersTrackingMETA(
    XrSession session,
    const XrSimultaneousHandsAndControllersTrackingPauseInfoMETA* pauseInfo) {
    XrResult test_result = GenValidUsageInputsXrPauseSimultaneousHandsAndControllersTrackingMETA(session, pauseInfo);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPauseSimultaneousHandsAndControllersTrackingMETA(session, pauseInfo);
}


// ---- XR_META_spatial_entity_room_mesh extension commands
XrResult GenValidUsageInputsXrGetSpaceRoomMeshMETA(
XrSpace space,
const XrSpaceRoomMeshGetInfoMETA* getInfo,
XrRoomMeshMETA* roomMeshOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceRoomMeshMETA-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomMeshMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomMeshMETA-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomMeshMETA", objects_info,
                                "Invalid NULL for XrSpaceRoomMeshGetInfoMETA \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpaceRoomMeshGetInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceRoomMeshMETA", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomMeshMETA-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomMeshMETA",
                                objects_info,
                                "Command xrGetSpaceRoomMeshMETA param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == roomMeshOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomMeshMETA-roomMeshOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomMeshMETA", objects_info,
                                "Invalid NULL for XrRoomMeshMETA \"roomMeshOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRoomMeshMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceRoomMeshMETA", objects_info,
                                                        false, true, roomMeshOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomMeshMETA-roomMeshOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomMeshMETA",
                                objects_info,
                                "Command xrGetSpaceRoomMeshMETA param roomMeshOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceRoomMeshMETA(
    XrSpace space,
    const XrSpaceRoomMeshGetInfoMETA* getInfo,
    XrRoomMeshMETA* roomMeshOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceRoomMeshMETA(space, getInfo, roomMeshOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceRoomMeshMETA(
    XrSpace space,
    const XrSpaceRoomMeshGetInfoMETA* getInfo,
    XrRoomMeshMETA* roomMeshOutput) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceRoomMeshMETA(space, getInfo, roomMeshOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceRoomMeshMETA(space, getInfo, roomMeshOutput);
}

XrResult GenValidUsageInputsXrGetSpaceRoomMeshFaceIndicesMETA(
XrSpace space,
const XrUuid* faceUuid,
XrRoomMeshFaceIndicesMETA* roomMeshFaceIndicesOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(space, XR_OBJECT_TYPE_SPACE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&space);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"space\" ";
                oss << HandleToHexString(space);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpaceRoomMeshFaceIndicesMETA-space-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomMeshFaceIndicesMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == faceUuid) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomMeshFaceIndicesMETA-faceUuid-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomMeshFaceIndicesMETA", objects_info,
                                "Invalid NULL for XrUuid \"faceUuid\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpaceRoomMeshFaceIndicesMETA-faceUuid-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == roomMeshFaceIndicesOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomMeshFaceIndicesMETA-roomMeshFaceIndicesOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomMeshFaceIndicesMETA", objects_info,
                                "Invalid NULL for XrRoomMeshFaceIndicesMETA \"roomMeshFaceIndicesOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrRoomMeshFaceIndicesMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpaceRoomMeshFaceIndicesMETA", objects_info,
                                                        false, true, roomMeshFaceIndicesOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpaceRoomMeshFaceIndicesMETA-roomMeshFaceIndicesOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpaceRoomMeshFaceIndicesMETA",
                                objects_info,
                                "Command xrGetSpaceRoomMeshFaceIndicesMETA param roomMeshFaceIndicesOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpaceRoomMeshFaceIndicesMETA(
    XrSpace space,
    const XrUuid* faceUuid,
    XrRoomMeshFaceIndicesMETA* roomMeshFaceIndicesOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_space_info.getWithInstanceInfo(space);
        GenValidUsageXrHandleInfo *gen_space_info = info_with_instance.first;
        (void)gen_space_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpaceRoomMeshFaceIndicesMETA(space, faceUuid, roomMeshFaceIndicesOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpaceRoomMeshFaceIndicesMETA(
    XrSpace space,
    const XrUuid* faceUuid,
    XrRoomMeshFaceIndicesMETA* roomMeshFaceIndicesOutput) {
    XrResult test_result = GenValidUsageInputsXrGetSpaceRoomMeshFaceIndicesMETA(space, faceUuid, roomMeshFaceIndicesOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpaceRoomMeshFaceIndicesMETA(space, faceUuid, roomMeshFaceIndicesOutput);
}


// ---- XR_META_colocation_discovery extension commands
XrResult GenValidUsageInputsXrStartColocationDiscoveryMETA(
XrSession session,
const XrColocationDiscoveryStartInfoMETA* info,
XrAsyncRequestIdFB* discoveryRequestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrStartColocationDiscoveryMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartColocationDiscoveryMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartColocationDiscoveryMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartColocationDiscoveryMETA", objects_info,
                                "Invalid NULL for XrColocationDiscoveryStartInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrColocationDiscoveryStartInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrStartColocationDiscoveryMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartColocationDiscoveryMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartColocationDiscoveryMETA",
                                objects_info,
                                "Command xrStartColocationDiscoveryMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == discoveryRequestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartColocationDiscoveryMETA-discoveryRequestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartColocationDiscoveryMETA", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"discoveryRequestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrStartColocationDiscoveryMETA-discoveryRequestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStartColocationDiscoveryMETA(
    XrSession session,
    const XrColocationDiscoveryStartInfoMETA* info,
    XrAsyncRequestIdFB* discoveryRequestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StartColocationDiscoveryMETA(session, info, discoveryRequestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStartColocationDiscoveryMETA(
    XrSession session,
    const XrColocationDiscoveryStartInfoMETA* info,
    XrAsyncRequestIdFB* discoveryRequestId) {
    XrResult test_result = GenValidUsageInputsXrStartColocationDiscoveryMETA(session, info, discoveryRequestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStartColocationDiscoveryMETA(session, info, discoveryRequestId);
}

XrResult GenValidUsageInputsXrStopColocationDiscoveryMETA(
XrSession session,
const XrColocationDiscoveryStopInfoMETA* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrStopColocationDiscoveryMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopColocationDiscoveryMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStopColocationDiscoveryMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopColocationDiscoveryMETA", objects_info,
                                "Invalid NULL for XrColocationDiscoveryStopInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrColocationDiscoveryStopInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrStopColocationDiscoveryMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStopColocationDiscoveryMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopColocationDiscoveryMETA",
                                objects_info,
                                "Command xrStopColocationDiscoveryMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStopColocationDiscoveryMETA-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopColocationDiscoveryMETA", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrStopColocationDiscoveryMETA-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStopColocationDiscoveryMETA(
    XrSession session,
    const XrColocationDiscoveryStopInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StopColocationDiscoveryMETA(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStopColocationDiscoveryMETA(
    XrSession session,
    const XrColocationDiscoveryStopInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrStopColocationDiscoveryMETA(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStopColocationDiscoveryMETA(session, info, requestId);
}

XrResult GenValidUsageInputsXrStartColocationAdvertisementMETA(
XrSession session,
const XrColocationAdvertisementStartInfoMETA* info,
XrAsyncRequestIdFB* advertisementRequestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrStartColocationAdvertisementMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartColocationAdvertisementMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartColocationAdvertisementMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartColocationAdvertisementMETA", objects_info,
                                "Invalid NULL for XrColocationAdvertisementStartInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrColocationAdvertisementStartInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrStartColocationAdvertisementMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartColocationAdvertisementMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartColocationAdvertisementMETA",
                                objects_info,
                                "Command xrStartColocationAdvertisementMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == advertisementRequestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStartColocationAdvertisementMETA-advertisementRequestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStartColocationAdvertisementMETA", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"advertisementRequestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrStartColocationAdvertisementMETA-advertisementRequestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStartColocationAdvertisementMETA(
    XrSession session,
    const XrColocationAdvertisementStartInfoMETA* info,
    XrAsyncRequestIdFB* advertisementRequestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StartColocationAdvertisementMETA(session, info, advertisementRequestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStartColocationAdvertisementMETA(
    XrSession session,
    const XrColocationAdvertisementStartInfoMETA* info,
    XrAsyncRequestIdFB* advertisementRequestId) {
    XrResult test_result = GenValidUsageInputsXrStartColocationAdvertisementMETA(session, info, advertisementRequestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStartColocationAdvertisementMETA(session, info, advertisementRequestId);
}

XrResult GenValidUsageInputsXrStopColocationAdvertisementMETA(
XrSession session,
const XrColocationAdvertisementStopInfoMETA* info,
XrAsyncRequestIdFB* requestId) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrStopColocationAdvertisementMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopColocationAdvertisementMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStopColocationAdvertisementMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopColocationAdvertisementMETA", objects_info,
                                "Invalid NULL for XrColocationAdvertisementStopInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrColocationAdvertisementStopInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrStopColocationAdvertisementMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStopColocationAdvertisementMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopColocationAdvertisementMETA",
                                objects_info,
                                "Command xrStopColocationAdvertisementMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == requestId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrStopColocationAdvertisementMETA-requestId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrStopColocationAdvertisementMETA", objects_info,
                                "Invalid NULL for XrAsyncRequestIdFB \"requestId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrStopColocationAdvertisementMETA-requestId-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrStopColocationAdvertisementMETA(
    XrSession session,
    const XrColocationAdvertisementStopInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->StopColocationAdvertisementMETA(session, info, requestId);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrStopColocationAdvertisementMETA(
    XrSession session,
    const XrColocationAdvertisementStopInfoMETA* info,
    XrAsyncRequestIdFB* requestId) {
    XrResult test_result = GenValidUsageInputsXrStopColocationAdvertisementMETA(session, info, requestId);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrStopColocationAdvertisementMETA(session, info, requestId);
}


// ---- XR_META_environment_raycast extension commands
XrResult GenValidUsageInputsXrCreateEnvironmentRaycasterAsyncMETA(
XrSession session,
const XrEnvironmentRaycasterCreateInfoMETA* info,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateEnvironmentRaycasterAsyncMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentRaycasterAsyncMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrEnvironmentRaycasterCreateInfoMETA is valid
        if (nullptr != info) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrCreateEnvironmentRaycasterAsyncMETA",
                                                            objects_info, false, true, info);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentRaycasterAsyncMETA-info-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentRaycasterAsyncMETA",
                                    objects_info,
                                    "Command xrCreateEnvironmentRaycasterAsyncMETA param info is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentRaycasterAsyncMETA-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentRaycasterAsyncMETA", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateEnvironmentRaycasterAsyncMETA-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateEnvironmentRaycasterAsyncMETA(
    XrSession session,
    const XrEnvironmentRaycasterCreateInfoMETA* info,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateEnvironmentRaycasterAsyncMETA(session, info, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateEnvironmentRaycasterAsyncMETA(
    XrSession session,
    const XrEnvironmentRaycasterCreateInfoMETA* info,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrCreateEnvironmentRaycasterAsyncMETA(session, info, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateEnvironmentRaycasterAsyncMETA(session, info, future);
}

XrResult GenValidUsageInputsXrCreateEnvironmentRaycasterCompleteMETA(
XrSession session,
XrFutureEXT future,
XrEnvironmentRaycasterCreateCompletionMETA* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateEnvironmentRaycasterCompleteMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentRaycasterCompleteMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentRaycasterCompleteMETA-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentRaycasterCompleteMETA", objects_info,
                                "Invalid NULL for XrEnvironmentRaycasterCreateCompletionMETA \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEnvironmentRaycasterCreateCompletionMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateEnvironmentRaycasterCompleteMETA", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateEnvironmentRaycasterCompleteMETA-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateEnvironmentRaycasterCompleteMETA",
                                objects_info,
                                "Command xrCreateEnvironmentRaycasterCompleteMETA param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateEnvironmentRaycasterCompleteMETA(
    XrSession session,
    XrFutureEXT future,
    XrEnvironmentRaycasterCreateCompletionMETA* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateEnvironmentRaycasterCompleteMETA(session, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateEnvironmentRaycasterCompleteMETA(
    XrSession session,
    XrFutureEXT future,
    XrEnvironmentRaycasterCreateCompletionMETA* completion) {
    XrResult test_result = GenValidUsageInputsXrCreateEnvironmentRaycasterCompleteMETA(session, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateEnvironmentRaycasterCompleteMETA(session, future, completion);
}

XrResult GenValidUsageInputsXrDestroyEnvironmentRaycasterMETA(
XrEnvironmentRaycasterMETA environmentRaycaster) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(environmentRaycaster, XR_OBJECT_TYPE_ENVIRONMENT_RAYCASTER_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentRaycasterMETAHandle(&environmentRaycaster);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentRaycasterMETA handle \"environmentRaycaster\" ";
                oss << HandleToHexString(environmentRaycaster);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyEnvironmentRaycasterMETA-environmentRaycaster-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyEnvironmentRaycasterMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentraycastermeta_info.getWithInstanceInfo(environmentRaycaster);
        GenValidUsageXrHandleInfo *gen_environmentraycastermeta_info = info_with_instance.first;
        (void)gen_environmentraycastermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyEnvironmentRaycasterMETA(
    XrEnvironmentRaycasterMETA environmentRaycaster) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentraycastermeta_info.getWithInstanceInfo(environmentRaycaster);
        GenValidUsageXrHandleInfo *gen_environmentraycastermeta_info = info_with_instance.first;
        (void)gen_environmentraycastermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyEnvironmentRaycasterMETA(environmentRaycaster);
        if (XR_SUCCEEDED(result)) {
            g_environmentraycastermeta_info.erase(environmentRaycaster);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyEnvironmentRaycasterMETA(
    XrEnvironmentRaycasterMETA environmentRaycaster) {
    XrResult test_result = GenValidUsageInputsXrDestroyEnvironmentRaycasterMETA(environmentRaycaster);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyEnvironmentRaycasterMETA(environmentRaycaster);
}

XrResult GenValidUsageInputsXrPerformEnvironmentRaycastMETA(
XrEnvironmentRaycasterMETA environmentRaycaster,
const XrEnvironmentRaycastHitGetInfoMETA* info,
XrEnvironmentRaycastHitMETA* hitPoint) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(environmentRaycaster, XR_OBJECT_TYPE_ENVIRONMENT_RAYCASTER_META);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrEnvironmentRaycasterMETAHandle(&environmentRaycaster);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrEnvironmentRaycasterMETA handle \"environmentRaycaster\" ";
                oss << HandleToHexString(environmentRaycaster);
                CoreValidLogMessage(nullptr, "VUID-xrPerformEnvironmentRaycastMETA-environmentRaycaster-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPerformEnvironmentRaycastMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_environmentraycastermeta_info.getWithInstanceInfo(environmentRaycaster);
        GenValidUsageXrHandleInfo *gen_environmentraycastermeta_info = info_with_instance.first;
        (void)gen_environmentraycastermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPerformEnvironmentRaycastMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPerformEnvironmentRaycastMETA", objects_info,
                                "Invalid NULL for XrEnvironmentRaycastHitGetInfoMETA \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEnvironmentRaycastHitGetInfoMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPerformEnvironmentRaycastMETA", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPerformEnvironmentRaycastMETA-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPerformEnvironmentRaycastMETA",
                                objects_info,
                                "Command xrPerformEnvironmentRaycastMETA param info is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == hitPoint) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPerformEnvironmentRaycastMETA-hitPoint-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPerformEnvironmentRaycastMETA", objects_info,
                                "Invalid NULL for XrEnvironmentRaycastHitMETA \"hitPoint\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrEnvironmentRaycastHitMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPerformEnvironmentRaycastMETA", objects_info,
                                                        false, true, hitPoint);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPerformEnvironmentRaycastMETA-hitPoint-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPerformEnvironmentRaycastMETA",
                                objects_info,
                                "Command xrPerformEnvironmentRaycastMETA param hitPoint is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPerformEnvironmentRaycastMETA(
    XrEnvironmentRaycasterMETA environmentRaycaster,
    const XrEnvironmentRaycastHitGetInfoMETA* info,
    XrEnvironmentRaycastHitMETA* hitPoint) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_environmentraycastermeta_info.getWithInstanceInfo(environmentRaycaster);
        GenValidUsageXrHandleInfo *gen_environmentraycastermeta_info = info_with_instance.first;
        (void)gen_environmentraycastermeta_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PerformEnvironmentRaycastMETA(environmentRaycaster, info, hitPoint);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPerformEnvironmentRaycastMETA(
    XrEnvironmentRaycasterMETA environmentRaycaster,
    const XrEnvironmentRaycastHitGetInfoMETA* info,
    XrEnvironmentRaycastHitMETA* hitPoint) {
    XrResult test_result = GenValidUsageInputsXrPerformEnvironmentRaycastMETA(environmentRaycaster, info, hitPoint);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPerformEnvironmentRaycastMETA(environmentRaycaster, info, hitPoint);
}


// ---- XR_META_tile_properties_hint extension commands
XrResult GenValidUsageInputsXrSetTilePropertiesHintMETA(
XrSession session,
const XrTilePropertiesHintMETA* properties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrSetTilePropertiesHintMETA-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetTilePropertiesHintMETA",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == properties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetTilePropertiesHintMETA-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetTilePropertiesHintMETA", objects_info,
                                "Invalid NULL for XrTilePropertiesHintMETA \"properties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTilePropertiesHintMETA is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrSetTilePropertiesHintMETA", objects_info,
                                                        true, true, properties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrSetTilePropertiesHintMETA-properties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrSetTilePropertiesHintMETA",
                                objects_info,
                                "Command xrSetTilePropertiesHintMETA param properties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrSetTilePropertiesHintMETA(
    XrSession session,
    const XrTilePropertiesHintMETA* properties) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->SetTilePropertiesHintMETA(session, properties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrSetTilePropertiesHintMETA(
    XrSession session,
    const XrTilePropertiesHintMETA* properties) {
    XrResult test_result = GenValidUsageInputsXrSetTilePropertiesHintMETA(session, properties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrSetTilePropertiesHintMETA(session, properties);
}


// ---- XR_ANDROID_light_estimation extension commands
XrResult GenValidUsageInputsXrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateLightEstimatorANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateLightEstimatorANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateLightEstimatorANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateLightEstimatorANDROID", objects_info,
                                "Invalid NULL for XrLightEstimatorCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrLightEstimatorCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateLightEstimatorANDROID", objects_info,
                                                        false, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateLightEstimatorANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateLightEstimatorANDROID",
                                objects_info,
                                "Command xrCreateLightEstimatorANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outHandle) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateLightEstimatorANDROID-outHandle-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateLightEstimatorANDROID", objects_info,
                                "Invalid NULL for XrLightEstimatorANDROID \"outHandle\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateLightEstimatorANDROID(
    XrSession session,
    XrLightEstimatorCreateInfoANDROID* createInfo,
    XrLightEstimatorANDROID* outHandle) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateLightEstimatorANDROID(session, createInfo, outHandle);
        if (XR_SUCCESS == result && nullptr != outHandle) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_lightestimatorandroid_info.insert(*outHandle, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateLightEstimatorANDROID(
    XrSession session,
    XrLightEstimatorCreateInfoANDROID* createInfo,
    XrLightEstimatorANDROID* outHandle) {
    XrResult test_result = GenValidUsageInputsXrCreateLightEstimatorANDROID(session, createInfo, outHandle);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateLightEstimatorANDROID(session, createInfo, outHandle);
}

XrResult GenValidUsageInputsXrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(estimator, XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrLightEstimatorANDROIDHandle(&estimator);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrLightEstimatorANDROID handle \"estimator\" ";
                oss << HandleToHexString(estimator);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyLightEstimatorANDROID-estimator-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyLightEstimatorANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_lightestimatorandroid_info.getWithInstanceInfo(estimator);
        GenValidUsageXrHandleInfo *gen_lightestimatorandroid_info = info_with_instance.first;
        (void)gen_lightestimatorandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyLightEstimatorANDROID(
    XrLightEstimatorANDROID estimator) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_lightestimatorandroid_info.getWithInstanceInfo(estimator);
        GenValidUsageXrHandleInfo *gen_lightestimatorandroid_info = info_with_instance.first;
        (void)gen_lightestimatorandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyLightEstimatorANDROID(estimator);
        if (XR_SUCCEEDED(result)) {
            g_lightestimatorandroid_info.erase(estimator);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyLightEstimatorANDROID(
    XrLightEstimatorANDROID estimator) {
    XrResult test_result = GenValidUsageInputsXrDestroyLightEstimatorANDROID(estimator);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyLightEstimatorANDROID(estimator);
}

XrResult GenValidUsageInputsXrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(estimator, XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrLightEstimatorANDROIDHandle(&estimator);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrLightEstimatorANDROID handle \"estimator\" ";
                oss << HandleToHexString(estimator);
                CoreValidLogMessage(nullptr, "VUID-xrGetLightEstimateANDROID-estimator-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetLightEstimateANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_lightestimatorandroid_info.getWithInstanceInfo(estimator);
        GenValidUsageXrHandleInfo *gen_lightestimatorandroid_info = info_with_instance.first;
        (void)gen_lightestimatorandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == input) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetLightEstimateANDROID-input-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetLightEstimateANDROID", objects_info,
                                "Invalid NULL for XrLightEstimateGetInfoANDROID \"input\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrLightEstimateGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetLightEstimateANDROID", objects_info,
                                                        true, true, input);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetLightEstimateANDROID-input-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetLightEstimateANDROID",
                                objects_info,
                                "Command xrGetLightEstimateANDROID param input is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == output) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetLightEstimateANDROID-output-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetLightEstimateANDROID", objects_info,
                                "Invalid NULL for XrLightEstimateANDROID \"output\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrLightEstimateANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetLightEstimateANDROID", objects_info,
                                                        false, true, output);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetLightEstimateANDROID-output-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetLightEstimateANDROID",
                                objects_info,
                                "Command xrGetLightEstimateANDROID param output is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetLightEstimateANDROID(
    XrLightEstimatorANDROID estimator,
    const XrLightEstimateGetInfoANDROID* input,
    XrLightEstimateANDROID* output) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_lightestimatorandroid_info.getWithInstanceInfo(estimator);
        GenValidUsageXrHandleInfo *gen_lightestimatorandroid_info = info_with_instance.first;
        (void)gen_lightestimatorandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetLightEstimateANDROID(estimator, input, output);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetLightEstimateANDROID(
    XrLightEstimatorANDROID estimator,
    const XrLightEstimateGetInfoANDROID* input,
    XrLightEstimateANDROID* output) {
    XrResult test_result = GenValidUsageInputsXrGetLightEstimateANDROID(estimator, input, output);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetLightEstimateANDROID(estimator, input, output);
}


// ---- XR_ANDROID_anchor_sharing_export extension commands
#if defined(XR_USE_PLATFORM_ANDROID)

XrResult GenValidUsageInputsXrShareAnchorANDROID(
XrSession session,
const XrAnchorSharingInfoANDROID* sharingInfo,
XrAnchorSharingTokenANDROID* anchorToken) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrShareAnchorANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareAnchorANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == sharingInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareAnchorANDROID-sharingInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareAnchorANDROID", objects_info,
                                "Invalid NULL for XrAnchorSharingInfoANDROID \"sharingInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrAnchorSharingInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrShareAnchorANDROID", objects_info,
                                                        true, true, sharingInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareAnchorANDROID-sharingInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareAnchorANDROID",
                                objects_info,
                                "Command xrShareAnchorANDROID param sharingInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorToken) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareAnchorANDROID-anchorToken-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareAnchorANDROID", objects_info,
                                "Invalid NULL for XrAnchorSharingTokenANDROID \"anchorToken\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrAnchorSharingTokenANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrShareAnchorANDROID", objects_info,
                                                        false, true, anchorToken);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrShareAnchorANDROID-anchorToken-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrShareAnchorANDROID",
                                objects_info,
                                "Command xrShareAnchorANDROID param anchorToken is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrShareAnchorANDROID(
    XrSession session,
    const XrAnchorSharingInfoANDROID* sharingInfo,
    XrAnchorSharingTokenANDROID* anchorToken) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->ShareAnchorANDROID(session, sharingInfo, anchorToken);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrShareAnchorANDROID(
    XrSession session,
    const XrAnchorSharingInfoANDROID* sharingInfo,
    XrAnchorSharingTokenANDROID* anchorToken) {
    XrResult test_result = GenValidUsageInputsXrShareAnchorANDROID(session, sharingInfo, anchorToken);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrShareAnchorANDROID(session, sharingInfo, anchorToken);
}

#endif // defined(XR_USE_PLATFORM_ANDROID)

#if defined(XR_USE_PLATFORM_ANDROID)

XrResult GenValidUsageInputsXrUnshareAnchorANDROID(
XrSession session,
XrSpace anchor) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrUnshareAnchorANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnshareAnchorANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(anchor, XR_OBJECT_TYPE_SPACE);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpaceHandle(&anchor);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpace handle \"anchor\" ";
                oss << HandleToHexString(anchor);
                CoreValidLogMessage(gen_instance_info, "VUID-xrUnshareAnchorANDROID-anchor-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnshareAnchorANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPACE,  MakeHandleGeneric(anchor), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpace ";
            oss_error << HandleToHexString(anchor);
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnshareAnchorANDROID-anchor-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnshareAnchorANDROID",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUnshareAnchorANDROID(
    XrSession session,
    XrSpace anchor) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UnshareAnchorANDROID(session, anchor);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUnshareAnchorANDROID(
    XrSession session,
    XrSpace anchor) {
    XrResult test_result = GenValidUsageInputsXrUnshareAnchorANDROID(session, anchor);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUnshareAnchorANDROID(session, anchor);
}

#endif // defined(XR_USE_PLATFORM_ANDROID)


// ---- XR_ANDROID_trackables_marker extension commands
XrResult GenValidUsageInputsXrGetTrackableMarkerANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableMarkerANDROID* markerOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableTrackerANDROID handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetTrackableMarkerANDROID-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableMarkerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableMarkerANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableMarkerANDROID", objects_info,
                                "Invalid NULL for XrTrackableGetInfoANDROID \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackableMarkerANDROID", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableMarkerANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableMarkerANDROID",
                                objects_info,
                                "Command xrGetTrackableMarkerANDROID param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == markerOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableMarkerANDROID-markerOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableMarkerANDROID", objects_info,
                                "Invalid NULL for XrTrackableMarkerANDROID \"markerOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableMarkerANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackableMarkerANDROID", objects_info,
                                                        false, true, markerOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableMarkerANDROID-markerOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableMarkerANDROID",
                                objects_info,
                                "Command xrGetTrackableMarkerANDROID param markerOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetTrackableMarkerANDROID(
    XrTrackableTrackerANDROID tracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackableMarkerANDROID* markerOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetTrackableMarkerANDROID(tracker, getInfo, markerOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetTrackableMarkerANDROID(
    XrTrackableTrackerANDROID tracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackableMarkerANDROID* markerOutput) {
    XrResult test_result = GenValidUsageInputsXrGetTrackableMarkerANDROID(tracker, getInfo, markerOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetTrackableMarkerANDROID(tracker, getInfo, markerOutput);
}


// ---- XR_ANDROID_trackables_qr_code extension commands
XrResult GenValidUsageInputsXrGetTrackableQrCodeANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableQrCodeANDROID* qrCodeOutput) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableTrackerANDROID handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetTrackableQrCodeANDROID-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableQrCodeANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableQrCodeANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableQrCodeANDROID", objects_info,
                                "Invalid NULL for XrTrackableGetInfoANDROID \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackableQrCodeANDROID", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableQrCodeANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableQrCodeANDROID",
                                objects_info,
                                "Command xrGetTrackableQrCodeANDROID param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == qrCodeOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableQrCodeANDROID-qrCodeOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableQrCodeANDROID", objects_info,
                                "Invalid NULL for XrTrackableQrCodeANDROID \"qrCodeOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableQrCodeANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackableQrCodeANDROID", objects_info,
                                                        false, true, qrCodeOutput);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableQrCodeANDROID-qrCodeOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableQrCodeANDROID",
                                objects_info,
                                "Command xrGetTrackableQrCodeANDROID param qrCodeOutput is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetTrackableQrCodeANDROID(
    XrTrackableTrackerANDROID tracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackableQrCodeANDROID* qrCodeOutput) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetTrackableQrCodeANDROID(tracker, getInfo, qrCodeOutput);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetTrackableQrCodeANDROID(
    XrTrackableTrackerANDROID tracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackableQrCodeANDROID* qrCodeOutput) {
    XrResult test_result = GenValidUsageInputsXrGetTrackableQrCodeANDROID(tracker, getInfo, qrCodeOutput);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetTrackableQrCodeANDROID(tracker, getInfo, qrCodeOutput);
}


// ---- XR_ANDROID_trackables_image extension commands
XrResult GenValidUsageInputsXrCreateTrackableImageDatabaseAsyncANDROID(
XrSession session,
const XrTrackableImageDatabaseCreateInfoANDROID* createInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateTrackableImageDatabaseAsyncANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableImageDatabaseAsyncANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTrackableImageDatabaseAsyncANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableImageDatabaseAsyncANDROID", objects_info,
                                "Invalid NULL for XrTrackableImageDatabaseCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableImageDatabaseCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateTrackableImageDatabaseAsyncANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTrackableImageDatabaseAsyncANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableImageDatabaseAsyncANDROID",
                                objects_info,
                                "Command xrCreateTrackableImageDatabaseAsyncANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTrackableImageDatabaseAsyncANDROID-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableImageDatabaseAsyncANDROID", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateTrackableImageDatabaseAsyncANDROID-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateTrackableImageDatabaseAsyncANDROID(
    XrSession session,
    const XrTrackableImageDatabaseCreateInfoANDROID* createInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateTrackableImageDatabaseAsyncANDROID(session, createInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateTrackableImageDatabaseAsyncANDROID(
    XrSession session,
    const XrTrackableImageDatabaseCreateInfoANDROID* createInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrCreateTrackableImageDatabaseAsyncANDROID(session, createInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateTrackableImageDatabaseAsyncANDROID(session, createInfo, future);
}

XrResult GenValidUsageInputsXrCreateTrackableImageDatabaseCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrCreateTrackableImageDatabaseCompletionANDROID* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateTrackableImageDatabaseCompleteANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableImageDatabaseCompleteANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTrackableImageDatabaseCompleteANDROID-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableImageDatabaseCompleteANDROID", objects_info,
                                "Invalid NULL for XrCreateTrackableImageDatabaseCompletionANDROID \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrCreateTrackableImageDatabaseCompletionANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateTrackableImageDatabaseCompleteANDROID", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateTrackableImageDatabaseCompleteANDROID-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateTrackableImageDatabaseCompleteANDROID",
                                objects_info,
                                "Command xrCreateTrackableImageDatabaseCompleteANDROID param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateTrackableImageDatabaseCompleteANDROID(
    XrSession session,
    XrFutureEXT future,
    XrCreateTrackableImageDatabaseCompletionANDROID* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateTrackableImageDatabaseCompleteANDROID(session, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateTrackableImageDatabaseCompleteANDROID(
    XrSession session,
    XrFutureEXT future,
    XrCreateTrackableImageDatabaseCompletionANDROID* completion) {
    XrResult test_result = GenValidUsageInputsXrCreateTrackableImageDatabaseCompleteANDROID(session, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateTrackableImageDatabaseCompleteANDROID(session, future, completion);
}

XrResult GenValidUsageInputsXrDestroyTrackableImageDatabaseANDROID(
XrTrackableImageDatabaseANDROID database) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(database, XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableImageDatabaseANDROIDHandle(&database);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableImageDatabaseANDROID handle \"database\" ";
                oss << HandleToHexString(database);
                CoreValidLogMessage(nullptr, "VUID-xrDestroyTrackableImageDatabaseANDROID-database-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroyTrackableImageDatabaseANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackableimagedatabaseandroid_info.getWithInstanceInfo(database);
        GenValidUsageXrHandleInfo *gen_trackableimagedatabaseandroid_info = info_with_instance.first;
        (void)gen_trackableimagedatabaseandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroyTrackableImageDatabaseANDROID(
    XrTrackableImageDatabaseANDROID database) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackableimagedatabaseandroid_info.getWithInstanceInfo(database);
        GenValidUsageXrHandleInfo *gen_trackableimagedatabaseandroid_info = info_with_instance.first;
        (void)gen_trackableimagedatabaseandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroyTrackableImageDatabaseANDROID(database);
        if (XR_SUCCEEDED(result)) {
            g_trackableimagedatabaseandroid_info.erase(database);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroyTrackableImageDatabaseANDROID(
    XrTrackableImageDatabaseANDROID database) {
    XrResult test_result = GenValidUsageInputsXrDestroyTrackableImageDatabaseANDROID(database);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroyTrackableImageDatabaseANDROID(database);
}

XrResult GenValidUsageInputsXrAddTrackableImageDatabaseANDROID(
XrTrackableTrackerANDROID tracker,
XrTrackableImageDatabaseANDROID database) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableTrackerANDROID handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrAddTrackableImageDatabaseANDROID-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAddTrackableImageDatabaseANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(database, XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableImageDatabaseANDROIDHandle(&database);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableImageDatabaseANDROID handle \"database\" ";
                oss << HandleToHexString(database);
                CoreValidLogMessage(gen_instance_info, "VUID-xrAddTrackableImageDatabaseANDROID-database-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAddTrackableImageDatabaseANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID,  MakeHandleGeneric(tracker),
                    XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID,  MakeHandleGeneric(database), true)) {
            std::ostringstream oss_error;
            oss_error << "XrTrackableTrackerANDROID " << HandleToHexString(tracker);
            oss_error <<  " and XrTrackableImageDatabaseANDROID ";
            oss_error << HandleToHexString(database);
            oss_error <<  " must share a parent";
            CoreValidLogMessage(gen_instance_info, "VUID-xrAddTrackableImageDatabaseANDROID-commonparent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrAddTrackableImageDatabaseANDROID",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrAddTrackableImageDatabaseANDROID(
    XrTrackableTrackerANDROID tracker,
    XrTrackableImageDatabaseANDROID database) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->AddTrackableImageDatabaseANDROID(tracker, database);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrAddTrackableImageDatabaseANDROID(
    XrTrackableTrackerANDROID tracker,
    XrTrackableImageDatabaseANDROID database) {
    XrResult test_result = GenValidUsageInputsXrAddTrackableImageDatabaseANDROID(tracker, database);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrAddTrackableImageDatabaseANDROID(tracker, database);
}

XrResult GenValidUsageInputsXrRemoveTrackableImageDatabaseANDROID(
XrTrackableTrackerANDROID tracker,
XrTrackableImageDatabaseANDROID database) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableTrackerANDROID handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrRemoveTrackableImageDatabaseANDROID-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRemoveTrackableImageDatabaseANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(database, XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableImageDatabaseANDROIDHandle(&database);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableImageDatabaseANDROID handle \"database\" ";
                oss << HandleToHexString(database);
                CoreValidLogMessage(gen_instance_info, "VUID-xrRemoveTrackableImageDatabaseANDROID-database-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRemoveTrackableImageDatabaseANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID,  MakeHandleGeneric(tracker),
                    XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID,  MakeHandleGeneric(database), true)) {
            std::ostringstream oss_error;
            oss_error << "XrTrackableTrackerANDROID " << HandleToHexString(tracker);
            oss_error <<  " and XrTrackableImageDatabaseANDROID ";
            oss_error << HandleToHexString(database);
            oss_error <<  " must share a parent";
            CoreValidLogMessage(gen_instance_info, "VUID-xrRemoveTrackableImageDatabaseANDROID-commonparent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrRemoveTrackableImageDatabaseANDROID",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrRemoveTrackableImageDatabaseANDROID(
    XrTrackableTrackerANDROID tracker,
    XrTrackableImageDatabaseANDROID database) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->RemoveTrackableImageDatabaseANDROID(tracker, database);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrRemoveTrackableImageDatabaseANDROID(
    XrTrackableTrackerANDROID tracker,
    XrTrackableImageDatabaseANDROID database) {
    XrResult test_result = GenValidUsageInputsXrRemoveTrackableImageDatabaseANDROID(tracker, database);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrRemoveTrackableImageDatabaseANDROID(tracker, database);
}

XrResult GenValidUsageInputsXrGetTrackableImageANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableImageANDROID* trackable) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrTrackableTrackerANDROIDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrTrackableTrackerANDROID handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrGetTrackableImageANDROID-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableImageANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == getInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableImageANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableImageANDROID", objects_info,
                                "Invalid NULL for XrTrackableGetInfoANDROID \"getInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableGetInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackableImageANDROID", objects_info,
                                                        true, true, getInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableImageANDROID-getInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableImageANDROID",
                                objects_info,
                                "Command xrGetTrackableImageANDROID param getInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == trackable) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableImageANDROID-trackable-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableImageANDROID", objects_info,
                                "Invalid NULL for XrTrackableImageANDROID \"trackable\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrTrackableImageANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetTrackableImageANDROID", objects_info,
                                                        false, true, trackable);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetTrackableImageANDROID-trackable-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetTrackableImageANDROID",
                                objects_info,
                                "Command xrGetTrackableImageANDROID param trackable is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetTrackableImageANDROID(
    XrTrackableTrackerANDROID tracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackableImageANDROID* trackable) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_trackabletrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_trackabletrackerandroid_info = info_with_instance.first;
        (void)gen_trackabletrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetTrackableImageANDROID(tracker, getInfo, trackable);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetTrackableImageANDROID(
    XrTrackableTrackerANDROID tracker,
    const XrTrackableGetInfoANDROID* getInfo,
    XrTrackableImageANDROID* trackable) {
    XrResult test_result = GenValidUsageInputsXrGetTrackableImageANDROID(tracker, getInfo, trackable);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetTrackableImageANDROID(tracker, getInfo, trackable);
}


// ---- XR_ANDROID_scene_meshing extension commands
XrResult GenValidUsageInputsXrEnumerateSupportedSemanticLabelSetsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedSemanticLabelSetsInputCapacity,
uint32_t* supportedSemanticLabelSetsOutputCount,
XrSceneMeshSemanticLabelSetANDROID* supportedSemanticLabelSets) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSupportedSemanticLabelSetsANDROID-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedSemanticLabelSetsANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when supportedSemanticLabelSetsInputCapacity is non-zero
        if (0 != supportedSemanticLabelSetsInputCapacity && nullptr == supportedSemanticLabelSets) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedSemanticLabelSetsANDROID-supportedSemanticLabelSets-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedSemanticLabelSetsANDROID",
                                objects_info,
                                "Command xrEnumerateSupportedSemanticLabelSetsANDROID param supportedSemanticLabelSets is NULL, but supportedSemanticLabelSetsInputCapacity is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == supportedSemanticLabelSetsOutputCount) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSupportedSemanticLabelSetsANDROID-supportedSemanticLabelSetsOutputCount-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSupportedSemanticLabelSetsANDROID", objects_info,
                                "Invalid NULL for uint32_t \"supportedSemanticLabelSetsOutputCount\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSupportedSemanticLabelSetsANDROID-supportedSemanticLabelSetsOutputCount-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSupportedSemanticLabelSetsANDROID-supportedSemanticLabelSets-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSupportedSemanticLabelSetsANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t supportedSemanticLabelSetsInputCapacity,
    uint32_t* supportedSemanticLabelSetsOutputCount,
    XrSceneMeshSemanticLabelSetANDROID* supportedSemanticLabelSets) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSupportedSemanticLabelSetsANDROID(instance, systemId, supportedSemanticLabelSetsInputCapacity, supportedSemanticLabelSetsOutputCount, supportedSemanticLabelSets);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSupportedSemanticLabelSetsANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t supportedSemanticLabelSetsInputCapacity,
    uint32_t* supportedSemanticLabelSetsOutputCount,
    XrSceneMeshSemanticLabelSetANDROID* supportedSemanticLabelSets) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSupportedSemanticLabelSetsANDROID(instance, systemId, supportedSemanticLabelSetsInputCapacity, supportedSemanticLabelSetsOutputCount, supportedSemanticLabelSets);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSupportedSemanticLabelSetsANDROID(instance, systemId, supportedSemanticLabelSetsInputCapacity, supportedSemanticLabelSetsOutputCount, supportedSemanticLabelSets);
}

XrResult GenValidUsageInputsXrCreateSceneMeshingTrackerANDROID(
XrSession session,
const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
XrSceneMeshingTrackerANDROID* tracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSceneMeshingTrackerANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMeshingTrackerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneMeshingTrackerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMeshingTrackerANDROID", objects_info,
                                "Invalid NULL for XrSceneMeshingTrackerCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneMeshingTrackerCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSceneMeshingTrackerANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneMeshingTrackerANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMeshingTrackerANDROID",
                                objects_info,
                                "Command xrCreateSceneMeshingTrackerANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == tracker) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneMeshingTrackerANDROID-tracker-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMeshingTrackerANDROID", objects_info,
                                "Invalid NULL for XrSceneMeshingTrackerANDROID \"tracker\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSceneMeshingTrackerANDROID(
    XrSession session,
    const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
    XrSceneMeshingTrackerANDROID* tracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSceneMeshingTrackerANDROID(session, createInfo, tracker);
        if (XR_SUCCESS == result && nullptr != tracker) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_scenemeshingtrackerandroid_info.insert(*tracker, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSceneMeshingTrackerANDROID(
    XrSession session,
    const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
    XrSceneMeshingTrackerANDROID* tracker) {
    XrResult test_result = GenValidUsageInputsXrCreateSceneMeshingTrackerANDROID(session, createInfo, tracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSceneMeshingTrackerANDROID(session, createInfo, tracker);
}

XrResult GenValidUsageInputsXrDestroySceneMeshingTrackerANDROID(
XrSceneMeshingTrackerANDROID tracker) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMeshingTrackerANDROIDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMeshingTrackerANDROID handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySceneMeshingTrackerANDROID-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySceneMeshingTrackerANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemeshingtrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_scenemeshingtrackerandroid_info = info_with_instance.first;
        (void)gen_scenemeshingtrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySceneMeshingTrackerANDROID(
    XrSceneMeshingTrackerANDROID tracker) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemeshingtrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_scenemeshingtrackerandroid_info = info_with_instance.first;
        (void)gen_scenemeshingtrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySceneMeshingTrackerANDROID(tracker);
        if (XR_SUCCEEDED(result)) {
            g_scenemeshingtrackerandroid_info.erase(tracker);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySceneMeshingTrackerANDROID(
    XrSceneMeshingTrackerANDROID tracker) {
    XrResult test_result = GenValidUsageInputsXrDestroySceneMeshingTrackerANDROID(tracker);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySceneMeshingTrackerANDROID(tracker);
}

XrResult GenValidUsageInputsXrCreateSceneMeshSnapshotANDROID(
XrSceneMeshingTrackerANDROID tracker,
const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(tracker, XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMeshingTrackerANDROIDHandle(&tracker);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMeshingTrackerANDROID handle \"tracker\" ";
                oss << HandleToHexString(tracker);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSceneMeshSnapshotANDROID-tracker-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMeshSnapshotANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemeshingtrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_scenemeshingtrackerandroid_info = info_with_instance.first;
        (void)gen_scenemeshingtrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneMeshSnapshotANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMeshSnapshotANDROID", objects_info,
                                "Invalid NULL for XrSceneMeshSnapshotCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneMeshSnapshotCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSceneMeshSnapshotANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneMeshSnapshotANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMeshSnapshotANDROID",
                                objects_info,
                                "Command xrCreateSceneMeshSnapshotANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == outSnapshotCreationResult) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneMeshSnapshotANDROID-outSnapshotCreationResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMeshSnapshotANDROID", objects_info,
                                "Invalid NULL for XrSceneMeshSnapshotCreationResultANDROID \"outSnapshotCreationResult\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSceneMeshSnapshotCreationResultANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSceneMeshSnapshotANDROID", objects_info,
                                                        false, true, outSnapshotCreationResult);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSceneMeshSnapshotANDROID-outSnapshotCreationResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSceneMeshSnapshotANDROID",
                                objects_info,
                                "Command xrCreateSceneMeshSnapshotANDROID param outSnapshotCreationResult is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSceneMeshSnapshotANDROID(
    XrSceneMeshingTrackerANDROID tracker,
    const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
    XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemeshingtrackerandroid_info.getWithInstanceInfo(tracker);
        GenValidUsageXrHandleInfo *gen_scenemeshingtrackerandroid_info = info_with_instance.first;
        (void)gen_scenemeshingtrackerandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSceneMeshSnapshotANDROID(tracker, createInfo, outSnapshotCreationResult);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSceneMeshSnapshotANDROID(
    XrSceneMeshingTrackerANDROID tracker,
    const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
    XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult) {
    XrResult test_result = GenValidUsageInputsXrCreateSceneMeshSnapshotANDROID(tracker, createInfo, outSnapshotCreationResult);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSceneMeshSnapshotANDROID(tracker, createInfo, outSnapshotCreationResult);
}

XrResult GenValidUsageInputsXrDestroySceneMeshSnapshotANDROID(
XrSceneMeshSnapshotANDROID snapshot) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMeshSnapshotANDROIDHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMeshSnapshotANDROID handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySceneMeshSnapshotANDROID-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySceneMeshSnapshotANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemeshsnapshotandroid_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_scenemeshsnapshotandroid_info = info_with_instance.first;
        (void)gen_scenemeshsnapshotandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySceneMeshSnapshotANDROID(
    XrSceneMeshSnapshotANDROID snapshot) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemeshsnapshotandroid_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_scenemeshsnapshotandroid_info = info_with_instance.first;
        (void)gen_scenemeshsnapshotandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySceneMeshSnapshotANDROID(snapshot);
        if (XR_SUCCEEDED(result)) {
            g_scenemeshsnapshotandroid_info.erase(snapshot);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySceneMeshSnapshotANDROID(
    XrSceneMeshSnapshotANDROID snapshot) {
    XrResult test_result = GenValidUsageInputsXrDestroySceneMeshSnapshotANDROID(snapshot);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySceneMeshSnapshotANDROID(snapshot);
}

XrResult GenValidUsageInputsXrGetAllSubmeshStatesANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshStateCapacityInput,
uint32_t* submeshStateCountOutput,
XrSceneSubmeshStateANDROID* submeshStates) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMeshSnapshotANDROIDHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMeshSnapshotANDROID handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetAllSubmeshStatesANDROID-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAllSubmeshStatesANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemeshsnapshotandroid_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_scenemeshsnapshotandroid_info = info_with_instance.first;
        (void)gen_scenemeshsnapshotandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when submeshStateCapacityInput is non-zero
        if (0 != submeshStateCapacityInput && nullptr == submeshStates) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetAllSubmeshStatesANDROID-submeshStates-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAllSubmeshStatesANDROID",
                                objects_info,
                                "Command xrGetAllSubmeshStatesANDROID param submeshStates is NULL, but submeshStateCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == submeshStateCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetAllSubmeshStatesANDROID-submeshStateCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAllSubmeshStatesANDROID", objects_info,
                                "Invalid NULL for uint32_t \"submeshStateCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetAllSubmeshStatesANDROID-submeshStateCountOutput-parameter" type
        if (submeshStates) {
            for (uint32_t value_submeshstates_inc = 0; value_submeshstates_inc < submeshStateCapacityInput; ++value_submeshstates_inc) {
                // Validate that the structure XrSceneSubmeshStateANDROID is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrGetAllSubmeshStatesANDROID", objects_info,
                                                                true, true, &submeshStates[value_submeshstates_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrGetAllSubmeshStatesANDROID-submeshStates-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetAllSubmeshStatesANDROID",
                                        objects_info,
                                        "Command xrGetAllSubmeshStatesANDROID param submeshStates is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetAllSubmeshStatesANDROID(
    XrSceneMeshSnapshotANDROID snapshot,
    uint32_t submeshStateCapacityInput,
    uint32_t* submeshStateCountOutput,
    XrSceneSubmeshStateANDROID* submeshStates) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemeshsnapshotandroid_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_scenemeshsnapshotandroid_info = info_with_instance.first;
        (void)gen_scenemeshsnapshotandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetAllSubmeshStatesANDROID(snapshot, submeshStateCapacityInput, submeshStateCountOutput, submeshStates);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetAllSubmeshStatesANDROID(
    XrSceneMeshSnapshotANDROID snapshot,
    uint32_t submeshStateCapacityInput,
    uint32_t* submeshStateCountOutput,
    XrSceneSubmeshStateANDROID* submeshStates) {
    XrResult test_result = GenValidUsageInputsXrGetAllSubmeshStatesANDROID(snapshot, submeshStateCapacityInput, submeshStateCountOutput, submeshStates);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetAllSubmeshStatesANDROID(snapshot, submeshStateCapacityInput, submeshStateCountOutput, submeshStates);
}

XrResult GenValidUsageInputsXrGetSubmeshDataANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshDataCount,
XrSceneSubmeshDataANDROID* inoutSubmeshData) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSceneMeshSnapshotANDROIDHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSceneMeshSnapshotANDROID handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSubmeshDataANDROID-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSubmeshDataANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_scenemeshsnapshotandroid_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_scenemeshsnapshotandroid_info = info_with_instance.first;
        (void)gen_scenemeshsnapshotandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional array length must be non-zero
        if (0 >= submeshDataCount && nullptr != inoutSubmeshData) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSubmeshDataANDROID-submeshDataCount-arraylength",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSubmeshDataANDROID",
                                objects_info,
                                "Command xrGetSubmeshDataANDROID param submeshDataCount is non-optional and must be greater than 0");
            xr_result = XR_ERROR_VALIDATION_FAILURE;
        }
        // Pointer/array variable with a length variable.  Make sure that
        // if length variable is non-zero that the pointer is not NULL
        if (nullptr == inoutSubmeshData && 0 != submeshDataCount) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSubmeshDataANDROID-inoutSubmeshData-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSubmeshDataANDROID", objects_info,
                                "Invalid NULL for XrSceneSubmeshDataANDROID \"inoutSubmeshData\" is which not "
                                "optional since \"submeshDataCount\" is set and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        if (inoutSubmeshData) {
            for (uint32_t value_inoutsubmeshdata_inc = 0; value_inoutsubmeshdata_inc < submeshDataCount; ++value_inoutsubmeshdata_inc) {
                // Validate that the structure XrSceneSubmeshDataANDROID is valid
                xr_result = ValidateXrStruct(gen_instance_info, "xrGetSubmeshDataANDROID", objects_info,
                                                                true, true, &inoutSubmeshData[value_inoutsubmeshdata_inc]);
                if (XR_SUCCESS != xr_result) {
                    CoreValidLogMessage(gen_instance_info, "VUID-xrGetSubmeshDataANDROID-inoutSubmeshData-parameter",
                                        VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSubmeshDataANDROID",
                                        objects_info,
                                        "Command xrGetSubmeshDataANDROID param inoutSubmeshData is invalid");
                    return xr_result;
                }
            }
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSubmeshDataANDROID(
    XrSceneMeshSnapshotANDROID snapshot,
    uint32_t submeshDataCount,
    XrSceneSubmeshDataANDROID* inoutSubmeshData) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_scenemeshsnapshotandroid_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_scenemeshsnapshotandroid_info = info_with_instance.first;
        (void)gen_scenemeshsnapshotandroid_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSubmeshDataANDROID(snapshot, submeshDataCount, inoutSubmeshData);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSubmeshDataANDROID(
    XrSceneMeshSnapshotANDROID snapshot,
    uint32_t submeshDataCount,
    XrSceneSubmeshDataANDROID* inoutSubmeshData) {
    XrResult test_result = GenValidUsageInputsXrGetSubmeshDataANDROID(snapshot, submeshDataCount, inoutSubmeshData);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSubmeshDataANDROID(snapshot, submeshDataCount, inoutSubmeshData);
}


// ---- XR_EXT_spatial_entity extension commands
XrResult GenValidUsageInputsXrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSpatialCapabilitiesEXT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialCapabilitiesEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when capabilityCapacityInput is non-zero
        if (0 != capabilityCapacityInput && nullptr == capabilities) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialCapabilitiesEXT-capabilities-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialCapabilitiesEXT",
                                objects_info,
                                "Command xrEnumerateSpatialCapabilitiesEXT param capabilities is NULL, but capabilityCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == capabilityCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialCapabilitiesEXT-capabilityCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialCapabilitiesEXT", objects_info,
                                "Invalid NULL for uint32_t \"capabilityCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSpatialCapabilitiesEXT-capabilityCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSpatialCapabilitiesEXT-capabilities-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSpatialCapabilitiesEXT(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t capabilityCapacityInput,
    uint32_t* capabilityCountOutput,
    XrSpatialCapabilityEXT* capabilities) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCapacityInput, capabilityCountOutput, capabilities);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSpatialCapabilitiesEXT(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t capabilityCapacityInput,
    uint32_t* capabilityCountOutput,
    XrSpatialCapabilityEXT* capabilities) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCapacityInput, capabilityCountOutput, capabilities);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCapacityInput, capabilityCountOutput, capabilities);
}

XrResult GenValidUsageInputsXrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSpatialCapabilityComponentTypesEXT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialCapabilityComponentTypesEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrSpatialCapabilityEXT value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrEnumerateSpatialCapabilityComponentTypesEXT", "xrEnumerateSpatialCapabilityComponentTypesEXT", "capability", objects_info, capability)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrSpatialCapabilityEXT \"capability\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(capability));
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialCapabilityComponentTypesEXT-capability-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrEnumerateSpatialCapabilityComponentTypesEXT",
                                objects_info, oss_enum.str());
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == capabilityComponents) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialCapabilityComponentTypesEXT-capabilityComponents-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialCapabilityComponentTypesEXT", objects_info,
                                "Invalid NULL for XrSpatialCapabilityComponentTypesEXT \"capabilityComponents\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialCapabilityComponentTypesEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrEnumerateSpatialCapabilityComponentTypesEXT", objects_info,
                                                        false, true, capabilityComponents);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialCapabilityComponentTypesEXT-capabilityComponents-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialCapabilityComponentTypesEXT",
                                objects_info,
                                "Command xrEnumerateSpatialCapabilityComponentTypesEXT param capabilityComponents is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSpatialCapabilityComponentTypesEXT(
    XrInstance instance,
    XrSystemId systemId,
    XrSpatialCapabilityEXT capability,
    XrSpatialCapabilityComponentTypesEXT* capabilityComponents) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, capability, capabilityComponents);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSpatialCapabilityComponentTypesEXT(
    XrInstance instance,
    XrSystemId systemId,
    XrSpatialCapabilityEXT capability,
    XrSpatialCapabilityComponentTypesEXT* capabilityComponents) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, capability, capabilityComponents);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, capability, capabilityComponents);
}

XrResult GenValidUsageInputsXrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSpatialCapabilityFeaturesEXT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialCapabilityFeaturesEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Make sure the enum type XrSpatialCapabilityEXT value is valid
        if (!ValidateXrEnum(gen_instance_info, "xrEnumerateSpatialCapabilityFeaturesEXT", "xrEnumerateSpatialCapabilityFeaturesEXT", "capability", objects_info, capability)) {
            std::ostringstream oss_enum;
            oss_enum << "Invalid XrSpatialCapabilityEXT \"capability\" enum value ";
            oss_enum << Uint64ToHexString(static_cast<uint64_t>(capability));
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialCapabilityFeaturesEXT-capability-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_WARNING, "xrEnumerateSpatialCapabilityFeaturesEXT",
                                objects_info, oss_enum.str());
        }
        // Optional array must be non-NULL when capabilityFeatureCapacityInput is non-zero
        if (0 != capabilityFeatureCapacityInput && nullptr == capabilityFeatures) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialCapabilityFeaturesEXT-capabilityFeatures-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialCapabilityFeaturesEXT",
                                objects_info,
                                "Command xrEnumerateSpatialCapabilityFeaturesEXT param capabilityFeatures is NULL, but capabilityFeatureCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == capabilityFeatureCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialCapabilityFeaturesEXT-capabilityFeatureCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialCapabilityFeaturesEXT", objects_info,
                                "Invalid NULL for uint32_t \"capabilityFeatureCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSpatialCapabilityFeaturesEXT-capabilityFeatureCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSpatialCapabilityFeaturesEXT-capabilityFeatures-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSpatialCapabilityFeaturesEXT(
    XrInstance instance,
    XrSystemId systemId,
    XrSpatialCapabilityEXT capability,
    uint32_t capabilityFeatureCapacityInput,
    uint32_t* capabilityFeatureCountOutput,
    XrSpatialCapabilityFeatureEXT* capabilityFeatures) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSpatialCapabilityFeaturesEXT(instance, systemId, capability, capabilityFeatureCapacityInput, capabilityFeatureCountOutput, capabilityFeatures);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSpatialCapabilityFeaturesEXT(
    XrInstance instance,
    XrSystemId systemId,
    XrSpatialCapabilityEXT capability,
    uint32_t capabilityFeatureCapacityInput,
    uint32_t* capabilityFeatureCountOutput,
    XrSpatialCapabilityFeatureEXT* capabilityFeatures) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, capability, capabilityFeatureCapacityInput, capabilityFeatureCountOutput, capabilityFeatures);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, capability, capabilityFeatureCapacityInput, capabilityFeatureCountOutput, capabilityFeatures);
}

XrResult GenValidUsageInputsXrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialContextAsyncEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialContextAsyncEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialContextAsyncEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialContextAsyncEXT", objects_info,
                                "Invalid NULL for XrSpatialContextCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialContextCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialContextAsyncEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialContextAsyncEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialContextAsyncEXT",
                                objects_info,
                                "Command xrCreateSpatialContextAsyncEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialContextAsyncEXT-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialContextAsyncEXT", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSpatialContextAsyncEXT-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialContextAsyncEXT(
    XrSession session,
    const XrSpatialContextCreateInfoEXT* createInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialContextAsyncEXT(session, createInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialContextAsyncEXT(
    XrSession session,
    const XrSpatialContextCreateInfoEXT* createInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialContextAsyncEXT(session, createInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialContextAsyncEXT(session, createInfo, future);
}

XrResult GenValidUsageInputsXrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialContextCompleteEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialContextCompleteEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialContextCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialContextCompleteEXT", objects_info,
                                "Invalid NULL for XrCreateSpatialContextCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrCreateSpatialContextCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialContextCompleteEXT", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialContextCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialContextCompleteEXT",
                                objects_info,
                                "Command xrCreateSpatialContextCompleteEXT param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialContextCompleteEXT(
    XrSession session,
    XrFutureEXT future,
    XrCreateSpatialContextCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialContextCompleteEXT(session, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialContextCompleteEXT(
    XrSession session,
    XrFutureEXT future,
    XrCreateSpatialContextCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialContextCompleteEXT(session, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialContextCompleteEXT(session, future, completion);
}

XrResult GenValidUsageInputsXrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialContext, XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&spatialContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
                oss << HandleToHexString(spatialContext);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpatialContextEXT-spatialContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpatialContextEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpatialContextEXT(
    XrSpatialContextEXT spatialContext) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpatialContextEXT(spatialContext);
        if (XR_SUCCEEDED(result)) {
            g_spatialcontextext_info.erase(spatialContext);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpatialContextEXT(
    XrSpatialContextEXT spatialContext) {
    XrResult test_result = GenValidUsageInputsXrDestroySpatialContextEXT(spatialContext);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpatialContextEXT(spatialContext);
}

XrResult GenValidUsageInputsXrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialContext, XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&spatialContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
                oss << HandleToHexString(spatialContext);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialDiscoverySnapshotAsyncEXT-spatialContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialDiscoverySnapshotAsyncEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialDiscoverySnapshotAsyncEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialDiscoverySnapshotAsyncEXT", objects_info,
                                "Invalid NULL for XrSpatialDiscoverySnapshotCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialDiscoverySnapshotCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialDiscoverySnapshotAsyncEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialDiscoverySnapshotAsyncEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialDiscoverySnapshotAsyncEXT",
                                objects_info,
                                "Command xrCreateSpatialDiscoverySnapshotAsyncEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialDiscoverySnapshotAsyncEXT-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialDiscoverySnapshotAsyncEXT", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSpatialDiscoverySnapshotAsyncEXT-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialDiscoverySnapshotAsyncEXT(
    XrSpatialContextEXT spatialContext,
    const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, createInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialDiscoverySnapshotAsyncEXT(
    XrSpatialContextEXT spatialContext,
    const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, createInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, createInfo, future);
}

XrResult GenValidUsageInputsXrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialContext, XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&spatialContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
                oss << HandleToHexString(spatialContext);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialDiscoverySnapshotCompleteEXT-spatialContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialDiscoverySnapshotCompleteEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createSnapshotCompletionInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialDiscoverySnapshotCompleteEXT-createSnapshotCompletionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialDiscoverySnapshotCompleteEXT", objects_info,
                                "Invalid NULL for XrCreateSpatialDiscoverySnapshotCompletionInfoEXT \"createSnapshotCompletionInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrCreateSpatialDiscoverySnapshotCompletionInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialDiscoverySnapshotCompleteEXT", objects_info,
                                                        true, true, createSnapshotCompletionInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialDiscoverySnapshotCompleteEXT-createSnapshotCompletionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialDiscoverySnapshotCompleteEXT",
                                objects_info,
                                "Command xrCreateSpatialDiscoverySnapshotCompleteEXT param createSnapshotCompletionInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialDiscoverySnapshotCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialDiscoverySnapshotCompleteEXT", objects_info,
                                "Invalid NULL for XrCreateSpatialDiscoverySnapshotCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrCreateSpatialDiscoverySnapshotCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialDiscoverySnapshotCompleteEXT", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialDiscoverySnapshotCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialDiscoverySnapshotCompleteEXT",
                                objects_info,
                                "Command xrCreateSpatialDiscoverySnapshotCompleteEXT param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialDiscoverySnapshotCompleteEXT(
    XrSpatialContextEXT spatialContext,
    const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
    XrCreateSpatialDiscoverySnapshotCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, createSnapshotCompletionInfo, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialDiscoverySnapshotCompleteEXT(
    XrSpatialContextEXT spatialContext,
    const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
    XrCreateSpatialDiscoverySnapshotCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, createSnapshotCompletionInfo, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, createSnapshotCompletionInfo, completion);
}

XrResult GenValidUsageInputsXrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrQuerySpatialComponentDataEXT-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialComponentDataEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == queryCondition) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialComponentDataEXT-queryCondition-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialComponentDataEXT", objects_info,
                                "Invalid NULL for XrSpatialComponentDataQueryConditionEXT \"queryCondition\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialComponentDataQueryConditionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySpatialComponentDataEXT", objects_info,
                                                        true, true, queryCondition);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialComponentDataEXT-queryCondition-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialComponentDataEXT",
                                objects_info,
                                "Command xrQuerySpatialComponentDataEXT param queryCondition is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == queryResult) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialComponentDataEXT-queryResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialComponentDataEXT", objects_info,
                                "Invalid NULL for XrSpatialComponentDataQueryResultEXT \"queryResult\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialComponentDataQueryResultEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrQuerySpatialComponentDataEXT", objects_info,
                                                        false, true, queryResult);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrQuerySpatialComponentDataEXT-queryResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrQuerySpatialComponentDataEXT",
                                objects_info,
                                "Command xrQuerySpatialComponentDataEXT param queryResult is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrQuerySpatialComponentDataEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialComponentDataQueryConditionEXT* queryCondition,
    XrSpatialComponentDataQueryResultEXT* queryResult) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->QuerySpatialComponentDataEXT(snapshot, queryCondition, queryResult);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrQuerySpatialComponentDataEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialComponentDataQueryConditionEXT* queryCondition,
    XrSpatialComponentDataQueryResultEXT* queryResult) {
    XrResult test_result = GenValidUsageInputsXrQuerySpatialComponentDataEXT(snapshot, queryCondition, queryResult);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrQuerySpatialComponentDataEXT(snapshot, queryCondition, queryResult);
}

XrResult GenValidUsageInputsXrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpatialSnapshotEXT-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpatialSnapshotEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpatialSnapshotEXT(
    XrSpatialSnapshotEXT snapshot) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpatialSnapshotEXT(snapshot);
        if (XR_SUCCEEDED(result)) {
            g_spatialsnapshotext_info.erase(snapshot);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpatialSnapshotEXT(
    XrSpatialSnapshotEXT snapshot) {
    XrResult test_result = GenValidUsageInputsXrDestroySpatialSnapshotEXT(snapshot);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpatialSnapshotEXT(snapshot);
}

XrResult GenValidUsageInputsXrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialContext, XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&spatialContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
                oss << HandleToHexString(spatialContext);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialEntityFromIdEXT-spatialContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialEntityFromIdEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialEntityFromIdEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialEntityFromIdEXT", objects_info,
                                "Invalid NULL for XrSpatialEntityFromIdCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialEntityFromIdCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialEntityFromIdEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialEntityFromIdEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialEntityFromIdEXT",
                                objects_info,
                                "Command xrCreateSpatialEntityFromIdEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == spatialEntity) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialEntityFromIdEXT-spatialEntity-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialEntityFromIdEXT", objects_info,
                                "Invalid NULL for XrSpatialEntityEXT \"spatialEntity\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialEntityFromIdEXT(
    XrSpatialContextEXT spatialContext,
    const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
    XrSpatialEntityEXT* spatialEntity) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialEntityFromIdEXT(spatialContext, createInfo, spatialEntity);
        if (XR_SUCCESS == result && nullptr != spatialEntity) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT;
            handle_info->direct_parent_handle = MakeHandleGeneric(spatialContext);
            g_spatialentityext_info.insert(*spatialEntity, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialEntityFromIdEXT(
    XrSpatialContextEXT spatialContext,
    const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
    XrSpatialEntityEXT* spatialEntity) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialEntityFromIdEXT(spatialContext, createInfo, spatialEntity);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialEntityFromIdEXT(spatialContext, createInfo, spatialEntity);
}

XrResult GenValidUsageInputsXrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialEntity, XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialEntityEXTHandle(&spatialEntity);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialEntityEXT handle \"spatialEntity\" ";
                oss << HandleToHexString(spatialEntity);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpatialEntityEXT-spatialEntity-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpatialEntityEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialentityext_info.getWithInstanceInfo(spatialEntity);
        GenValidUsageXrHandleInfo *gen_spatialentityext_info = info_with_instance.first;
        (void)gen_spatialentityext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpatialEntityEXT(
    XrSpatialEntityEXT spatialEntity) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialentityext_info.getWithInstanceInfo(spatialEntity);
        GenValidUsageXrHandleInfo *gen_spatialentityext_info = info_with_instance.first;
        (void)gen_spatialentityext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpatialEntityEXT(spatialEntity);
        if (XR_SUCCEEDED(result)) {
            g_spatialentityext_info.erase(spatialEntity);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpatialEntityEXT(
    XrSpatialEntityEXT spatialEntity) {
    XrResult test_result = GenValidUsageInputsXrDestroySpatialEntityEXT(spatialEntity);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpatialEntityEXT(spatialEntity);
}

XrResult GenValidUsageInputsXrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialContext, XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&spatialContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
                oss << HandleToHexString(spatialContext);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialUpdateSnapshotEXT-spatialContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialUpdateSnapshotEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialUpdateSnapshotEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialUpdateSnapshotEXT", objects_info,
                                "Invalid NULL for XrSpatialUpdateSnapshotCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialUpdateSnapshotCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialUpdateSnapshotEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialUpdateSnapshotEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialUpdateSnapshotEXT",
                                objects_info,
                                "Command xrCreateSpatialUpdateSnapshotEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == snapshot) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialUpdateSnapshotEXT-snapshot-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialUpdateSnapshotEXT", objects_info,
                                "Invalid NULL for XrSpatialSnapshotEXT \"snapshot\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialUpdateSnapshotEXT(
    XrSpatialContextEXT spatialContext,
    const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
    XrSpatialSnapshotEXT* snapshot) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialUpdateSnapshotEXT(spatialContext, createInfo, snapshot);
        if (XR_SUCCESS == result && nullptr != snapshot) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT;
            handle_info->direct_parent_handle = MakeHandleGeneric(spatialContext);
            g_spatialsnapshotext_info.insert(*snapshot, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialUpdateSnapshotEXT(
    XrSpatialContextEXT spatialContext,
    const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
    XrSpatialSnapshotEXT* snapshot) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialUpdateSnapshotEXT(spatialContext, createInfo, snapshot);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialUpdateSnapshotEXT(spatialContext, createInfo, snapshot);
}

XrResult GenValidUsageInputsXrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialBufferStringEXT-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferStringEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferStringEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferStringEXT", objects_info,
                                "Invalid NULL for XrSpatialBufferGetInfoEXT \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialBufferGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialBufferStringEXT", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferStringEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferStringEXT",
                                objects_info,
                                "Command xrGetSpatialBufferStringEXT param info is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferStringEXT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferStringEXT",
                                objects_info,
                                "Command xrGetSpatialBufferStringEXT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferStringEXT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferStringEXT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpatialBufferStringEXT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSpatialBufferStringEXT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialBufferStringEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialBufferStringEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialBufferStringEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    char* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialBufferStringEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialBufferStringEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialBufferUint8EXT-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint8EXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint8EXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint8EXT", objects_info,
                                "Invalid NULL for XrSpatialBufferGetInfoEXT \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialBufferGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialBufferUint8EXT", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint8EXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint8EXT",
                                objects_info,
                                "Command xrGetSpatialBufferUint8EXT param info is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint8EXT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint8EXT",
                                objects_info,
                                "Command xrGetSpatialBufferUint8EXT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint8EXT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint8EXT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpatialBufferUint8EXT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSpatialBufferUint8EXT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialBufferUint8EXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint8_t* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialBufferUint8EXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialBufferUint8EXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint8_t* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialBufferUint8EXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialBufferUint8EXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialBufferUint16EXT-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint16EXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint16EXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint16EXT", objects_info,
                                "Invalid NULL for XrSpatialBufferGetInfoEXT \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialBufferGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialBufferUint16EXT", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint16EXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint16EXT",
                                objects_info,
                                "Command xrGetSpatialBufferUint16EXT param info is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint16EXT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint16EXT",
                                objects_info,
                                "Command xrGetSpatialBufferUint16EXT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint16EXT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint16EXT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpatialBufferUint16EXT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSpatialBufferUint16EXT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialBufferUint16EXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint16_t* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialBufferUint16EXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialBufferUint16EXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint16_t* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialBufferUint16EXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialBufferUint16EXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialBufferUint32EXT-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint32EXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint32EXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint32EXT", objects_info,
                                "Invalid NULL for XrSpatialBufferGetInfoEXT \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialBufferGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialBufferUint32EXT", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint32EXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint32EXT",
                                objects_info,
                                "Command xrGetSpatialBufferUint32EXT param info is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint32EXT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint32EXT",
                                objects_info,
                                "Command xrGetSpatialBufferUint32EXT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferUint32EXT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferUint32EXT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpatialBufferUint32EXT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSpatialBufferUint32EXT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialBufferUint32EXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint32_t* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialBufferUint32EXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialBufferUint32EXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    uint32_t* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialBufferUint32EXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialBufferUint32EXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialBufferFloatEXT-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferFloatEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferFloatEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferFloatEXT", objects_info,
                                "Invalid NULL for XrSpatialBufferGetInfoEXT \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialBufferGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialBufferFloatEXT", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferFloatEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferFloatEXT",
                                objects_info,
                                "Command xrGetSpatialBufferFloatEXT param info is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferFloatEXT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferFloatEXT",
                                objects_info,
                                "Command xrGetSpatialBufferFloatEXT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferFloatEXT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferFloatEXT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpatialBufferFloatEXT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSpatialBufferFloatEXT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialBufferFloatEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    float* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialBufferFloatEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialBufferFloatEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    float* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialBufferFloatEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialBufferFloatEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialBufferVector2fEXT-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector2fEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferVector2fEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector2fEXT", objects_info,
                                "Invalid NULL for XrSpatialBufferGetInfoEXT \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialBufferGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialBufferVector2fEXT", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferVector2fEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector2fEXT",
                                objects_info,
                                "Command xrGetSpatialBufferVector2fEXT param info is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferVector2fEXT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector2fEXT",
                                objects_info,
                                "Command xrGetSpatialBufferVector2fEXT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferVector2fEXT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector2fEXT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpatialBufferVector2fEXT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSpatialBufferVector2fEXT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialBufferVector2fEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    XrVector2f* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialBufferVector2fEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialBufferVector2fEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    XrVector2f* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialBufferVector2fEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialBufferVector2fEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
}

XrResult GenValidUsageInputsXrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(snapshot, XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialSnapshotEXTHandle(&snapshot);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialSnapshotEXT handle \"snapshot\" ";
                oss << HandleToHexString(snapshot);
                CoreValidLogMessage(nullptr, "VUID-xrGetSpatialBufferVector3fEXT-snapshot-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector3fEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == info) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferVector3fEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector3fEXT", objects_info,
                                "Invalid NULL for XrSpatialBufferGetInfoEXT \"info\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialBufferGetInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetSpatialBufferVector3fEXT", objects_info,
                                                        true, true, info);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferVector3fEXT-info-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector3fEXT",
                                objects_info,
                                "Command xrGetSpatialBufferVector3fEXT param info is invalid");
            return xr_result;
        }
        // Optional array must be non-NULL when bufferCapacityInput is non-zero
        if (0 != bufferCapacityInput && nullptr == buffer) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferVector3fEXT-buffer-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector3fEXT",
                                objects_info,
                                "Command xrGetSpatialBufferVector3fEXT param buffer is NULL, but bufferCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == bufferCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetSpatialBufferVector3fEXT-bufferCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetSpatialBufferVector3fEXT", objects_info,
                                "Invalid NULL for uint32_t \"bufferCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrGetSpatialBufferVector3fEXT-bufferCountOutput-parameter" type
        // NOTE: Can't validate "VUID-xrGetSpatialBufferVector3fEXT-buffer-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetSpatialBufferVector3fEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    XrVector3f* buffer) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialsnapshotext_info.getWithInstanceInfo(snapshot);
        GenValidUsageXrHandleInfo *gen_spatialsnapshotext_info = info_with_instance.first;
        (void)gen_spatialsnapshotext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetSpatialBufferVector3fEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetSpatialBufferVector3fEXT(
    XrSpatialSnapshotEXT snapshot,
    const XrSpatialBufferGetInfoEXT* info,
    uint32_t bufferCapacityInput,
    uint32_t* bufferCountOutput,
    XrVector3f* buffer) {
    XrResult test_result = GenValidUsageInputsXrGetSpatialBufferVector3fEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetSpatialBufferVector3fEXT(snapshot, info, bufferCapacityInput, bufferCountOutput, buffer);
}


// ---- XR_EXT_stationary_reference_space extension commands
XrResult GenValidUsageInputsXrGetStationaryReferenceSpaceGenerationIdEXT(
XrSession session,
const XrStationaryReferenceSpaceGenerationIdGetInfoEXT* getInfo,
XrStationaryReferenceSpaceGenerationIdResultEXT* generationIdResult) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrGetStationaryReferenceSpaceGenerationIdEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetStationaryReferenceSpaceGenerationIdEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Validate that the structure XrStationaryReferenceSpaceGenerationIdGetInfoEXT is valid
        if (nullptr != getInfo) {
            xr_result = ValidateXrStruct(gen_instance_info, "xrGetStationaryReferenceSpaceGenerationIdEXT",
                                                            objects_info, false, true, getInfo);
            if (XR_SUCCESS != xr_result) {
                CoreValidLogMessage(gen_instance_info, "VUID-xrGetStationaryReferenceSpaceGenerationIdEXT-getInfo-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetStationaryReferenceSpaceGenerationIdEXT",
                                    objects_info,
                                    "Command xrGetStationaryReferenceSpaceGenerationIdEXT param getInfo is invalid");
                return xr_result;
            }
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == generationIdResult) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetStationaryReferenceSpaceGenerationIdEXT-generationIdResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetStationaryReferenceSpaceGenerationIdEXT", objects_info,
                                "Invalid NULL for XrStationaryReferenceSpaceGenerationIdResultEXT \"generationIdResult\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrStationaryReferenceSpaceGenerationIdResultEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrGetStationaryReferenceSpaceGenerationIdEXT", objects_info,
                                                        false, true, generationIdResult);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrGetStationaryReferenceSpaceGenerationIdEXT-generationIdResult-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetStationaryReferenceSpaceGenerationIdEXT",
                                objects_info,
                                "Command xrGetStationaryReferenceSpaceGenerationIdEXT param generationIdResult is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrGetStationaryReferenceSpaceGenerationIdEXT(
    XrSession session,
    const XrStationaryReferenceSpaceGenerationIdGetInfoEXT* getInfo,
    XrStationaryReferenceSpaceGenerationIdResultEXT* generationIdResult) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->GetStationaryReferenceSpaceGenerationIdEXT(session, getInfo, generationIdResult);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetStationaryReferenceSpaceGenerationIdEXT(
    XrSession session,
    const XrStationaryReferenceSpaceGenerationIdGetInfoEXT* getInfo,
    XrStationaryReferenceSpaceGenerationIdResultEXT* generationIdResult) {
    XrResult test_result = GenValidUsageInputsXrGetStationaryReferenceSpaceGenerationIdEXT(session, getInfo, generationIdResult);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrGetStationaryReferenceSpaceGenerationIdEXT(session, getInfo, generationIdResult);
}


// ---- XR_EXT_spatial_anchor extension commands
XrResult GenValidUsageInputsXrCreateSpatialAnchorEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialAnchorCreateInfoEXT* createInfo,
XrSpatialEntityIdEXT* anchorEntityId,
XrSpatialEntityEXT* anchorEntity) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialContext, XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&spatialContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
                oss << HandleToHexString(spatialContext);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorEXT-spatialContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorEXT", objects_info,
                                "Invalid NULL for XrSpatialAnchorCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorEXT",
                                objects_info,
                                "Command xrCreateSpatialAnchorEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorEntityId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorEXT-anchorEntityId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorEXT", objects_info,
                                "Invalid NULL for XrSpatialEntityIdEXT \"anchorEntityId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSpatialAnchorEXT-anchorEntityId-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorEntity) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorEXT-anchorEntity-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorEXT", objects_info,
                                "Invalid NULL for XrSpatialEntityEXT \"anchorEntity\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorEXT(
    XrSpatialContextEXT spatialContext,
    const XrSpatialAnchorCreateInfoEXT* createInfo,
    XrSpatialEntityIdEXT* anchorEntityId,
    XrSpatialEntityEXT* anchorEntity) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorEXT(spatialContext, createInfo, anchorEntityId, anchorEntity);
        if (XR_SUCCESS == result && nullptr != anchorEntity) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT;
            handle_info->direct_parent_handle = MakeHandleGeneric(spatialContext);
            g_spatialentityext_info.insert(*anchorEntity, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorEXT(
    XrSpatialContextEXT spatialContext,
    const XrSpatialAnchorCreateInfoEXT* createInfo,
    XrSpatialEntityIdEXT* anchorEntityId,
    XrSpatialEntityEXT* anchorEntity) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorEXT(spatialContext, createInfo, anchorEntityId, anchorEntity);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorEXT(spatialContext, createInfo, anchorEntityId, anchorEntity);
}


// ---- XR_EXT_spatial_persistence extension commands
XrResult GenValidUsageInputsXrEnumerateSpatialPersistenceScopesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t persistenceScopeCapacityInput,
uint32_t* persistenceScopeCountOutput,
XrSpatialPersistenceScopeEXT* persistenceScopes) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSpatialPersistenceScopesEXT-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialPersistenceScopesEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when persistenceScopeCapacityInput is non-zero
        if (0 != persistenceScopeCapacityInput && nullptr == persistenceScopes) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialPersistenceScopesEXT-persistenceScopes-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialPersistenceScopesEXT",
                                objects_info,
                                "Command xrEnumerateSpatialPersistenceScopesEXT param persistenceScopes is NULL, but persistenceScopeCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == persistenceScopeCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialPersistenceScopesEXT-persistenceScopeCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialPersistenceScopesEXT", objects_info,
                                "Invalid NULL for uint32_t \"persistenceScopeCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSpatialPersistenceScopesEXT-persistenceScopeCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSpatialPersistenceScopesEXT-persistenceScopes-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSpatialPersistenceScopesEXT(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t persistenceScopeCapacityInput,
    uint32_t* persistenceScopeCountOutput,
    XrSpatialPersistenceScopeEXT* persistenceScopes) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSpatialPersistenceScopesEXT(instance, systemId, persistenceScopeCapacityInput, persistenceScopeCountOutput, persistenceScopes);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSpatialPersistenceScopesEXT(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t persistenceScopeCapacityInput,
    uint32_t* persistenceScopeCountOutput,
    XrSpatialPersistenceScopeEXT* persistenceScopes) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSpatialPersistenceScopesEXT(instance, systemId, persistenceScopeCapacityInput, persistenceScopeCountOutput, persistenceScopes);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSpatialPersistenceScopesEXT(instance, systemId, persistenceScopeCapacityInput, persistenceScopeCountOutput, persistenceScopes);
}

XrResult GenValidUsageInputsXrCreateSpatialPersistenceContextAsyncEXT(
XrSession session,
const XrSpatialPersistenceContextCreateInfoEXT* createInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialPersistenceContextAsyncEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialPersistenceContextAsyncEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialPersistenceContextAsyncEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialPersistenceContextAsyncEXT", objects_info,
                                "Invalid NULL for XrSpatialPersistenceContextCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialPersistenceContextCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialPersistenceContextAsyncEXT", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialPersistenceContextAsyncEXT-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialPersistenceContextAsyncEXT",
                                objects_info,
                                "Command xrCreateSpatialPersistenceContextAsyncEXT param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialPersistenceContextAsyncEXT-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialPersistenceContextAsyncEXT", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSpatialPersistenceContextAsyncEXT-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialPersistenceContextAsyncEXT(
    XrSession session,
    const XrSpatialPersistenceContextCreateInfoEXT* createInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialPersistenceContextAsyncEXT(session, createInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialPersistenceContextAsyncEXT(
    XrSession session,
    const XrSpatialPersistenceContextCreateInfoEXT* createInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialPersistenceContextAsyncEXT(session, createInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialPersistenceContextAsyncEXT(session, createInfo, future);
}

XrResult GenValidUsageInputsXrCreateSpatialPersistenceContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialPersistenceContextCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialPersistenceContextCompleteEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialPersistenceContextCompleteEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialPersistenceContextCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialPersistenceContextCompleteEXT", objects_info,
                                "Invalid NULL for XrCreateSpatialPersistenceContextCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrCreateSpatialPersistenceContextCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialPersistenceContextCompleteEXT", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialPersistenceContextCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialPersistenceContextCompleteEXT",
                                objects_info,
                                "Command xrCreateSpatialPersistenceContextCompleteEXT param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialPersistenceContextCompleteEXT(
    XrSession session,
    XrFutureEXT future,
    XrCreateSpatialPersistenceContextCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialPersistenceContextCompleteEXT(session, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialPersistenceContextCompleteEXT(
    XrSession session,
    XrFutureEXT future,
    XrCreateSpatialPersistenceContextCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialPersistenceContextCompleteEXT(session, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialPersistenceContextCompleteEXT(session, future, completion);
}

XrResult GenValidUsageInputsXrDestroySpatialPersistenceContextEXT(
XrSpatialPersistenceContextEXT persistenceContext) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(persistenceContext, XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialPersistenceContextEXTHandle(&persistenceContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialPersistenceContextEXT handle \"persistenceContext\" ";
                oss << HandleToHexString(persistenceContext);
                CoreValidLogMessage(nullptr, "VUID-xrDestroySpatialPersistenceContextEXT-persistenceContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrDestroySpatialPersistenceContextEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrDestroySpatialPersistenceContextEXT(
    XrSpatialPersistenceContextEXT persistenceContext) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->DestroySpatialPersistenceContextEXT(persistenceContext);
        if (XR_SUCCEEDED(result)) {
            g_spatialpersistencecontextext_info.erase(persistenceContext);
        }
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrDestroySpatialPersistenceContextEXT(
    XrSpatialPersistenceContextEXT persistenceContext) {
    XrResult test_result = GenValidUsageInputsXrDestroySpatialPersistenceContextEXT(persistenceContext);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrDestroySpatialPersistenceContextEXT(persistenceContext);
}


// ---- XR_EXT_haptic_parametric extension commands
XrResult GenValidUsageInputsXrHapticParametricGetPropertiesEXT(
XrSession session,
const XrHapticActionInfo* hapticActionInfo,
XrHapticParametricPropertiesEXT* parametricProperties) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrHapticParametricGetPropertiesEXT-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrHapticParametricGetPropertiesEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == hapticActionInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrHapticParametricGetPropertiesEXT-hapticActionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrHapticParametricGetPropertiesEXT", objects_info,
                                "Invalid NULL for XrHapticActionInfo \"hapticActionInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHapticActionInfo is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrHapticParametricGetPropertiesEXT", objects_info,
                                                        true, true, hapticActionInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrHapticParametricGetPropertiesEXT-hapticActionInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrHapticParametricGetPropertiesEXT",
                                objects_info,
                                "Command xrHapticParametricGetPropertiesEXT param hapticActionInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == parametricProperties) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrHapticParametricGetPropertiesEXT-parametricProperties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrHapticParametricGetPropertiesEXT", objects_info,
                                "Invalid NULL for XrHapticParametricPropertiesEXT \"parametricProperties\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrHapticParametricPropertiesEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrHapticParametricGetPropertiesEXT", objects_info,
                                                        false, true, parametricProperties);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrHapticParametricGetPropertiesEXT-parametricProperties-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrHapticParametricGetPropertiesEXT",
                                objects_info,
                                "Command xrHapticParametricGetPropertiesEXT param parametricProperties is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrHapticParametricGetPropertiesEXT(
    XrSession session,
    const XrHapticActionInfo* hapticActionInfo,
    XrHapticParametricPropertiesEXT* parametricProperties) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->HapticParametricGetPropertiesEXT(session, hapticActionInfo, parametricProperties);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrHapticParametricGetPropertiesEXT(
    XrSession session,
    const XrHapticActionInfo* hapticActionInfo,
    XrHapticParametricPropertiesEXT* parametricProperties) {
    XrResult test_result = GenValidUsageInputsXrHapticParametricGetPropertiesEXT(session, hapticActionInfo, parametricProperties);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrHapticParametricGetPropertiesEXT(session, hapticActionInfo, parametricProperties);
}


// ---- XR_EXT_spatial_persistence_operations extension commands
XrResult GenValidUsageInputsXrPersistSpatialEntityAsyncEXT(
XrSpatialPersistenceContextEXT persistenceContext,
const XrSpatialEntityPersistInfoEXT* persistInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(persistenceContext, XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialPersistenceContextEXTHandle(&persistenceContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialPersistenceContextEXT handle \"persistenceContext\" ";
                oss << HandleToHexString(persistenceContext);
                CoreValidLogMessage(nullptr, "VUID-xrPersistSpatialEntityAsyncEXT-persistenceContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialEntityAsyncEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == persistInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialEntityAsyncEXT-persistInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialEntityAsyncEXT", objects_info,
                                "Invalid NULL for XrSpatialEntityPersistInfoEXT \"persistInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialEntityPersistInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPersistSpatialEntityAsyncEXT", objects_info,
                                                        true, true, persistInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialEntityAsyncEXT-persistInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialEntityAsyncEXT",
                                objects_info,
                                "Command xrPersistSpatialEntityAsyncEXT param persistInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialEntityAsyncEXT-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialEntityAsyncEXT", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrPersistSpatialEntityAsyncEXT-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPersistSpatialEntityAsyncEXT(
    XrSpatialPersistenceContextEXT persistenceContext,
    const XrSpatialEntityPersistInfoEXT* persistInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PersistSpatialEntityAsyncEXT(persistenceContext, persistInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPersistSpatialEntityAsyncEXT(
    XrSpatialPersistenceContextEXT persistenceContext,
    const XrSpatialEntityPersistInfoEXT* persistInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrPersistSpatialEntityAsyncEXT(persistenceContext, persistInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPersistSpatialEntityAsyncEXT(persistenceContext, persistInfo, future);
}

XrResult GenValidUsageInputsXrPersistSpatialEntityCompleteEXT(
XrSpatialPersistenceContextEXT persistenceContext,
XrFutureEXT future,
XrPersistSpatialEntityCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(persistenceContext, XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialPersistenceContextEXTHandle(&persistenceContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialPersistenceContextEXT handle \"persistenceContext\" ";
                oss << HandleToHexString(persistenceContext);
                CoreValidLogMessage(nullptr, "VUID-xrPersistSpatialEntityCompleteEXT-persistenceContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialEntityCompleteEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialEntityCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialEntityCompleteEXT", objects_info,
                                "Invalid NULL for XrPersistSpatialEntityCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrPersistSpatialEntityCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrPersistSpatialEntityCompleteEXT", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrPersistSpatialEntityCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrPersistSpatialEntityCompleteEXT",
                                objects_info,
                                "Command xrPersistSpatialEntityCompleteEXT param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrPersistSpatialEntityCompleteEXT(
    XrSpatialPersistenceContextEXT persistenceContext,
    XrFutureEXT future,
    XrPersistSpatialEntityCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->PersistSpatialEntityCompleteEXT(persistenceContext, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrPersistSpatialEntityCompleteEXT(
    XrSpatialPersistenceContextEXT persistenceContext,
    XrFutureEXT future,
    XrPersistSpatialEntityCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrPersistSpatialEntityCompleteEXT(persistenceContext, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrPersistSpatialEntityCompleteEXT(persistenceContext, future, completion);
}

XrResult GenValidUsageInputsXrUnpersistSpatialEntityAsyncEXT(
XrSpatialPersistenceContextEXT persistenceContext,
const XrSpatialEntityUnpersistInfoEXT* unpersistInfo,
XrFutureEXT* future) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(persistenceContext, XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialPersistenceContextEXTHandle(&persistenceContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialPersistenceContextEXT handle \"persistenceContext\" ";
                oss << HandleToHexString(persistenceContext);
                CoreValidLogMessage(nullptr, "VUID-xrUnpersistSpatialEntityAsyncEXT-persistenceContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialEntityAsyncEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == unpersistInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialEntityAsyncEXT-unpersistInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialEntityAsyncEXT", objects_info,
                                "Invalid NULL for XrSpatialEntityUnpersistInfoEXT \"unpersistInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialEntityUnpersistInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUnpersistSpatialEntityAsyncEXT", objects_info,
                                                        true, true, unpersistInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialEntityAsyncEXT-unpersistInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialEntityAsyncEXT",
                                objects_info,
                                "Command xrUnpersistSpatialEntityAsyncEXT param unpersistInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == future) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialEntityAsyncEXT-future-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialEntityAsyncEXT", objects_info,
                                "Invalid NULL for XrFutureEXT \"future\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrUnpersistSpatialEntityAsyncEXT-future-parameter" type
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUnpersistSpatialEntityAsyncEXT(
    XrSpatialPersistenceContextEXT persistenceContext,
    const XrSpatialEntityUnpersistInfoEXT* unpersistInfo,
    XrFutureEXT* future) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UnpersistSpatialEntityAsyncEXT(persistenceContext, unpersistInfo, future);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUnpersistSpatialEntityAsyncEXT(
    XrSpatialPersistenceContextEXT persistenceContext,
    const XrSpatialEntityUnpersistInfoEXT* unpersistInfo,
    XrFutureEXT* future) {
    XrResult test_result = GenValidUsageInputsXrUnpersistSpatialEntityAsyncEXT(persistenceContext, unpersistInfo, future);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUnpersistSpatialEntityAsyncEXT(persistenceContext, unpersistInfo, future);
}

XrResult GenValidUsageInputsXrUnpersistSpatialEntityCompleteEXT(
XrSpatialPersistenceContextEXT persistenceContext,
XrFutureEXT future,
XrUnpersistSpatialEntityCompletionEXT* completion) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(persistenceContext, XR_OBJECT_TYPE_SPATIAL_PERSISTENCE_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialPersistenceContextEXTHandle(&persistenceContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialPersistenceContextEXT handle \"persistenceContext\" ";
                oss << HandleToHexString(persistenceContext);
                CoreValidLogMessage(nullptr, "VUID-xrUnpersistSpatialEntityCompleteEXT-persistenceContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialEntityCompleteEXT",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == completion) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialEntityCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialEntityCompleteEXT", objects_info,
                                "Invalid NULL for XrUnpersistSpatialEntityCompletionEXT \"completion\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrUnpersistSpatialEntityCompletionEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrUnpersistSpatialEntityCompleteEXT", objects_info,
                                                        false, true, completion);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrUnpersistSpatialEntityCompleteEXT-completion-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrUnpersistSpatialEntityCompleteEXT",
                                objects_info,
                                "Command xrUnpersistSpatialEntityCompleteEXT param completion is invalid");
            return xr_result;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrUnpersistSpatialEntityCompleteEXT(
    XrSpatialPersistenceContextEXT persistenceContext,
    XrFutureEXT future,
    XrUnpersistSpatialEntityCompletionEXT* completion) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialpersistencecontextext_info.getWithInstanceInfo(persistenceContext);
        GenValidUsageXrHandleInfo *gen_spatialpersistencecontextext_info = info_with_instance.first;
        (void)gen_spatialpersistencecontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->UnpersistSpatialEntityCompleteEXT(persistenceContext, future, completion);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrUnpersistSpatialEntityCompleteEXT(
    XrSpatialPersistenceContextEXT persistenceContext,
    XrFutureEXT future,
    XrUnpersistSpatialEntityCompletionEXT* completion) {
    XrResult test_result = GenValidUsageInputsXrUnpersistSpatialEntityCompleteEXT(persistenceContext, future, completion);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrUnpersistSpatialEntityCompleteEXT(persistenceContext, future, completion);
}


// ---- XR_ANDROID_spatial_discovery_raycast extension commands
XrResult GenValidUsageInputsXrCreateSpatialRaycastSnapshotANDROID(
XrSpatialContextEXT spatialContext,
const XrSpatialRaycastSnapshotCreateInfoANDROID* createInfo,
XrSpatialSnapshotEXT* snapshot) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(spatialContext, XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&spatialContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
                oss << HandleToHexString(spatialContext);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialRaycastSnapshotANDROID-spatialContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialRaycastSnapshotANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialRaycastSnapshotANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialRaycastSnapshotANDROID", objects_info,
                                "Invalid NULL for XrSpatialRaycastSnapshotCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialRaycastSnapshotCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialRaycastSnapshotANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialRaycastSnapshotANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialRaycastSnapshotANDROID",
                                objects_info,
                                "Command xrCreateSpatialRaycastSnapshotANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == snapshot) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialRaycastSnapshotANDROID-snapshot-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialRaycastSnapshotANDROID", objects_info,
                                "Invalid NULL for XrSpatialSnapshotEXT \"snapshot\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialRaycastSnapshotANDROID(
    XrSpatialContextEXT spatialContext,
    const XrSpatialRaycastSnapshotCreateInfoANDROID* createInfo,
    XrSpatialSnapshotEXT* snapshot) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_spatialcontextext_info.getWithInstanceInfo(spatialContext);
        GenValidUsageXrHandleInfo *gen_spatialcontextext_info = info_with_instance.first;
        (void)gen_spatialcontextext_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialRaycastSnapshotANDROID(spatialContext, createInfo, snapshot);
        if (XR_SUCCESS == result && nullptr != snapshot) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT;
            handle_info->direct_parent_handle = MakeHandleGeneric(spatialContext);
            g_spatialsnapshotext_info.insert(*snapshot, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialRaycastSnapshotANDROID(
    XrSpatialContextEXT spatialContext,
    const XrSpatialRaycastSnapshotCreateInfoANDROID* createInfo,
    XrSpatialSnapshotEXT* snapshot) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialRaycastSnapshotANDROID(spatialContext, createInfo, snapshot);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialRaycastSnapshotANDROID(spatialContext, createInfo, snapshot);
}


// ---- XR_ANDROID_spatial_entity_bound_anchor extension commands
XrResult GenValidUsageInputsXrEnumerateSpatialAnchorAttachableComponentsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t attachableComponentCapacityInput,
uint32_t* attachableComponentCountOutput,
XrSpatialComponentTypeEXT* attachableComponents) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(instance, XR_OBJECT_TYPE_INSTANCE);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrInstanceHandle(&instance);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrInstance handle \"instance\" ";
                oss << HandleToHexString(instance);
                CoreValidLogMessage(nullptr, "VUID-xrEnumerateSpatialAnchorAttachableComponentsANDROID-instance-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialAnchorAttachableComponentsANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        (void)gen_instance_info;  // quiet warnings
        // Optional array must be non-NULL when attachableComponentCapacityInput is non-zero
        if (0 != attachableComponentCapacityInput && nullptr == attachableComponents) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialAnchorAttachableComponentsANDROID-attachableComponents-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialAnchorAttachableComponentsANDROID",
                                objects_info,
                                "Command xrEnumerateSpatialAnchorAttachableComponentsANDROID param attachableComponents is NULL, but attachableComponentCapacityInput is greater than 0");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == attachableComponentCountOutput) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrEnumerateSpatialAnchorAttachableComponentsANDROID-attachableComponentCountOutput-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrEnumerateSpatialAnchorAttachableComponentsANDROID", objects_info,
                                "Invalid NULL for uint32_t \"attachableComponentCountOutput\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrEnumerateSpatialAnchorAttachableComponentsANDROID-attachableComponentCountOutput-parameter" type
                // NOTE: Can't validate "VUID-xrEnumerateSpatialAnchorAttachableComponentsANDROID-attachableComponents-parameter" output enum buffer
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrEnumerateSpatialAnchorAttachableComponentsANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t attachableComponentCapacityInput,
    uint32_t* attachableComponentCountOutput,
    XrSpatialComponentTypeEXT* attachableComponents) {
    XrResult result = XR_SUCCESS;
    try {
        GenValidUsageXrInstanceInfo *gen_instance_info = g_instance_info.get(instance);
        result = gen_instance_info->dispatch_table->EnumerateSpatialAnchorAttachableComponentsANDROID(instance, systemId, attachableComponentCapacityInput, attachableComponentCountOutput, attachableComponents);
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrEnumerateSpatialAnchorAttachableComponentsANDROID(
    XrInstance instance,
    XrSystemId systemId,
    uint32_t attachableComponentCapacityInput,
    uint32_t* attachableComponentCountOutput,
    XrSpatialComponentTypeEXT* attachableComponents) {
    XrResult test_result = GenValidUsageInputsXrEnumerateSpatialAnchorAttachableComponentsANDROID(instance, systemId, attachableComponentCapacityInput, attachableComponentCountOutput, attachableComponents);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrEnumerateSpatialAnchorAttachableComponentsANDROID(instance, systemId, attachableComponentCapacityInput, attachableComponentCountOutput, attachableComponents);
}


// ---- XR_ANDROID_spatial_anchor_space extension commands
XrResult GenValidUsageInputsXrCreateSpatialAnchorSpaceANDROID(
XrSession session,
XrSpatialContextEXT spatialContext,
const XrSpatialAnchorCreateInfoEXT* createInfo,
XrSpatialEntityIdEXT* anchorEntityId,
XrSpace* anchorSpace) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorSpaceANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(spatialContext, XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&spatialContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
                oss << HandleToHexString(spatialContext);
                CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceANDROID-spatialContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT,  MakeHandleGeneric(spatialContext), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpatialContextEXT ";
            oss_error << HandleToHexString(spatialContext);
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceANDROID-spatialContext-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceANDROID",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceANDROID", objects_info,
                                "Invalid NULL for XrSpatialAnchorCreateInfoEXT \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorCreateInfoEXT is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorSpaceANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceANDROID",
                                objects_info,
                                "Command xrCreateSpatialAnchorSpaceANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorEntityId) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceANDROID-anchorEntityId-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceANDROID", objects_info,
                                "Invalid NULL for XrSpatialEntityIdEXT \"anchorEntityId\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // NOTE: Can't validate "VUID-xrCreateSpatialAnchorSpaceANDROID-anchorEntityId-parameter" type
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorSpace) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceANDROID-anchorSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceANDROID", objects_info,
                                "Invalid NULL for XrSpace \"anchorSpace\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorSpaceANDROID(
    XrSession session,
    XrSpatialContextEXT spatialContext,
    const XrSpatialAnchorCreateInfoEXT* createInfo,
    XrSpatialEntityIdEXT* anchorEntityId,
    XrSpace* anchorSpace) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorSpaceANDROID(session, spatialContext, createInfo, anchorEntityId, anchorSpace);
        if (XR_SUCCESS == result && nullptr != anchorSpace) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*anchorSpace, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorSpaceANDROID(
    XrSession session,
    XrSpatialContextEXT spatialContext,
    const XrSpatialAnchorCreateInfoEXT* createInfo,
    XrSpatialEntityIdEXT* anchorEntityId,
    XrSpace* anchorSpace) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorSpaceANDROID(session, spatialContext, createInfo, anchorEntityId, anchorSpace);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorSpaceANDROID(session, spatialContext, createInfo, anchorEntityId, anchorSpace);
}

XrResult GenValidUsageInputsXrCreateSpatialAnchorSpaceFromIdANDROID(
XrSession session,
XrSpatialContextEXT spatialContext,
const XrSpatialAnchorSpaceFromIdCreateInfoANDROID* createInfo,
XrSpace* anchorSpace) {
    try {
        XrResult xr_result = XR_SUCCESS;
        std::vector<GenValidUsageXrObjectInfo> objects_info;
        objects_info.emplace_back(session, XR_OBJECT_TYPE_SESSION);

        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSessionHandle(&session);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSession handle \"session\" ";
                oss << HandleToHexString(session);
                CoreValidLogMessage(nullptr, "VUID-xrCreateSpatialAnchorSpaceFromIdANDROID-session-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceFromIdANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        (void)gen_instance_info;  // quiet warnings
        objects_info.emplace_back(spatialContext, XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT);
        {
            // writeValidateInlineHandleValidation
            ValidateXrHandleResult handle_result = VerifyXrSpatialContextEXTHandle(&spatialContext);
            if (handle_result != VALIDATE_XR_HANDLE_SUCCESS) {
                // Not a valid handle or NULL (which is not valid in this case)
                std::ostringstream oss;
                oss << "Invalid XrSpatialContextEXT handle \"spatialContext\" ";
                oss << HandleToHexString(spatialContext);
                CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceFromIdANDROID-spatialContext-parameter",
                                    VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceFromIdANDROID",
                                    objects_info, oss.str());
                return XR_ERROR_HANDLE_INVALID;
            }
        }
        // Verify that the handles share a common ancestry
        if (!VerifyXrParent(XR_OBJECT_TYPE_SESSION,  MakeHandleGeneric(session),
                    XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT,  MakeHandleGeneric(spatialContext), true)) {
            std::ostringstream oss_error;
            oss_error << "XrSession " << HandleToHexString(session);
            oss_error << " must be a parent to XrSpatialContextEXT ";
            oss_error << HandleToHexString(spatialContext);
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceFromIdANDROID-spatialContext-parent",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceFromIdANDROID",
                                objects_info, oss_error.str());
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == createInfo) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceFromIdANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceFromIdANDROID", objects_info,
                                "Invalid NULL for XrSpatialAnchorSpaceFromIdCreateInfoANDROID \"createInfo\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        // Validate that the structure XrSpatialAnchorSpaceFromIdCreateInfoANDROID is valid
        xr_result = ValidateXrStruct(gen_instance_info, "xrCreateSpatialAnchorSpaceFromIdANDROID", objects_info,
                                                        true, true, createInfo);
        if (XR_SUCCESS != xr_result) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceFromIdANDROID-createInfo-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceFromIdANDROID",
                                objects_info,
                                "Command xrCreateSpatialAnchorSpaceFromIdANDROID param createInfo is invalid");
            return xr_result;
        }
        // Non-optional pointer/array variable that needs to not be NULL
        if (nullptr == anchorSpace) {
            CoreValidLogMessage(gen_instance_info, "VUID-xrCreateSpatialAnchorSpaceFromIdANDROID-anchorSpace-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrCreateSpatialAnchorSpaceFromIdANDROID", objects_info,
                                "Invalid NULL for XrSpace \"anchorSpace\" which is not "
                                "optional and must be non-NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        return xr_result;
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageNextXrCreateSpatialAnchorSpaceFromIdANDROID(
    XrSession session,
    XrSpatialContextEXT spatialContext,
    const XrSpatialAnchorSpaceFromIdCreateInfoANDROID* createInfo,
    XrSpace* anchorSpace) {
    XrResult result = XR_SUCCESS;
    try {
        auto info_with_instance = g_session_info.getWithInstanceInfo(session);
        GenValidUsageXrHandleInfo *gen_session_info = info_with_instance.first;
        (void)gen_session_info;  // quiet warnings
        GenValidUsageXrInstanceInfo *gen_instance_info = info_with_instance.second;
        result = gen_instance_info->dispatch_table->CreateSpatialAnchorSpaceFromIdANDROID(session, spatialContext, createInfo, anchorSpace);
        if (XR_SUCCESS == result && nullptr != anchorSpace) {
            std::unique_ptr<GenValidUsageXrHandleInfo> handle_info(new GenValidUsageXrHandleInfo());
            handle_info->instance_info = gen_instance_info;
            handle_info->direct_parent_type = XR_OBJECT_TYPE_SESSION;
            handle_info->direct_parent_handle = MakeHandleGeneric(session);
            g_space_info.insert(*anchorSpace, std::move(handle_info));
        }
    } catch (std::bad_alloc&) {
        result = XR_ERROR_OUT_OF_MEMORY;
    } catch (...) {
        result = XR_ERROR_VALIDATION_FAILURE;
    }
    return result;
}

XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrCreateSpatialAnchorSpaceFromIdANDROID(
    XrSession session,
    XrSpatialContextEXT spatialContext,
    const XrSpatialAnchorSpaceFromIdCreateInfoANDROID* createInfo,
    XrSpace* anchorSpace) {
    XrResult test_result = GenValidUsageInputsXrCreateSpatialAnchorSpaceFromIdANDROID(session, spatialContext, createInfo, anchorSpace);
    if (XR_SUCCESS != test_result) {
        return test_result;
    }
    return GenValidUsageNextXrCreateSpatialAnchorSpaceFromIdANDROID(session, spatialContext, createInfo, anchorSpace);
}

static PFN_xrVoidFunction GenValidUsageInnerGetInstanceProcAddr(
    const char*                                 name) {
        std::string func_name = name;


        // ---- Core 1.0 commands
        if (func_name == "xrGetInstanceProcAddr") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetInstanceProcAddr);
        }
        if (func_name == "xrCreateInstance") {
            return reinterpret_cast<PFN_xrVoidFunction>(CoreValidationXrCreateInstance);
        }
        if (func_name == "xrDestroyInstance") {
            return reinterpret_cast<PFN_xrVoidFunction>(CoreValidationXrDestroyInstance);
        }
        if (func_name == "xrGetInstanceProperties") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetInstanceProperties);
        }
        if (func_name == "xrPollEvent") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPollEvent);
        }
        if (func_name == "xrResultToString") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrResultToString);
        }
        if (func_name == "xrStructureTypeToString") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStructureTypeToString);
        }
        if (func_name == "xrGetSystem") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSystem);
        }
        if (func_name == "xrGetSystemProperties") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSystemProperties);
        }
        if (func_name == "xrEnumerateEnvironmentBlendModes") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateEnvironmentBlendModes);
        }
        if (func_name == "xrCreateSession") {
            return reinterpret_cast<PFN_xrVoidFunction>(CoreValidationXrCreateSession);
        }
        if (func_name == "xrDestroySession") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySession);
        }
        if (func_name == "xrEnumerateReferenceSpaces") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateReferenceSpaces);
        }
        if (func_name == "xrCreateReferenceSpace") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateReferenceSpace);
        }
        if (func_name == "xrGetReferenceSpaceBoundsRect") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetReferenceSpaceBoundsRect);
        }
        if (func_name == "xrCreateActionSpace") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateActionSpace);
        }
        if (func_name == "xrLocateSpace") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLocateSpace);
        }
        if (func_name == "xrDestroySpace") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpace);
        }
        if (func_name == "xrEnumerateViewConfigurations") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateViewConfigurations);
        }
        if (func_name == "xrGetViewConfigurationProperties") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetViewConfigurationProperties);
        }
        if (func_name == "xrEnumerateViewConfigurationViews") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateViewConfigurationViews);
        }
        if (func_name == "xrEnumerateSwapchainFormats") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSwapchainFormats);
        }
        if (func_name == "xrCreateSwapchain") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSwapchain);
        }
        if (func_name == "xrDestroySwapchain") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySwapchain);
        }
        if (func_name == "xrEnumerateSwapchainImages") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSwapchainImages);
        }
        if (func_name == "xrAcquireSwapchainImage") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrAcquireSwapchainImage);
        }
        if (func_name == "xrWaitSwapchainImage") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrWaitSwapchainImage);
        }
        if (func_name == "xrReleaseSwapchainImage") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrReleaseSwapchainImage);
        }
        if (func_name == "xrBeginSession") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrBeginSession);
        }
        if (func_name == "xrEndSession") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEndSession);
        }
        if (func_name == "xrRequestExitSession") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestExitSession);
        }
        if (func_name == "xrWaitFrame") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrWaitFrame);
        }
        if (func_name == "xrBeginFrame") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrBeginFrame);
        }
        if (func_name == "xrEndFrame") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEndFrame);
        }
        if (func_name == "xrLocateViews") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLocateViews);
        }
        if (func_name == "xrStringToPath") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStringToPath);
        }
        if (func_name == "xrPathToString") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPathToString);
        }
        if (func_name == "xrCreateActionSet") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateActionSet);
        }
        if (func_name == "xrDestroyActionSet") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyActionSet);
        }
        if (func_name == "xrCreateAction") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateAction);
        }
        if (func_name == "xrDestroyAction") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyAction);
        }
        if (func_name == "xrSuggestInteractionProfileBindings") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSuggestInteractionProfileBindings);
        }
        if (func_name == "xrAttachSessionActionSets") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrAttachSessionActionSets);
        }
        if (func_name == "xrGetCurrentInteractionProfile") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetCurrentInteractionProfile);
        }
        if (func_name == "xrGetActionStateBoolean") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetActionStateBoolean);
        }
        if (func_name == "xrGetActionStateFloat") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetActionStateFloat);
        }
        if (func_name == "xrGetActionStateVector2f") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetActionStateVector2f);
        }
        if (func_name == "xrGetActionStatePose") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetActionStatePose);
        }
        if (func_name == "xrSyncActions") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSyncActions);
        }
        if (func_name == "xrEnumerateBoundSourcesForAction") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateBoundSourcesForAction);
        }
        if (func_name == "xrGetInputSourceLocalizedName") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetInputSourceLocalizedName);
        }
        if (func_name == "xrApplyHapticFeedback") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrApplyHapticFeedback);
        }
        if (func_name == "xrStopHapticFeedback") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStopHapticFeedback);
        }

        // ---- XR_LOADER_VERSION_1_0 extension commands

        // ---- Core 1.1 commands
        if (func_name == "xrLocateSpaces") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLocateSpaces);
        }

        // ---- XR_KHR_android_thread_settings extension commands
#if defined(XR_USE_PLATFORM_ANDROID)
        if (func_name == "xrSetAndroidApplicationThreadKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetAndroidApplicationThreadKHR);
        }
#endif // defined(XR_USE_PLATFORM_ANDROID)

        // ---- XR_KHR_android_surface_swapchain extension commands
#if defined(XR_USE_PLATFORM_ANDROID)
        if (func_name == "xrCreateSwapchainAndroidSurfaceKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSwapchainAndroidSurfaceKHR);
        }
#endif // defined(XR_USE_PLATFORM_ANDROID)

        // ---- XR_KHR_opengl_enable extension commands
#if defined(XR_USE_GRAPHICS_API_OPENGL)
        if (func_name == "xrGetOpenGLGraphicsRequirementsKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetOpenGLGraphicsRequirementsKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL)

        // ---- XR_KHR_opengl_es_enable extension commands
#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
        if (func_name == "xrGetOpenGLESGraphicsRequirementsKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetOpenGLESGraphicsRequirementsKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)

        // ---- XR_KHR_vulkan_enable extension commands
#if defined(XR_USE_GRAPHICS_API_VULKAN)
        if (func_name == "xrGetVulkanInstanceExtensionsKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVulkanInstanceExtensionsKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
        if (func_name == "xrGetVulkanDeviceExtensionsKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVulkanDeviceExtensionsKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
        if (func_name == "xrGetVulkanGraphicsDeviceKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVulkanGraphicsDeviceKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
        if (func_name == "xrGetVulkanGraphicsRequirementsKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVulkanGraphicsRequirementsKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)

        // ---- XR_KHR_D3D11_enable extension commands
#if defined(XR_USE_GRAPHICS_API_D3D11)
        if (func_name == "xrGetD3D11GraphicsRequirementsKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetD3D11GraphicsRequirementsKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_D3D11)

        // ---- XR_KHR_D3D12_enable extension commands
#if defined(XR_USE_GRAPHICS_API_D3D12)
        if (func_name == "xrGetD3D12GraphicsRequirementsKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetD3D12GraphicsRequirementsKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_D3D12)

        // ---- XR_KHR_metal_enable extension commands
#if defined(XR_USE_GRAPHICS_API_METAL)
        if (func_name == "xrGetMetalGraphicsRequirementsKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetMetalGraphicsRequirementsKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_METAL)

        // ---- XR_KHR_visibility_mask extension commands
        if (func_name == "xrGetVisibilityMaskKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVisibilityMaskKHR);
        }

        // ---- XR_KHR_win32_convert_performance_counter_time extension commands
#if defined(XR_USE_PLATFORM_WIN32)
        if (func_name == "xrConvertWin32PerformanceCounterToTimeKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrConvertWin32PerformanceCounterToTimeKHR);
        }
#endif // defined(XR_USE_PLATFORM_WIN32)
#if defined(XR_USE_PLATFORM_WIN32)
        if (func_name == "xrConvertTimeToWin32PerformanceCounterKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrConvertTimeToWin32PerformanceCounterKHR);
        }
#endif // defined(XR_USE_PLATFORM_WIN32)

        // ---- XR_KHR_convert_timespec_time extension commands
#if defined(XR_USE_TIMESPEC)
        if (func_name == "xrConvertTimespecTimeToTimeKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrConvertTimespecTimeToTimeKHR);
        }
#endif // defined(XR_USE_TIMESPEC)
#if defined(XR_USE_TIMESPEC)
        if (func_name == "xrConvertTimeToTimespecTimeKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrConvertTimeToTimespecTimeKHR);
        }
#endif // defined(XR_USE_TIMESPEC)

        // ---- XR_KHR_loader_init extension commands

        // ---- XR_KHR_vulkan_enable2 extension commands
#if defined(XR_USE_GRAPHICS_API_VULKAN)
        if (func_name == "xrCreateVulkanInstanceKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateVulkanInstanceKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
        if (func_name == "xrCreateVulkanDeviceKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateVulkanDeviceKHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
        if (func_name == "xrGetVulkanGraphicsDevice2KHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVulkanGraphicsDevice2KHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
#if defined(XR_USE_GRAPHICS_API_VULKAN)
        if (func_name == "xrGetVulkanGraphicsRequirements2KHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVulkanGraphicsRequirements2KHR);
        }
#endif // defined(XR_USE_GRAPHICS_API_VULKAN)

        // ---- XR_KHR_extended_struct_name_lengths extension commands
        if (func_name == "xrStructureTypeToString2KHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStructureTypeToString2KHR);
        }

        // ---- XR_KHR_locate_spaces extension commands
        if (func_name == "xrLocateSpacesKHR") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLocateSpacesKHR);
        }

        // ---- XR_EXT_performance_settings extension commands
        if (func_name == "xrPerfSettingsSetPerformanceLevelEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPerfSettingsSetPerformanceLevelEXT);
        }

        // ---- XR_EXT_thermal_query extension commands
        if (func_name == "xrThermalGetTemperatureTrendEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrThermalGetTemperatureTrendEXT);
        }

        // ---- XR_EXT_debug_utils extension commands
        if (func_name == "xrSetDebugUtilsObjectNameEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(CoreValidationXrSetDebugUtilsObjectNameEXT);
        }
        if (func_name == "xrCreateDebugUtilsMessengerEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(CoreValidationXrCreateDebugUtilsMessengerEXT);
        }
        if (func_name == "xrDestroyDebugUtilsMessengerEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(CoreValidationXrDestroyDebugUtilsMessengerEXT);
        }
        if (func_name == "xrSubmitDebugUtilsMessageEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSubmitDebugUtilsMessageEXT);
        }
        if (func_name == "xrSessionBeginDebugUtilsLabelRegionEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(CoreValidationXrSessionBeginDebugUtilsLabelRegionEXT);
        }
        if (func_name == "xrSessionEndDebugUtilsLabelRegionEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(CoreValidationXrSessionEndDebugUtilsLabelRegionEXT);
        }
        if (func_name == "xrSessionInsertDebugUtilsLabelEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(CoreValidationXrSessionInsertDebugUtilsLabelEXT);
        }

        // ---- XR_MSFT_spatial_anchor extension commands
        if (func_name == "xrCreateSpatialAnchorMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorMSFT);
        }
        if (func_name == "xrCreateSpatialAnchorSpaceMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorSpaceMSFT);
        }
        if (func_name == "xrDestroySpatialAnchorMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpatialAnchorMSFT);
        }

        // ---- XR_EXT_conformance_automation extension commands
        if (func_name == "xrSetInputDeviceActiveEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetInputDeviceActiveEXT);
        }
        if (func_name == "xrSetInputDeviceStateBoolEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetInputDeviceStateBoolEXT);
        }
        if (func_name == "xrSetInputDeviceStateFloatEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetInputDeviceStateFloatEXT);
        }
        if (func_name == "xrSetInputDeviceStateVector2fEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetInputDeviceStateVector2fEXT);
        }
        if (func_name == "xrSetInputDeviceLocationEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetInputDeviceLocationEXT);
        }

        // ---- XR_MSFT_spatial_graph_bridge extension commands
        if (func_name == "xrCreateSpatialGraphNodeSpaceMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialGraphNodeSpaceMSFT);
        }
        if (func_name == "xrTryCreateSpatialGraphStaticNodeBindingMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrTryCreateSpatialGraphStaticNodeBindingMSFT);
        }
        if (func_name == "xrDestroySpatialGraphNodeBindingMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpatialGraphNodeBindingMSFT);
        }
        if (func_name == "xrGetSpatialGraphNodeBindingPropertiesMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialGraphNodeBindingPropertiesMSFT);
        }

        // ---- XR_EXT_hand_tracking extension commands
        if (func_name == "xrCreateHandTrackerEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateHandTrackerEXT);
        }
        if (func_name == "xrDestroyHandTrackerEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyHandTrackerEXT);
        }
        if (func_name == "xrLocateHandJointsEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLocateHandJointsEXT);
        }

        // ---- XR_MSFT_hand_tracking_mesh extension commands
        if (func_name == "xrCreateHandMeshSpaceMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateHandMeshSpaceMSFT);
        }
        if (func_name == "xrUpdateHandMeshMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUpdateHandMeshMSFT);
        }

        // ---- XR_MSFT_controller_model extension commands
        if (func_name == "xrGetControllerModelKeyMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetControllerModelKeyMSFT);
        }
        if (func_name == "xrLoadControllerModelMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLoadControllerModelMSFT);
        }
        if (func_name == "xrGetControllerModelPropertiesMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetControllerModelPropertiesMSFT);
        }
        if (func_name == "xrGetControllerModelStateMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetControllerModelStateMSFT);
        }

        // ---- XR_MSFT_perception_anchor_interop extension commands
#if defined(XR_USE_PLATFORM_WIN32)
        if (func_name == "xrCreateSpatialAnchorFromPerceptionAnchorMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorFromPerceptionAnchorMSFT);
        }
#endif // defined(XR_USE_PLATFORM_WIN32)
#if defined(XR_USE_PLATFORM_WIN32)
        if (func_name == "xrTryGetPerceptionAnchorFromSpatialAnchorMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrTryGetPerceptionAnchorFromSpatialAnchorMSFT);
        }
#endif // defined(XR_USE_PLATFORM_WIN32)

        // ---- XR_MSFT_composition_layer_reprojection extension commands
        if (func_name == "xrEnumerateReprojectionModesMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateReprojectionModesMSFT);
        }

        // ---- XR_FB_swapchain_update_state extension commands
        if (func_name == "xrUpdateSwapchainFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUpdateSwapchainFB);
        }
        if (func_name == "xrGetSwapchainStateFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSwapchainStateFB);
        }

        // ---- XR_FB_body_tracking extension commands
        if (func_name == "xrCreateBodyTrackerFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateBodyTrackerFB);
        }
        if (func_name == "xrDestroyBodyTrackerFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyBodyTrackerFB);
        }
        if (func_name == "xrLocateBodyJointsFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLocateBodyJointsFB);
        }
        if (func_name == "xrGetBodySkeletonFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetBodySkeletonFB);
        }

        // ---- XR_MSFT_scene_understanding extension commands
        if (func_name == "xrEnumerateSceneComputeFeaturesMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSceneComputeFeaturesMSFT);
        }
        if (func_name == "xrCreateSceneObserverMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSceneObserverMSFT);
        }
        if (func_name == "xrDestroySceneObserverMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySceneObserverMSFT);
        }
        if (func_name == "xrCreateSceneMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSceneMSFT);
        }
        if (func_name == "xrDestroySceneMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySceneMSFT);
        }
        if (func_name == "xrComputeNewSceneMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrComputeNewSceneMSFT);
        }
        if (func_name == "xrGetSceneComputeStateMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSceneComputeStateMSFT);
        }
        if (func_name == "xrGetSceneComponentsMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSceneComponentsMSFT);
        }
        if (func_name == "xrLocateSceneComponentsMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLocateSceneComponentsMSFT);
        }
        if (func_name == "xrGetSceneMeshBuffersMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSceneMeshBuffersMSFT);
        }

        // ---- XR_MSFT_scene_understanding_serialization extension commands
        if (func_name == "xrDeserializeSceneMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDeserializeSceneMSFT);
        }
        if (func_name == "xrGetSerializedSceneFragmentDataMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSerializedSceneFragmentDataMSFT);
        }

        // ---- XR_FB_display_refresh_rate extension commands
        if (func_name == "xrEnumerateDisplayRefreshRatesFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateDisplayRefreshRatesFB);
        }
        if (func_name == "xrGetDisplayRefreshRateFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetDisplayRefreshRateFB);
        }
        if (func_name == "xrRequestDisplayRefreshRateFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestDisplayRefreshRateFB);
        }

        // ---- XR_HTCX_vive_tracker_interaction extension commands
        if (func_name == "xrEnumerateViveTrackerPathsHTCX") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateViveTrackerPathsHTCX);
        }

        // ---- XR_HTC_facial_tracking extension commands
        if (func_name == "xrCreateFacialTrackerHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateFacialTrackerHTC);
        }
        if (func_name == "xrDestroyFacialTrackerHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyFacialTrackerHTC);
        }
        if (func_name == "xrGetFacialExpressionsHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFacialExpressionsHTC);
        }

        // ---- XR_FB_color_space extension commands
        if (func_name == "xrEnumerateColorSpacesFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateColorSpacesFB);
        }
        if (func_name == "xrSetColorSpaceFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetColorSpaceFB);
        }

        // ---- XR_FB_hand_tracking_mesh extension commands
        if (func_name == "xrGetHandMeshFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetHandMeshFB);
        }

        // ---- XR_FB_spatial_entity extension commands
        if (func_name == "xrCreateSpatialAnchorFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorFB);
        }
        if (func_name == "xrGetSpaceUuidFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceUuidFB);
        }
        if (func_name == "xrEnumerateSpaceSupportedComponentsFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSpaceSupportedComponentsFB);
        }
        if (func_name == "xrSetSpaceComponentStatusFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetSpaceComponentStatusFB);
        }
        if (func_name == "xrGetSpaceComponentStatusFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceComponentStatusFB);
        }

        // ---- XR_FB_foveation extension commands
        if (func_name == "xrCreateFoveationProfileFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateFoveationProfileFB);
        }
        if (func_name == "xrDestroyFoveationProfileFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyFoveationProfileFB);
        }

        // ---- XR_FB_keyboard_tracking extension commands
        if (func_name == "xrQuerySystemTrackedKeyboardFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQuerySystemTrackedKeyboardFB);
        }
        if (func_name == "xrCreateKeyboardSpaceFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateKeyboardSpaceFB);
        }

        // ---- XR_FB_triangle_mesh extension commands
        if (func_name == "xrCreateTriangleMeshFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateTriangleMeshFB);
        }
        if (func_name == "xrDestroyTriangleMeshFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyTriangleMeshFB);
        }
        if (func_name == "xrTriangleMeshGetVertexBufferFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrTriangleMeshGetVertexBufferFB);
        }
        if (func_name == "xrTriangleMeshGetIndexBufferFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrTriangleMeshGetIndexBufferFB);
        }
        if (func_name == "xrTriangleMeshBeginUpdateFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrTriangleMeshBeginUpdateFB);
        }
        if (func_name == "xrTriangleMeshEndUpdateFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrTriangleMeshEndUpdateFB);
        }
        if (func_name == "xrTriangleMeshBeginVertexBufferUpdateFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrTriangleMeshBeginVertexBufferUpdateFB);
        }
        if (func_name == "xrTriangleMeshEndVertexBufferUpdateFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrTriangleMeshEndVertexBufferUpdateFB);
        }

        // ---- XR_FB_passthrough extension commands
        if (func_name == "xrCreatePassthroughFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreatePassthroughFB);
        }
        if (func_name == "xrDestroyPassthroughFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyPassthroughFB);
        }
        if (func_name == "xrPassthroughStartFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPassthroughStartFB);
        }
        if (func_name == "xrPassthroughPauseFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPassthroughPauseFB);
        }
        if (func_name == "xrCreatePassthroughLayerFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreatePassthroughLayerFB);
        }
        if (func_name == "xrDestroyPassthroughLayerFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyPassthroughLayerFB);
        }
        if (func_name == "xrPassthroughLayerPauseFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPassthroughLayerPauseFB);
        }
        if (func_name == "xrPassthroughLayerResumeFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPassthroughLayerResumeFB);
        }
        if (func_name == "xrPassthroughLayerSetStyleFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPassthroughLayerSetStyleFB);
        }
        if (func_name == "xrCreateGeometryInstanceFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateGeometryInstanceFB);
        }
        if (func_name == "xrDestroyGeometryInstanceFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyGeometryInstanceFB);
        }
        if (func_name == "xrGeometryInstanceSetTransformFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGeometryInstanceSetTransformFB);
        }

        // ---- XR_FB_render_model extension commands
        if (func_name == "xrEnumerateRenderModelPathsFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateRenderModelPathsFB);
        }
        if (func_name == "xrGetRenderModelPropertiesFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetRenderModelPropertiesFB);
        }
        if (func_name == "xrLoadRenderModelFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLoadRenderModelFB);
        }

        // ---- XR_VARJO_environment_depth_estimation extension commands
        if (func_name == "xrSetEnvironmentDepthEstimationVARJO") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetEnvironmentDepthEstimationVARJO);
        }

        // ---- XR_VARJO_marker_tracking extension commands
        if (func_name == "xrSetMarkerTrackingVARJO") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetMarkerTrackingVARJO);
        }
        if (func_name == "xrSetMarkerTrackingTimeoutVARJO") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetMarkerTrackingTimeoutVARJO);
        }
        if (func_name == "xrSetMarkerTrackingPredictionVARJO") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetMarkerTrackingPredictionVARJO);
        }
        if (func_name == "xrGetMarkerSizeVARJO") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetMarkerSizeVARJO);
        }
        if (func_name == "xrCreateMarkerSpaceVARJO") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateMarkerSpaceVARJO);
        }

        // ---- XR_VARJO_view_offset extension commands
        if (func_name == "xrSetViewOffsetVARJO") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetViewOffsetVARJO);
        }

        // ---- XR_ML_compat extension commands
#if defined(XR_USE_PLATFORM_ML)
        if (func_name == "xrCreateSpaceFromCoordinateFrameUIDML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpaceFromCoordinateFrameUIDML);
        }
#endif // defined(XR_USE_PLATFORM_ML)

        // ---- XR_ML_marker_understanding extension commands
        if (func_name == "xrCreateMarkerDetectorML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateMarkerDetectorML);
        }
        if (func_name == "xrDestroyMarkerDetectorML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyMarkerDetectorML);
        }
        if (func_name == "xrSnapshotMarkerDetectorML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSnapshotMarkerDetectorML);
        }
        if (func_name == "xrGetMarkerDetectorStateML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetMarkerDetectorStateML);
        }
        if (func_name == "xrGetMarkersML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetMarkersML);
        }
        if (func_name == "xrGetMarkerReprojectionErrorML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetMarkerReprojectionErrorML);
        }
        if (func_name == "xrGetMarkerLengthML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetMarkerLengthML);
        }
        if (func_name == "xrGetMarkerNumberML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetMarkerNumberML);
        }
        if (func_name == "xrGetMarkerStringML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetMarkerStringML);
        }
        if (func_name == "xrCreateMarkerSpaceML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateMarkerSpaceML);
        }

        // ---- XR_ML_localization_map extension commands
        if (func_name == "xrEnableLocalizationEventsML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnableLocalizationEventsML);
        }
        if (func_name == "xrQueryLocalizationMapsML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQueryLocalizationMapsML);
        }
        if (func_name == "xrRequestMapLocalizationML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestMapLocalizationML);
        }
        if (func_name == "xrImportLocalizationMapML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrImportLocalizationMapML);
        }
        if (func_name == "xrCreateExportedLocalizationMapML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateExportedLocalizationMapML);
        }
        if (func_name == "xrDestroyExportedLocalizationMapML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyExportedLocalizationMapML);
        }
        if (func_name == "xrGetExportedLocalizationMapDataML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetExportedLocalizationMapDataML);
        }

        // ---- XR_ML_spatial_anchors extension commands
        if (func_name == "xrCreateSpatialAnchorsAsyncML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorsAsyncML);
        }
        if (func_name == "xrCreateSpatialAnchorsCompleteML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorsCompleteML);
        }
        if (func_name == "xrGetSpatialAnchorStateML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialAnchorStateML);
        }

        // ---- XR_ML_spatial_anchors_storage extension commands
        if (func_name == "xrCreateSpatialAnchorsStorageML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorsStorageML);
        }
        if (func_name == "xrDestroySpatialAnchorsStorageML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpatialAnchorsStorageML);
        }
        if (func_name == "xrQuerySpatialAnchorsAsyncML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQuerySpatialAnchorsAsyncML);
        }
        if (func_name == "xrQuerySpatialAnchorsCompleteML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQuerySpatialAnchorsCompleteML);
        }
        if (func_name == "xrPublishSpatialAnchorsAsyncML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPublishSpatialAnchorsAsyncML);
        }
        if (func_name == "xrPublishSpatialAnchorsCompleteML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPublishSpatialAnchorsCompleteML);
        }
        if (func_name == "xrDeleteSpatialAnchorsAsyncML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDeleteSpatialAnchorsAsyncML);
        }
        if (func_name == "xrDeleteSpatialAnchorsCompleteML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDeleteSpatialAnchorsCompleteML);
        }
        if (func_name == "xrUpdateSpatialAnchorsExpirationAsyncML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUpdateSpatialAnchorsExpirationAsyncML);
        }
        if (func_name == "xrUpdateSpatialAnchorsExpirationCompleteML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUpdateSpatialAnchorsExpirationCompleteML);
        }

        // ---- XR_MSFT_spatial_anchor_persistence extension commands
        if (func_name == "xrCreateSpatialAnchorStoreConnectionMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorStoreConnectionMSFT);
        }
        if (func_name == "xrDestroySpatialAnchorStoreConnectionMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpatialAnchorStoreConnectionMSFT);
        }
        if (func_name == "xrPersistSpatialAnchorMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPersistSpatialAnchorMSFT);
        }
        if (func_name == "xrEnumeratePersistedSpatialAnchorNamesMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumeratePersistedSpatialAnchorNamesMSFT);
        }
        if (func_name == "xrCreateSpatialAnchorFromPersistedNameMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorFromPersistedNameMSFT);
        }
        if (func_name == "xrUnpersistSpatialAnchorMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUnpersistSpatialAnchorMSFT);
        }
        if (func_name == "xrClearSpatialAnchorStoreMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrClearSpatialAnchorStoreMSFT);
        }

        // ---- XR_MSFT_scene_marker extension commands
        if (func_name == "xrGetSceneMarkerRawDataMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSceneMarkerRawDataMSFT);
        }
        if (func_name == "xrGetSceneMarkerDecodedStringMSFT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSceneMarkerDecodedStringMSFT);
        }

        // ---- XR_FB_spatial_entity_query extension commands
        if (func_name == "xrQuerySpacesFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQuerySpacesFB);
        }
        if (func_name == "xrRetrieveSpaceQueryResultsFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRetrieveSpaceQueryResultsFB);
        }

        // ---- XR_FB_spatial_entity_storage extension commands
        if (func_name == "xrSaveSpaceFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSaveSpaceFB);
        }
        if (func_name == "xrEraseSpaceFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEraseSpaceFB);
        }

        // ---- XR_OCULUS_audio_device_guid extension commands
#if defined(XR_USE_PLATFORM_WIN32)
        if (func_name == "xrGetAudioOutputDeviceGuidOculus") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetAudioOutputDeviceGuidOculus);
        }
#endif // defined(XR_USE_PLATFORM_WIN32)
#if defined(XR_USE_PLATFORM_WIN32)
        if (func_name == "xrGetAudioInputDeviceGuidOculus") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetAudioInputDeviceGuidOculus);
        }
#endif // defined(XR_USE_PLATFORM_WIN32)

        // ---- XR_FB_spatial_entity_sharing extension commands
        if (func_name == "xrShareSpacesFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrShareSpacesFB);
        }

        // ---- XR_FB_scene extension commands
        if (func_name == "xrGetSpaceBoundingBox2DFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceBoundingBox2DFB);
        }
        if (func_name == "xrGetSpaceBoundingBox3DFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceBoundingBox3DFB);
        }
        if (func_name == "xrGetSpaceSemanticLabelsFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceSemanticLabelsFB);
        }
        if (func_name == "xrGetSpaceBoundary2DFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceBoundary2DFB);
        }
        if (func_name == "xrGetSpaceRoomLayoutFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceRoomLayoutFB);
        }

        // ---- XR_ALMALENCE_digital_lens_control extension commands
        if (func_name == "xrSetDigitalLensControlALMALENCE") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetDigitalLensControlALMALENCE);
        }

        // ---- XR_FB_scene_capture extension commands
        if (func_name == "xrRequestSceneCaptureFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestSceneCaptureFB);
        }

        // ---- XR_FB_spatial_entity_container extension commands
        if (func_name == "xrGetSpaceContainerFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceContainerFB);
        }

        // ---- XR_META_foveation_eye_tracked extension commands
        if (func_name == "xrGetFoveationEyeTrackedStateMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFoveationEyeTrackedStateMETA);
        }

        // ---- XR_FB_face_tracking extension commands
        if (func_name == "xrCreateFaceTrackerFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateFaceTrackerFB);
        }
        if (func_name == "xrDestroyFaceTrackerFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyFaceTrackerFB);
        }
        if (func_name == "xrGetFaceExpressionWeightsFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFaceExpressionWeightsFB);
        }

        // ---- XR_FB_eye_tracking_social extension commands
        if (func_name == "xrCreateEyeTrackerFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateEyeTrackerFB);
        }
        if (func_name == "xrDestroyEyeTrackerFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyEyeTrackerFB);
        }
        if (func_name == "xrGetEyeGazesFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetEyeGazesFB);
        }

        // ---- XR_FB_passthrough_keyboard_hands extension commands
        if (func_name == "xrPassthroughLayerSetKeyboardHandsIntensityFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPassthroughLayerSetKeyboardHandsIntensityFB);
        }

        // ---- XR_FB_haptic_pcm extension commands
        if (func_name == "xrGetDeviceSampleRateFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetDeviceSampleRateFB);
        }

        // ---- XR_META_passthrough_preferences extension commands
        if (func_name == "xrGetPassthroughPreferencesMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetPassthroughPreferencesMETA);
        }

        // ---- XR_META_virtual_keyboard extension commands
        if (func_name == "xrCreateVirtualKeyboardMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateVirtualKeyboardMETA);
        }
        if (func_name == "xrDestroyVirtualKeyboardMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyVirtualKeyboardMETA);
        }
        if (func_name == "xrCreateVirtualKeyboardSpaceMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateVirtualKeyboardSpaceMETA);
        }
        if (func_name == "xrSuggestVirtualKeyboardLocationMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSuggestVirtualKeyboardLocationMETA);
        }
        if (func_name == "xrGetVirtualKeyboardScaleMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVirtualKeyboardScaleMETA);
        }
        if (func_name == "xrSetVirtualKeyboardModelVisibilityMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetVirtualKeyboardModelVisibilityMETA);
        }
        if (func_name == "xrGetVirtualKeyboardModelAnimationStatesMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVirtualKeyboardModelAnimationStatesMETA);
        }
        if (func_name == "xrGetVirtualKeyboardDirtyTexturesMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVirtualKeyboardDirtyTexturesMETA);
        }
        if (func_name == "xrGetVirtualKeyboardTextureDataMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetVirtualKeyboardTextureDataMETA);
        }
        if (func_name == "xrSendVirtualKeyboardInputMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSendVirtualKeyboardInputMETA);
        }
        if (func_name == "xrChangeVirtualKeyboardTextContextMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrChangeVirtualKeyboardTextContextMETA);
        }

        // ---- XR_OCULUS_external_camera extension commands
        if (func_name == "xrEnumerateExternalCamerasOCULUS") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateExternalCamerasOCULUS);
        }

        // ---- XR_META_performance_metrics extension commands
        if (func_name == "xrEnumeratePerformanceMetricsCounterPathsMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumeratePerformanceMetricsCounterPathsMETA);
        }
        if (func_name == "xrSetPerformanceMetricsStateMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetPerformanceMetricsStateMETA);
        }
        if (func_name == "xrGetPerformanceMetricsStateMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetPerformanceMetricsStateMETA);
        }
        if (func_name == "xrQueryPerformanceMetricsCounterMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQueryPerformanceMetricsCounterMETA);
        }

        // ---- XR_FB_spatial_entity_storage_batch extension commands
        if (func_name == "xrSaveSpaceListFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSaveSpaceListFB);
        }

        // ---- XR_FB_spatial_entity_user extension commands
        if (func_name == "xrCreateSpaceUserFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpaceUserFB);
        }
        if (func_name == "xrGetSpaceUserIdFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceUserIdFB);
        }
        if (func_name == "xrDestroySpaceUserFB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpaceUserFB);
        }

        // ---- XR_META_spatial_entity_discovery extension commands
        if (func_name == "xrDiscoverSpacesMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDiscoverSpacesMETA);
        }
        if (func_name == "xrRetrieveSpaceDiscoveryResultsMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRetrieveSpaceDiscoveryResultsMETA);
        }

        // ---- XR_META_recommended_layer_resolution extension commands
        if (func_name == "xrGetRecommendedLayerResolutionMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetRecommendedLayerResolutionMETA);
        }

        // ---- XR_META_spatial_entity_persistence extension commands
        if (func_name == "xrSaveSpacesMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSaveSpacesMETA);
        }
        if (func_name == "xrEraseSpacesMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEraseSpacesMETA);
        }

        // ---- XR_META_passthrough_color_lut extension commands
        if (func_name == "xrCreatePassthroughColorLutMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreatePassthroughColorLutMETA);
        }
        if (func_name == "xrDestroyPassthroughColorLutMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyPassthroughColorLutMETA);
        }
        if (func_name == "xrUpdatePassthroughColorLutMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUpdatePassthroughColorLutMETA);
        }

        // ---- XR_META_spatial_entity_mesh extension commands
        if (func_name == "xrGetSpaceTriangleMeshMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceTriangleMeshMETA);
        }

        // ---- XR_META_body_tracking_calibration extension commands
        if (func_name == "xrSuggestBodyTrackingCalibrationOverrideMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSuggestBodyTrackingCalibrationOverrideMETA);
        }
        if (func_name == "xrResetBodyTrackingCalibrationMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrResetBodyTrackingCalibrationMETA);
        }

        // ---- XR_META_body_tracking_fidelity extension commands
        if (func_name == "xrRequestBodyTrackingFidelityMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestBodyTrackingFidelityMETA);
        }

        // ---- XR_FB_face_tracking2 extension commands
        if (func_name == "xrCreateFaceTracker2FB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateFaceTracker2FB);
        }
        if (func_name == "xrDestroyFaceTracker2FB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyFaceTracker2FB);
        }
        if (func_name == "xrGetFaceExpressionWeights2FB") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFaceExpressionWeights2FB);
        }

        // ---- XR_META_spatial_entity_sharing extension commands
        if (func_name == "xrShareSpacesMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrShareSpacesMETA);
        }

        // ---- XR_META_environment_depth extension commands
        if (func_name == "xrCreateEnvironmentDepthProviderMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateEnvironmentDepthProviderMETA);
        }
        if (func_name == "xrDestroyEnvironmentDepthProviderMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyEnvironmentDepthProviderMETA);
        }
        if (func_name == "xrStartEnvironmentDepthProviderMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStartEnvironmentDepthProviderMETA);
        }
        if (func_name == "xrStopEnvironmentDepthProviderMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStopEnvironmentDepthProviderMETA);
        }
        if (func_name == "xrCreateEnvironmentDepthSwapchainMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateEnvironmentDepthSwapchainMETA);
        }
        if (func_name == "xrDestroyEnvironmentDepthSwapchainMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyEnvironmentDepthSwapchainMETA);
        }
        if (func_name == "xrEnumerateEnvironmentDepthSwapchainImagesMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateEnvironmentDepthSwapchainImagesMETA);
        }
        if (func_name == "xrGetEnvironmentDepthSwapchainStateMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetEnvironmentDepthSwapchainStateMETA);
        }
        if (func_name == "xrAcquireEnvironmentDepthImageMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrAcquireEnvironmentDepthImageMETA);
        }
        if (func_name == "xrSetEnvironmentDepthHandRemovalMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetEnvironmentDepthHandRemovalMETA);
        }

        // ---- XR_EXT_render_model extension commands
        if (func_name == "xrCreateRenderModelEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateRenderModelEXT);
        }
        if (func_name == "xrDestroyRenderModelEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyRenderModelEXT);
        }
        if (func_name == "xrGetRenderModelPropertiesEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetRenderModelPropertiesEXT);
        }
        if (func_name == "xrCreateRenderModelSpaceEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateRenderModelSpaceEXT);
        }
        if (func_name == "xrCreateRenderModelAssetEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateRenderModelAssetEXT);
        }
        if (func_name == "xrDestroyRenderModelAssetEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyRenderModelAssetEXT);
        }
        if (func_name == "xrGetRenderModelAssetDataEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetRenderModelAssetDataEXT);
        }
        if (func_name == "xrGetRenderModelAssetPropertiesEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetRenderModelAssetPropertiesEXT);
        }
        if (func_name == "xrGetRenderModelStateEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetRenderModelStateEXT);
        }

        // ---- XR_EXT_interaction_render_model extension commands
        if (func_name == "xrEnumerateInteractionRenderModelIdsEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateInteractionRenderModelIdsEXT);
        }
        if (func_name == "xrEnumerateRenderModelSubactionPathsEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateRenderModelSubactionPathsEXT);
        }
        if (func_name == "xrGetRenderModelPoseTopLevelUserPathEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetRenderModelPoseTopLevelUserPathEXT);
        }

        // ---- XR_QCOM_tracking_optimization_settings extension commands
        if (func_name == "xrSetTrackingOptimizationSettingsHintQCOM") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetTrackingOptimizationSettingsHintQCOM);
        }

        // ---- XR_QCOM_hand_tracking_gesture extension commands
        if (func_name == "xrGetHandGestureQCOM") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetHandGestureQCOM);
        }

        // ---- XR_HTC_passthrough extension commands
        if (func_name == "xrCreatePassthroughHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreatePassthroughHTC);
        }
        if (func_name == "xrDestroyPassthroughHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyPassthroughHTC);
        }

        // ---- XR_HTC_foveation extension commands
        if (func_name == "xrApplyFoveationHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrApplyFoveationHTC);
        }

        // ---- XR_HTC_anchor extension commands
        if (func_name == "xrCreateSpatialAnchorHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorHTC);
        }
        if (func_name == "xrGetSpatialAnchorNameHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialAnchorNameHTC);
        }

        // ---- XR_HTC_body_tracking extension commands
        if (func_name == "xrCreateBodyTrackerHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateBodyTrackerHTC);
        }
        if (func_name == "xrDestroyBodyTrackerHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyBodyTrackerHTC);
        }
        if (func_name == "xrLocateBodyJointsHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLocateBodyJointsHTC);
        }
        if (func_name == "xrGetBodySkeletonHTC") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetBodySkeletonHTC);
        }

        // ---- XR_MNDX_force_feedback_curl extension commands
        if (func_name == "xrApplyForceFeedbackCurlMNDX") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrApplyForceFeedbackCurlMNDX);
        }

        // ---- XR_BD_body_tracking extension commands
        if (func_name == "xrCreateBodyTrackerBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateBodyTrackerBD);
        }
        if (func_name == "xrDestroyBodyTrackerBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyBodyTrackerBD);
        }
        if (func_name == "xrLocateBodyJointsBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrLocateBodyJointsBD);
        }

        // ---- XR_BD_facial_simulation extension commands
        if (func_name == "xrEnumerateFacialSimulationModesBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateFacialSimulationModesBD);
        }
        if (func_name == "xrCreateFaceTrackerBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateFaceTrackerBD);
        }
        if (func_name == "xrDestroyFaceTrackerBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyFaceTrackerBD);
        }
        if (func_name == "xrGetFacialSimulationDataBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFacialSimulationDataBD);
        }
        if (func_name == "xrSetFacialSimulationModeBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetFacialSimulationModeBD);
        }
        if (func_name == "xrGetFacialSimulationModeBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFacialSimulationModeBD);
        }

        // ---- XR_BD_spatial_sensing extension commands
        if (func_name == "xrEnumerateSpatialEntityComponentTypesBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSpatialEntityComponentTypesBD);
        }
        if (func_name == "xrGetSpatialEntityUuidBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialEntityUuidBD);
        }
        if (func_name == "xrGetSpatialEntityComponentDataBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialEntityComponentDataBD);
        }
        if (func_name == "xrCreateSenseDataProviderBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSenseDataProviderBD);
        }
        if (func_name == "xrStartSenseDataProviderAsyncBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStartSenseDataProviderAsyncBD);
        }
        if (func_name == "xrStartSenseDataProviderCompleteBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStartSenseDataProviderCompleteBD);
        }
        if (func_name == "xrGetSenseDataProviderStateBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSenseDataProviderStateBD);
        }
        if (func_name == "xrQuerySenseDataAsyncBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQuerySenseDataAsyncBD);
        }
        if (func_name == "xrQuerySenseDataCompleteBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQuerySenseDataCompleteBD);
        }
        if (func_name == "xrDestroySenseDataSnapshotBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySenseDataSnapshotBD);
        }
        if (func_name == "xrGetQueriedSenseDataBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetQueriedSenseDataBD);
        }
        if (func_name == "xrStopSenseDataProviderBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStopSenseDataProviderBD);
        }
        if (func_name == "xrDestroySenseDataProviderBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySenseDataProviderBD);
        }
        if (func_name == "xrCreateSpatialEntityAnchorBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialEntityAnchorBD);
        }
        if (func_name == "xrDestroyAnchorBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyAnchorBD);
        }
        if (func_name == "xrGetAnchorUuidBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetAnchorUuidBD);
        }
        if (func_name == "xrCreateAnchorSpaceBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateAnchorSpaceBD);
        }

        // ---- XR_BD_spatial_anchor extension commands
        if (func_name == "xrCreateSpatialAnchorAsyncBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorAsyncBD);
        }
        if (func_name == "xrCreateSpatialAnchorCompleteBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorCompleteBD);
        }
        if (func_name == "xrPersistSpatialAnchorAsyncBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPersistSpatialAnchorAsyncBD);
        }
        if (func_name == "xrPersistSpatialAnchorCompleteBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPersistSpatialAnchorCompleteBD);
        }
        if (func_name == "xrUnpersistSpatialAnchorAsyncBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUnpersistSpatialAnchorAsyncBD);
        }
        if (func_name == "xrUnpersistSpatialAnchorCompleteBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUnpersistSpatialAnchorCompleteBD);
        }

        // ---- XR_BD_spatial_anchor_sharing extension commands
        if (func_name == "xrShareSpatialAnchorAsyncBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrShareSpatialAnchorAsyncBD);
        }
        if (func_name == "xrShareSpatialAnchorCompleteBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrShareSpatialAnchorCompleteBD);
        }
        if (func_name == "xrDownloadSharedSpatialAnchorAsyncBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDownloadSharedSpatialAnchorAsyncBD);
        }
        if (func_name == "xrDownloadSharedSpatialAnchorCompleteBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDownloadSharedSpatialAnchorCompleteBD);
        }

        // ---- XR_BD_spatial_scene extension commands
        if (func_name == "xrCaptureSceneAsyncBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCaptureSceneAsyncBD);
        }
        if (func_name == "xrCaptureSceneCompleteBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCaptureSceneCompleteBD);
        }

        // ---- XR_BD_spatial_audio_rendering extension commands
        if (func_name == "xrEnumerateSupportedAudioSampleRateBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSupportedAudioSampleRateBD);
        }
        if (func_name == "xrQueryFramesPerBufferRangeBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQueryFramesPerBufferRangeBD);
        }
        if (func_name == "xrCreateSpatialAudioRendererBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAudioRendererBD);
        }
        if (func_name == "xrDestroySpatialAudioRendererBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpatialAudioRendererBD);
        }
        if (func_name == "xrCreateSoundObstacleMaterialBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSoundObstacleMaterialBD);
        }
        if (func_name == "xrUpdateSoundObstacleMaterialConfigBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUpdateSoundObstacleMaterialConfigBD);
        }
        if (func_name == "xrDestroySoundObstacleMaterialBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySoundObstacleMaterialBD);
        }
        if (func_name == "xrCreateSoundObstacleBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSoundObstacleBD);
        }
        if (func_name == "xrUpdateSoundObstacleConfigBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUpdateSoundObstacleConfigBD);
        }
        if (func_name == "xrDestroySoundObstacleBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySoundObstacleBD);
        }
        if (func_name == "xrCreateSoundObjectBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSoundObjectBD);
        }
        if (func_name == "xrUpdateSoundObjectConfigBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUpdateSoundObjectConfigBD);
        }
        if (func_name == "xrSubmitSoundObjectBufferBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSubmitSoundObjectBufferBD);
        }
        if (func_name == "xrDestroySoundObjectBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySoundObjectBD);
        }
        if (func_name == "xrCreateSoundFieldBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSoundFieldBD);
        }
        if (func_name == "xrUpdateSoundFieldConfigBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUpdateSoundFieldConfigBD);
        }
        if (func_name == "xrSubmitSoundFieldBufferBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSubmitSoundFieldBufferBD);
        }
        if (func_name == "xrDestroySoundFieldBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySoundFieldBD);
        }
        if (func_name == "xrWaitAudioPeriodBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrWaitAudioPeriodBD);
        }
        if (func_name == "xrEndAudioPeriodBD") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEndAudioPeriodBD);
        }

        // ---- XR_EXT_plane_detection extension commands
        if (func_name == "xrCreatePlaneDetectorEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreatePlaneDetectorEXT);
        }
        if (func_name == "xrDestroyPlaneDetectorEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyPlaneDetectorEXT);
        }
        if (func_name == "xrBeginPlaneDetectionEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrBeginPlaneDetectionEXT);
        }
        if (func_name == "xrGetPlaneDetectionStateEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetPlaneDetectionStateEXT);
        }
        if (func_name == "xrGetPlaneDetectionsEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetPlaneDetectionsEXT);
        }
        if (func_name == "xrGetPlanePolygonBufferEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetPlanePolygonBufferEXT);
        }

        // ---- XR_ANDROID_trackables extension commands
        if (func_name == "xrEnumerateSupportedTrackableTypesANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSupportedTrackableTypesANDROID);
        }
        if (func_name == "xrEnumerateSupportedAnchorTrackableTypesANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSupportedAnchorTrackableTypesANDROID);
        }
        if (func_name == "xrCreateTrackableTrackerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateTrackableTrackerANDROID);
        }
        if (func_name == "xrDestroyTrackableTrackerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyTrackableTrackerANDROID);
        }
        if (func_name == "xrGetAllTrackablesANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetAllTrackablesANDROID);
        }
        if (func_name == "xrGetTrackablePlaneANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetTrackablePlaneANDROID);
        }
        if (func_name == "xrCreateAnchorSpaceANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateAnchorSpaceANDROID);
        }

        // ---- XR_ANDROID_eye_tracking extension commands
        if (func_name == "xrCreateEyeTrackerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateEyeTrackerANDROID);
        }
        if (func_name == "xrDestroyEyeTrackerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyEyeTrackerANDROID);
        }
        if (func_name == "xrGetFineTrackingEyesInfoANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFineTrackingEyesInfoANDROID);
        }
        if (func_name == "xrGetCoarseTrackingEyesInfoANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetCoarseTrackingEyesInfoANDROID);
        }

        // ---- XR_ANDROID_device_anchor_persistence extension commands
        if (func_name == "xrEnumerateSupportedPersistenceAnchorTypesANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSupportedPersistenceAnchorTypesANDROID);
        }
        if (func_name == "xrCreateDeviceAnchorPersistenceANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateDeviceAnchorPersistenceANDROID);
        }
        if (func_name == "xrDestroyDeviceAnchorPersistenceANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyDeviceAnchorPersistenceANDROID);
        }
        if (func_name == "xrPersistAnchorANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPersistAnchorANDROID);
        }
        if (func_name == "xrGetAnchorPersistStateANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetAnchorPersistStateANDROID);
        }
        if (func_name == "xrCreatePersistedAnchorSpaceANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreatePersistedAnchorSpaceANDROID);
        }
        if (func_name == "xrEnumeratePersistedAnchorsANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumeratePersistedAnchorsANDROID);
        }
        if (func_name == "xrUnpersistAnchorANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUnpersistAnchorANDROID);
        }

        // ---- XR_ANDROID_face_tracking extension commands
        if (func_name == "xrCreateFaceTrackerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateFaceTrackerANDROID);
        }
        if (func_name == "xrDestroyFaceTrackerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyFaceTrackerANDROID);
        }
        if (func_name == "xrGetFaceStateANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFaceStateANDROID);
        }
        if (func_name == "xrGetFaceCalibrationStateANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFaceCalibrationStateANDROID);
        }

        // ---- XR_ANDROID_passthrough_camera_state extension commands
        if (func_name == "xrGetPassthroughCameraStateANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetPassthroughCameraStateANDROID);
        }

        // ---- XR_ANDROID_composition_layer_passthrough_mesh extension commands
        if (func_name == "xrCreatePassthroughLayerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreatePassthroughLayerANDROID);
        }
        if (func_name == "xrDestroyPassthroughLayerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyPassthroughLayerANDROID);
        }
        if (func_name == "xrSetPassthroughLayerMeshANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetPassthroughLayerMeshANDROID);
        }

        // ---- XR_ANDROID_raycast extension commands
        if (func_name == "xrEnumerateRaycastSupportedTrackableTypesANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateRaycastSupportedTrackableTypesANDROID);
        }
        if (func_name == "xrRaycastANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRaycastANDROID);
        }

        // ---- XR_ANDROID_performance_metrics extension commands
        if (func_name == "xrEnumeratePerformanceMetricsCounterPathsANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumeratePerformanceMetricsCounterPathsANDROID);
        }
        if (func_name == "xrSetPerformanceMetricsStateANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetPerformanceMetricsStateANDROID);
        }
        if (func_name == "xrGetPerformanceMetricsStateANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetPerformanceMetricsStateANDROID);
        }
        if (func_name == "xrQueryPerformanceMetricsCounterANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQueryPerformanceMetricsCounterANDROID);
        }

        // ---- XR_ANDROID_trackables_object extension commands
        if (func_name == "xrGetTrackableObjectANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetTrackableObjectANDROID);
        }

        // ---- XR_EXT_future extension commands
        if (func_name == "xrPollFutureEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPollFutureEXT);
        }
        if (func_name == "xrCancelFutureEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCancelFutureEXT);
        }

        // ---- XR_ML_user_calibration extension commands
        if (func_name == "xrEnableUserCalibrationEventsML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnableUserCalibrationEventsML);
        }

        // ---- XR_ML_system_notifications extension commands
        if (func_name == "xrSetSystemNotificationsML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetSystemNotificationsML);
        }

        // ---- XR_ML_world_mesh_detection extension commands
        if (func_name == "xrCreateWorldMeshDetectorML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateWorldMeshDetectorML);
        }
        if (func_name == "xrDestroyWorldMeshDetectorML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyWorldMeshDetectorML);
        }
        if (func_name == "xrRequestWorldMeshStateAsyncML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestWorldMeshStateAsyncML);
        }
        if (func_name == "xrRequestWorldMeshStateCompleteML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestWorldMeshStateCompleteML);
        }
        if (func_name == "xrGetWorldMeshBufferRecommendSizeML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetWorldMeshBufferRecommendSizeML);
        }
        if (func_name == "xrAllocateWorldMeshBufferML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrAllocateWorldMeshBufferML);
        }
        if (func_name == "xrFreeWorldMeshBufferML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrFreeWorldMeshBufferML);
        }
        if (func_name == "xrRequestWorldMeshAsyncML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestWorldMeshAsyncML);
        }
        if (func_name == "xrRequestWorldMeshCompleteML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestWorldMeshCompleteML);
        }

        // ---- XR_ML_facial_expression extension commands
        if (func_name == "xrCreateFacialExpressionClientML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateFacialExpressionClientML);
        }
        if (func_name == "xrDestroyFacialExpressionClientML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyFacialExpressionClientML);
        }
        if (func_name == "xrGetFacialExpressionBlendShapePropertiesML") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetFacialExpressionBlendShapePropertiesML);
        }

        // ---- XR_META_boundary_visibility extension commands
        if (func_name == "xrRequestBoundaryVisibilityMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRequestBoundaryVisibilityMETA);
        }

        // ---- XR_META_simultaneous_hands_and_controllers extension commands
        if (func_name == "xrResumeSimultaneousHandsAndControllersTrackingMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrResumeSimultaneousHandsAndControllersTrackingMETA);
        }
        if (func_name == "xrPauseSimultaneousHandsAndControllersTrackingMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPauseSimultaneousHandsAndControllersTrackingMETA);
        }

        // ---- XR_META_spatial_entity_room_mesh extension commands
        if (func_name == "xrGetSpaceRoomMeshMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceRoomMeshMETA);
        }
        if (func_name == "xrGetSpaceRoomMeshFaceIndicesMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpaceRoomMeshFaceIndicesMETA);
        }

        // ---- XR_META_colocation_discovery extension commands
        if (func_name == "xrStartColocationDiscoveryMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStartColocationDiscoveryMETA);
        }
        if (func_name == "xrStopColocationDiscoveryMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStopColocationDiscoveryMETA);
        }
        if (func_name == "xrStartColocationAdvertisementMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStartColocationAdvertisementMETA);
        }
        if (func_name == "xrStopColocationAdvertisementMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrStopColocationAdvertisementMETA);
        }

        // ---- XR_META_environment_raycast extension commands
        if (func_name == "xrCreateEnvironmentRaycasterAsyncMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateEnvironmentRaycasterAsyncMETA);
        }
        if (func_name == "xrCreateEnvironmentRaycasterCompleteMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateEnvironmentRaycasterCompleteMETA);
        }
        if (func_name == "xrDestroyEnvironmentRaycasterMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyEnvironmentRaycasterMETA);
        }
        if (func_name == "xrPerformEnvironmentRaycastMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPerformEnvironmentRaycastMETA);
        }

        // ---- XR_META_tile_properties_hint extension commands
        if (func_name == "xrSetTilePropertiesHintMETA") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrSetTilePropertiesHintMETA);
        }

        // ---- XR_ANDROID_light_estimation extension commands
        if (func_name == "xrCreateLightEstimatorANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateLightEstimatorANDROID);
        }
        if (func_name == "xrDestroyLightEstimatorANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyLightEstimatorANDROID);
        }
        if (func_name == "xrGetLightEstimateANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetLightEstimateANDROID);
        }

        // ---- XR_ANDROID_anchor_sharing_export extension commands
#if defined(XR_USE_PLATFORM_ANDROID)
        if (func_name == "xrShareAnchorANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrShareAnchorANDROID);
        }
#endif // defined(XR_USE_PLATFORM_ANDROID)
#if defined(XR_USE_PLATFORM_ANDROID)
        if (func_name == "xrUnshareAnchorANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUnshareAnchorANDROID);
        }
#endif // defined(XR_USE_PLATFORM_ANDROID)

        // ---- XR_ANDROID_trackables_marker extension commands
        if (func_name == "xrGetTrackableMarkerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetTrackableMarkerANDROID);
        }

        // ---- XR_ANDROID_trackables_qr_code extension commands
        if (func_name == "xrGetTrackableQrCodeANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetTrackableQrCodeANDROID);
        }

        // ---- XR_ANDROID_trackables_image extension commands
        if (func_name == "xrCreateTrackableImageDatabaseAsyncANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateTrackableImageDatabaseAsyncANDROID);
        }
        if (func_name == "xrCreateTrackableImageDatabaseCompleteANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateTrackableImageDatabaseCompleteANDROID);
        }
        if (func_name == "xrDestroyTrackableImageDatabaseANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroyTrackableImageDatabaseANDROID);
        }
        if (func_name == "xrAddTrackableImageDatabaseANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrAddTrackableImageDatabaseANDROID);
        }
        if (func_name == "xrRemoveTrackableImageDatabaseANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrRemoveTrackableImageDatabaseANDROID);
        }
        if (func_name == "xrGetTrackableImageANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetTrackableImageANDROID);
        }

        // ---- XR_ANDROID_scene_meshing extension commands
        if (func_name == "xrEnumerateSupportedSemanticLabelSetsANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSupportedSemanticLabelSetsANDROID);
        }
        if (func_name == "xrCreateSceneMeshingTrackerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSceneMeshingTrackerANDROID);
        }
        if (func_name == "xrDestroySceneMeshingTrackerANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySceneMeshingTrackerANDROID);
        }
        if (func_name == "xrCreateSceneMeshSnapshotANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSceneMeshSnapshotANDROID);
        }
        if (func_name == "xrDestroySceneMeshSnapshotANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySceneMeshSnapshotANDROID);
        }
        if (func_name == "xrGetAllSubmeshStatesANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetAllSubmeshStatesANDROID);
        }
        if (func_name == "xrGetSubmeshDataANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSubmeshDataANDROID);
        }

        // ---- XR_EXT_spatial_entity extension commands
        if (func_name == "xrEnumerateSpatialCapabilitiesEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSpatialCapabilitiesEXT);
        }
        if (func_name == "xrEnumerateSpatialCapabilityComponentTypesEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSpatialCapabilityComponentTypesEXT);
        }
        if (func_name == "xrEnumerateSpatialCapabilityFeaturesEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSpatialCapabilityFeaturesEXT);
        }
        if (func_name == "xrCreateSpatialContextAsyncEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialContextAsyncEXT);
        }
        if (func_name == "xrCreateSpatialContextCompleteEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialContextCompleteEXT);
        }
        if (func_name == "xrDestroySpatialContextEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpatialContextEXT);
        }
        if (func_name == "xrCreateSpatialDiscoverySnapshotAsyncEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialDiscoverySnapshotAsyncEXT);
        }
        if (func_name == "xrCreateSpatialDiscoverySnapshotCompleteEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialDiscoverySnapshotCompleteEXT);
        }
        if (func_name == "xrQuerySpatialComponentDataEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrQuerySpatialComponentDataEXT);
        }
        if (func_name == "xrDestroySpatialSnapshotEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpatialSnapshotEXT);
        }
        if (func_name == "xrCreateSpatialEntityFromIdEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialEntityFromIdEXT);
        }
        if (func_name == "xrDestroySpatialEntityEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpatialEntityEXT);
        }
        if (func_name == "xrCreateSpatialUpdateSnapshotEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialUpdateSnapshotEXT);
        }
        if (func_name == "xrGetSpatialBufferStringEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialBufferStringEXT);
        }
        if (func_name == "xrGetSpatialBufferUint8EXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialBufferUint8EXT);
        }
        if (func_name == "xrGetSpatialBufferUint16EXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialBufferUint16EXT);
        }
        if (func_name == "xrGetSpatialBufferUint32EXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialBufferUint32EXT);
        }
        if (func_name == "xrGetSpatialBufferFloatEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialBufferFloatEXT);
        }
        if (func_name == "xrGetSpatialBufferVector2fEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialBufferVector2fEXT);
        }
        if (func_name == "xrGetSpatialBufferVector3fEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetSpatialBufferVector3fEXT);
        }

        // ---- XR_EXT_stationary_reference_space extension commands
        if (func_name == "xrGetStationaryReferenceSpaceGenerationIdEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrGetStationaryReferenceSpaceGenerationIdEXT);
        }

        // ---- XR_EXT_spatial_anchor extension commands
        if (func_name == "xrCreateSpatialAnchorEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorEXT);
        }

        // ---- XR_EXT_spatial_persistence extension commands
        if (func_name == "xrEnumerateSpatialPersistenceScopesEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSpatialPersistenceScopesEXT);
        }
        if (func_name == "xrCreateSpatialPersistenceContextAsyncEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialPersistenceContextAsyncEXT);
        }
        if (func_name == "xrCreateSpatialPersistenceContextCompleteEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialPersistenceContextCompleteEXT);
        }
        if (func_name == "xrDestroySpatialPersistenceContextEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrDestroySpatialPersistenceContextEXT);
        }

        // ---- XR_EXT_haptic_parametric extension commands
        if (func_name == "xrHapticParametricGetPropertiesEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrHapticParametricGetPropertiesEXT);
        }

        // ---- XR_EXT_spatial_persistence_operations extension commands
        if (func_name == "xrPersistSpatialEntityAsyncEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPersistSpatialEntityAsyncEXT);
        }
        if (func_name == "xrPersistSpatialEntityCompleteEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrPersistSpatialEntityCompleteEXT);
        }
        if (func_name == "xrUnpersistSpatialEntityAsyncEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUnpersistSpatialEntityAsyncEXT);
        }
        if (func_name == "xrUnpersistSpatialEntityCompleteEXT") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrUnpersistSpatialEntityCompleteEXT);
        }

        // ---- XR_ANDROID_spatial_discovery_raycast extension commands
        if (func_name == "xrCreateSpatialRaycastSnapshotANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialRaycastSnapshotANDROID);
        }

        // ---- XR_ANDROID_spatial_entity_bound_anchor extension commands
        if (func_name == "xrEnumerateSpatialAnchorAttachableComponentsANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrEnumerateSpatialAnchorAttachableComponentsANDROID);
        }

        // ---- XR_ANDROID_spatial_anchor_space extension commands
        if (func_name == "xrCreateSpatialAnchorSpaceANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorSpaceANDROID);
        }
        if (func_name == "xrCreateSpatialAnchorSpaceFromIdANDROID") {
            return reinterpret_cast<PFN_xrVoidFunction>(GenValidUsageXrCreateSpatialAnchorSpaceFromIdANDROID);
        }
        return nullptr;
    }

// API Layer's xrGetInstanceProcAddr
XRAPI_ATTR XrResult XRAPI_CALL GenValidUsageXrGetInstanceProcAddr(
    XrInstance          instance,
    const char*         name,
    PFN_xrVoidFunction* function) {
    try {
        std::string func_name = name;
        std::vector<GenValidUsageXrObjectInfo> objects;
        if (g_instance_info.verifyHandle(&instance) == VALIDATE_XR_HANDLE_INVALID) {
            // Make sure the instance is valid if it is not XR_NULL_HANDLE
            std::vector<GenValidUsageXrObjectInfo> objects;
            objects.resize(1);
            objects[0].handle = MakeHandleGeneric(instance);
            objects[0].type = XR_OBJECT_TYPE_INSTANCE;
            CoreValidLogMessage(nullptr, "VUID-xrGetInstanceProcAddr-instance-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInstanceProcAddr", objects,
                                "Invalid instance handle provided.");
        }
        // NOTE: Can't validate "VUID-xrGetInstanceProcAddr-name-parameter" null-termination
        // If we setup the function, just return
        if (function == nullptr) {
            CoreValidLogMessage(nullptr, "VUID-xrGetInstanceProcAddr-function-parameter",
                                VALID_USAGE_DEBUG_SEVERITY_ERROR, "xrGetInstanceProcAddr", objects,
                                "function is NULL");
            return XR_ERROR_VALIDATION_FAILURE;
        }
        *function = GenValidUsageInnerGetInstanceProcAddr(name);

        // GenValidUsageInnerGetInstanceProcAddr returns a wrapper for every function
        // the layer was compiled to know about, regardless of whether the runtime
        // supports it. We must verify the downstream chain also supports the function,
        // otherwise we'd return XR_SUCCESS for unsupported extension functions (e.g.
        // xrCreateHandTrackerEXT) when the spec requires XR_ERROR_FUNCTION_UNSUPPORTED.
        // For pre-instance calls (XR_NULL_HANDLE), skip the check since those are
        // core functions that are always supported.
        if (*function != nullptr) {
            if (instance == XR_NULL_HANDLE) {
                return XR_SUCCESS;
            }
            GenValidUsageXrInstanceInfo* info = g_instance_info.get(instance);
            if (nullptr != info && nullptr != info->dispatch_table) {
                PFN_xrVoidFunction next_function = nullptr;
                XrResult result = info->dispatch_table->GetInstanceProcAddr(instance, name, &next_function);
                if (XR_FAILED(result)) {
                    *function = nullptr;
                    return result;
                }
            }
            return XR_SUCCESS;
        }
        // We have not found it, so pass it down to the next layer/runtime
        GenValidUsageXrInstanceInfo* instance_valid_usage_info = g_instance_info.get(instance);
        if (nullptr == instance_valid_usage_info) {
            return XR_ERROR_HANDLE_INVALID;
        }
        return instance_valid_usage_info->dispatch_table->GetInstanceProcAddr(instance, name, function);
    } catch (...) {
        return XR_ERROR_VALIDATION_FAILURE;
    }
}

