| // Copyright (c) 2018-2020 NVIDIA Corporation |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| == Device Loss Debugging |
| |
| |
| [[device-diagnostic-checkpoints]] |
| === Device Diagnostic Checkpoints |
| |
| Device execution progress can: be tracked for the purposes of debugging a |
| device loss by annotating the command stream with application-defined |
| diagnostic checkpoints. |
| |
| [open,refpage='vkCmdSetCheckpointNV',desc='Insert diagnostic checkpoint in command stream',type='protos'] |
| -- |
| Device diagnostic checkpoints are inserted into the command stream by |
| calling flink:vkCmdSetCheckpointNV. |
| |
| include::{generated}/api/protos/vkCmdSetCheckpointNV.txt[] |
| |
| * pname:commandBuffer is the command buffer that will receive the marker |
| * pname:pCheckpointMarker is an opaque application-provided value that |
| will be associated with the checkpoint. |
| |
| include::{generated}/validity/protos/vkCmdSetCheckpointNV.txt[] |
| -- |
| |
| Note that pname:pCheckpointMarker is treated as an opaque value. |
| It does not need to be a valid pointer and will not be dereferenced by the |
| implementation. |
| |
| ifdef::VK_KHR_synchronization2[] |
| [open,refpage='vkGetQueueCheckpointData2NV',desc='Retrieve diagnostic checkpoint data',type='protos'] |
| -- |
| If the device encounters an error during execution, the implementation will |
| return a ename:VK_ERROR_DEVICE_LOST error to the application at some point |
| during host execution. |
| When this happens, the application can: call |
| flink:vkGetQueueCheckpointData2NV to retrieve information on the most recent |
| diagnostic checkpoints that were executed by the device. |
| |
| include::{generated}/api/protos/vkGetQueueCheckpointData2NV.txt[] |
| |
| * pname:queue is the slink:VkQueue object the caller would like to |
| retrieve checkpoint data for |
| * pname:pCheckpointDataCount is a pointer to an integer related to the |
| number of checkpoint markers available or queried, as described below. |
| * pname:pCheckpointData is either `NULL` or a pointer to an array of |
| sname:VkCheckpointData2NV structures. |
| |
| If pname:pCheckpointData is `NULL`, then the number of checkpoint markers |
| available is returned in pname:pCheckpointDataCount. |
| Otherwise, pname:pCheckpointDataCount must: point to a variable set by the |
| user to the number of elements in the pname:pCheckpointData array, and on |
| return the variable is overwritten with the number of structures actually |
| written to pname:pCheckpointData. |
| |
| If pname:pCheckpointDataCount is less than the number of checkpoint markers |
| available, at most pname:pCheckpointDataCount structures will be written. |
| |
| .Valid Usage |
| **** |
| * [[VUID-vkGetQueueCheckpointData2NV-queue-03892]] |
| The device that pname:queue belongs to must: be in the lost state |
| **** |
| |
| include::{generated}/validity/protos/vkGetQueueCheckpointData2NV.txt[] |
| -- |
| |
| [open,refpage='VkCheckpointData2NV',desc='Return structure for command buffer checkpoint data',type='structs'] |
| -- |
| The slink:VkCheckpointData2NV structure is defined as: |
| |
| include::{generated}/api/structs/VkCheckpointData2NV.txt[] |
| |
| * pname:sType is the type of this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:stage indicates a single pipeline stage which the checkpoint |
| marker data refers to. |
| * pname:pCheckpointMarker contains the value of the last checkpoint marker |
| executed in the stage that pname:stage refers to. |
| |
| include::{generated}/validity/structs/VkCheckpointData2NV.txt[] |
| |
| The stages at which a checkpoint marker can: be executed are |
| implementation-defined and can: be queried by calling |
| flink:vkGetPhysicalDeviceQueueFamilyProperties2. |
| -- |
| endif::VK_KHR_synchronization2[] |
| |
| [open,refpage='vkGetQueueCheckpointDataNV',desc='Retrieve diagnostic checkpoint data',type='protos'] |
| -- |
| If the device encounters an error during execution, the implementation will |
| return a ename:VK_ERROR_DEVICE_LOST error to the application at a certain |
| point during host execution. |
| When this happens, the application can: call |
| flink:vkGetQueueCheckpointDataNV to retrieve information on the most recent |
| diagnostic checkpoints that were executed by the device. |
| |
| include::{generated}/api/protos/vkGetQueueCheckpointDataNV.txt[] |
| |
| * pname:queue is the slink:VkQueue object the caller would like to |
| retrieve checkpoint data for |
| * pname:pCheckpointDataCount is a pointer to an integer related to the |
| number of checkpoint markers available or queried, as described below. |
| * pname:pCheckpointData is either `NULL` or a pointer to an array of |
| sname:VkCheckpointDataNV structures. |
| |
| If pname:pCheckpointData is `NULL`, then the number of checkpoint markers |
| available is returned in pname:pCheckpointDataCount. |
| |
| Otherwise, pname:pCheckpointDataCount must: point to a variable set by the |
| user to the number of elements in the pname:pCheckpointData array, and on |
| return the variable is overwritten with the number of structures actually |
| written to pname:pCheckpointData. |
| |
| If pname:pCheckpointDataCount is less than the number of checkpoint markers |
| available, at most pname:pCheckpointDataCount structures will be written. |
| |
| .Valid Usage |
| **** |
| * [[VUID-vkGetQueueCheckpointDataNV-queue-02025]] |
| The device that pname:queue belongs to must: be in the lost state |
| **** |
| |
| include::{generated}/validity/protos/vkGetQueueCheckpointDataNV.txt[] |
| -- |
| |
| [open,refpage='VkCheckpointDataNV',desc='Return structure for command buffer checkpoint data',type='structs'] |
| -- |
| The slink:VkCheckpointDataNV structure is defined as: |
| |
| include::{generated}/api/structs/VkCheckpointDataNV.txt[] |
| |
| * pname:sType is the type of this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:stage is a ename:VkPipelineStageFlagBits value specifying which |
| pipeline stage the checkpoint marker data refers to. |
| * pname:pCheckpointMarker contains the value of the last checkpoint marker |
| executed in the stage that pname:stage refers to. |
| |
| The stages at which a checkpoint marker can: be executed are |
| implementation-defined and can: be queried by calling |
| flink:vkGetPhysicalDeviceQueueFamilyProperties2. |
| |
| include::{generated}/validity/structs/VkCheckpointDataNV.txt[] |
| -- |