// Copyright 2018-2021 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

[open,refpage='VkValidationFlagsEXT',desc='Specify validation checks to disable for a Vulkan instance',type='structs']
--
When creating a Vulkan instance for which you wish to disable validation
checks, add a slink:VkValidationFlagsEXT structure to the pname:pNext chain
of the slink:VkInstanceCreateInfo structure, specifying the checks to be
disabled.

include::{generated}/api/structs/VkValidationFlagsEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:disabledValidationCheckCount is the number of checks to disable.
  * pname:pDisabledValidationChecks is a pointer to an array of
    elink:VkValidationCheckEXT values specifying the validation checks to be
    disabled.

include::{generated}/validity/structs/VkValidationFlagsEXT.txt[]
--

[open,refpage='VkValidationCheckEXT',desc='Specify validation checks to disable',type='enums']
--
Possible values of elements of the
slink:VkValidationFlagsEXT::pname:pDisabledValidationChecks array,
specifying validation checks to be disabled, are:

include::{generated}/api/enums/VkValidationCheckEXT.txt[]

  * ename:VK_VALIDATION_CHECK_ALL_EXT specifies that all validation checks
    are disabled.
  * ename:VK_VALIDATION_CHECK_SHADERS_EXT specifies that shader validation
    is disabled.
--
