// Copyright (c) 2018-2020 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

ifdef::VK_KHR_synchronization2[]
[open,refpage='VkQueueFamilyCheckpointProperties2NV',desc='Return structure for queue family checkpoint information query',type='structs']
--
The slink:VkQueueFamilyCheckpointProperties2NV structure is defined as:

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

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:checkpointExecutionStageMask is a mask indicating which pipeline
    stages the implementation can execute checkpoint markers in.

Additional queue family information can be queried by setting
slink:VkQueueFamilyProperties2::pname:pNext to point to a
sname:VkQueueFamilyCheckpointProperties2NV structure.

include::{generated}/validity/structs/VkQueueFamilyCheckpointProperties2NV.txt[]
--
endif::VK_KHR_synchronization2[]

[open,refpage='VkQueueFamilyCheckpointPropertiesNV',desc='Return structure for queue family checkpoint information query',type='structs']
--
The slink:VkQueueFamilyCheckpointPropertiesNV structure is defined as:

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

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:checkpointExecutionStageMask is a mask indicating which pipeline
    stages the implementation can execute checkpoint markers in.

Additional queue family information can be queried by setting
slink:VkQueueFamilyProperties2::pname:pNext to point to a
sname:VkQueueFamilyCheckpointPropertiesNV structure.

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