| // Copyright (c) 2018-2020 Advanced Micro Devices, Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| [[copies-buffer-markers]] |
| == Buffer Markers |
| |
| ifdef::VK_KHR_synchronization2[] |
| |
| [open,refpage='vkCmdWriteBufferMarker2AMD',desc='Execute a pipelined write of a marker value into a buffer',type='protos'] |
| -- |
| :refpage: vkCmdWriteBufferMarker2AMD |
| |
| To write a 32-bit marker value into a buffer as a pipelined operation, call: |
| |
| include::{generated}/api/protos/vkCmdWriteBufferMarker2AMD.txt[] |
| |
| * pname:commandBuffer is the command buffer into which the command will be |
| recorded. |
| * pname:stage specifies the pipeline stage whose completion triggers the |
| marker write. |
| * pname:dstBuffer is the buffer where the marker will be written. |
| * pname:dstOffset is the byte offset into the buffer where the marker will |
| be written. |
| * pname:marker is the 32-bit value of the marker. |
| |
| The command will write the 32-bit marker value into the buffer only after |
| all preceding commands have finished executing up to at least the specified |
| pipeline stage. |
| This includes the completion of other preceding |
| fname:vkCmdWriteBufferMarker2AMD commands so long as their specified |
| pipeline stages occur either at the same time or earlier than this command's |
| specified pname:stage. |
| |
| While consecutive buffer marker writes with the same pname:stage parameter |
| implicitly complete in submission order, memory and execution dependencies |
| between buffer marker writes and other operations must: still be explicitly |
| ordered using synchronization commands. |
| The access scope for buffer marker writes falls under the |
| ename:VK_ACCESS_TRANSFER_WRITE_BIT, and the pipeline stages for identifying |
| the synchronization scope must: include both pname:stage and |
| ename:VK_PIPELINE_STAGE_TRANSFER_BIT. |
| |
| [NOTE] |
| .Note |
| ==== |
| Similar to fname:vkCmdWriteTimestamp2KHR, if an implementation is unable to |
| write a marker at any specific pipeline stage, it may: instead do so at any |
| logically later stage. |
| ==== |
| |
| [NOTE] |
| .Note |
| ==== |
| Implementations may: only support a limited number of pipelined marker write |
| operations in flight at a given time. |
| Thus an excessive number of marker write operations may: degrade command |
| execution performance. |
| ==== |
| |
| .Valid Usage |
| **** |
| :stageMaskName: stage |
| include::{chapters}/commonvalidity/stage_mask_2_common.txt[] |
| * [[VUID-vkCmdWriteBufferMarker2AMD-synchronization2-03893]] |
| The <<features-synchronization2, pname:synchronization2>> feature must: |
| be enabled |
| * [[VUID-vkCmdWriteBufferMarker2AMD-stage-03894]] |
| pname:stage must: include only a single pipeline stage |
| * [[VUID-vkCmdWriteBufferMarker2AMD-stage-03895]] |
| pname:stage must: include only stages that are valid for the queue |
| family that was used to create the command pool that pname:commandBuffer |
| was allocated from |
| * [[VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03896]] |
| pname:dstOffset must: be less than or equal to the size of |
| pname:dstBuffer minus `4` |
| * [[VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03897]] |
| pname:dstBuffer must: have been created with the |
| ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag |
| * [[VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03898]] |
| If pname:dstBuffer is non-sparse then it must: be bound completely and |
| contiguously to a single sname:VkDeviceMemory object |
| * [[VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03899]] |
| pname:dstOffset must: be a multiple of `4` |
| **** |
| |
| include::{generated}/validity/protos/vkCmdWriteBufferMarker2AMD.txt[] |
| -- |
| endif::VK_KHR_synchronization2[] |
| |
| [open,refpage='vkCmdWriteBufferMarkerAMD',desc='Execute a pipelined write of a marker value into a buffer',type='protos'] |
| -- |
| :refpage: vkCmdWriteBufferMarkerAMD |
| |
| To write a 32-bit marker value into a buffer as a pipelined operation, call: |
| |
| include::{generated}/api/protos/vkCmdWriteBufferMarkerAMD.txt[] |
| |
| * pname:commandBuffer is the command buffer into which the command will be |
| recorded. |
| * pname:pipelineStage is a elink:VkPipelineStageFlagBits value specifying |
| the pipeline stage whose completion triggers the marker write. |
| * pname:dstBuffer is the buffer where the marker will be written to. |
| * pname:dstOffset is the byte offset into the buffer where the marker will |
| be written to. |
| * pname:marker is the 32-bit value of the marker. |
| |
| The command will write the 32-bit marker value into the buffer only after |
| all preceding commands have finished executing up to at least the specified |
| pipeline stage. |
| This includes the completion of other preceding |
| fname:vkCmdWriteBufferMarkerAMD commands so long as their specified pipeline |
| stages occur either at the same time or earlier than this command's |
| specified pname:pipelineStage. |
| |
| While consecutive buffer marker writes with the same pname:pipelineStage |
| parameter are implicitly complete in submission order, memory and execution |
| dependencies between buffer marker writes and other operations must still be |
| explicitly ordered using synchronization commands. |
| The access scope for buffer marker writes falls under the |
| ename:VK_ACCESS_TRANSFER_WRITE_BIT, and the pipeline stages for identifying |
| the synchronization scope must: include both pname:pipelineStage and |
| ename:VK_PIPELINE_STAGE_TRANSFER_BIT. |
| |
| [NOTE] |
| .Note |
| ==== |
| Similar to fname:vkCmdWriteTimestamp, if an implementation is unable to |
| write a marker at any specific pipeline stage, it may: instead do so at any |
| logically later stage. |
| ==== |
| |
| [NOTE] |
| .Note |
| ==== |
| Implementations may: only support a limited number of pipelined marker write |
| operations in flight at a given time, thus excessive number of marker write |
| operations may: degrade command execution performance. |
| ==== |
| |
| .Valid Usage |
| **** |
| include::{chapters}/commonvalidity/pipeline_stage_common.txt[] |
| * [[VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01798]] |
| pname:dstOffset must: be less than or equal to the size of |
| pname:dstBuffer minus `4` |
| * [[VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01799]] |
| pname:dstBuffer must: have been created with |
| ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag |
| * [[VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01800]] |
| If pname:dstBuffer is non-sparse then it must: be bound completely and |
| contiguously to a single sname:VkDeviceMemory object |
| * [[VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01801]] |
| pname:dstOffset must: be a multiple of `4` |
| **** |
| |
| include::{generated}/validity/protos/vkCmdWriteBufferMarkerAMD.txt[] |
| -- |