| [[copies-buffer-markers]] |
| == Buffer Markers |
| |
| [open,refpage='vkCmdWriteBufferMarkerAMD',desc='Execute a pipelined write of a marker value into a buffer',type='protos'] |
| -- |
| |
| To write a 32-bit marker value into a buffer as a pipelined operation, call: |
| |
| include::../../api/protos/vkCmdWriteBufferMarkerAMD.txt[] |
| |
| * pname:commandBuffer is the command buffer into which the command will be |
| recorded. |
| * pname:pipelineStage is one of the elink:VkPipelineStageFlagBits values, |
| 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 |
| ename: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 |
| **** |
| * [[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::../../validity/protos/vkCmdWriteBufferMarkerAMD.txt[] |
| -- |