1. Preamble

Copyright 2014-2023 The Khronos Group Inc.

This Specification is protected by copyright laws and contains material proprietary to Khronos. Except as described by these terms, it or any components may not be reproduced, republished, distributed, transmitted, displayed, broadcast or otherwise exploited in any manner without the express prior written permission of Khronos.

Khronos grants a conditional copyright license to use and reproduce the unmodified Specification for any purpose, without fee or royalty, EXCEPT no licenses to any patent, trademark or other intellectual property rights are granted under these terms.

Khronos makes no, and expressly disclaims any, representations or warranties, express or implied, regarding this Specification, including, without limitation: merchantability, fitness for a particular purpose, non-infringement of any intellectual property, correctness, accuracy, completeness, timeliness, and reliability. Under no circumstances will Khronos, or any of its Promoters, Contributors or Members, or their respective partners, officers, directors, employees, agents or representatives be liable for any damages, whether direct, indirect, special or consequential damages for lost revenues, lost profits, or otherwise, arising from or in connection with these materials.

This document contains extensions which are not ratified by Khronos, and as such is not a ratified Specification, though it contains text from (and is a superset of) the ratified Vulkan Specification. The ratified versions of the Vulkan Specification can be found at https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html (core only) and https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html (core with all ratified extensions) .

This Specification contains substantially unmodified functionality from, and is a successor to, Khronos specifications including OpenGL, OpenGL ES and OpenCL.

The Khronos Intellectual Property Rights Policy defines the terms 'Scope', 'Compliant Portion', and 'Necessary Patent Claims'.

Some parts of this Specification are purely informative and so are EXCLUDED the Scope of this Specification. The [introduction-conventions] section of the [introduction] defines how these parts of the Specification are identified.

Where this Specification uses technical terminology, defined in the Glossary or otherwise, that refer to enabling technologies that are not expressly set forth in this Specification, those enabling technologies are EXCLUDED from the Scope of this Specification. For clarity, enabling technologies not disclosed with particularity in this Specification (e.g. semiconductor manufacturing technology, hardware architecture, processor architecture or microarchitecture, memory architecture, compiler technology, object oriented technology, basic operating system technology, compression technology, algorithms, and so on) are NOT to be considered expressly set forth; only those application program interfaces and data structures disclosed with particularity are included in the Scope of this Specification.

For purposes of the Khronos Intellectual Property Rights Policy as it relates to the definition of Necessary Patent Claims, all recommended or optional features, behaviors and functionality set forth in this Specification, if implemented, are considered to be included as Compliant Portions.

Where this Specification identifies specific sections of external references, only those specifically identified sections define normative functionality. The Khronos Intellectual Property Rights Policy excludes external references to materials and associated enabling technology not created by Khronos from the Scope of this Specification, and any licenses that may be required to implement such referenced materials and associated technologies must be obtained separately and may involve royalty payments.

Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo is a trademark of Hewlett Packard Enterprise, used under license by Khronos. ASTC is a trademark of ARM Holdings PLC. All other product names, trademarks, and/or company names are used solely for identification and belong to their respective owners.

2. Lorem

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Congue eu consequat ac felis donec et odio. Enim nec dui nunc mattis enim. Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum. Nam libero justo laoreet sit amet. Lacus luctus accumsan tortor posuere. Ultrices tincidunt arcu non sodales. Ut enim blandit volutpat maecenas volutpat blandit aliquam etiam. Sed id semper risus in. Natoque penatibus et magnis dis parturient montes.

Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet. Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Ultricies mi eget mauris pharetra. Ac turpis egestas maecenas pharetra convallis posuere morbi leo urna. Cras sed felis eget velit aliquet. Sit amet mauris commodo quis imperdiet. Malesuada pellentesque elit eget gravida cum sociis natoque. Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt vitae.

2.1. Lorem Subchapter

Sed risus pretium quam vulputate dignissim suspendisse in est ante:

// Provided by VK_KHR_copy_commands2
void vkCmdCopyBufferToImage2KHR(
    VkCommandBuffer                             commandBuffer,
    const VkCopyBufferToImageInfo2*             pCopyBufferToImageInfo);
  • commandBuffer Mauris commodo quis imperdiet massa tincidunt nunc pulvinar.

  • pCopyBufferToImageInfo Odio morbi quis commodo odio aenean sed VkCopyBufferToImageInfo2.

Ac tortor dignissim convallis aenean et tortor. Amet porttitor eget dolor morbi non arcu. Consequat interdum varius sit amet. Tempus egestas sed sed risus pretium quam. Gravida in fermentum et sollicitudin ac orci phasellus egestas. Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum. Tempus quam pellentesque nec nam aliquam. A pellentesque sit amet porttitor eget. Viverra justo nec ultrices dui sapien eget mi. Nullam vehicula ipsum a arcu. Amet volutpat consequat mauris nunc congue nisi. Tincidunt arcu non sodales neque.

Valid Usage
  • VUID-vkCmdCopyBufferToImage2-commandBuffer-97737
    If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT or VK_QUEUE_COMPUTE_BIT, the bufferOffset member of any element of pCopyBufferToImageInfo->pRegions must be a multiple of 4

  • VUID-vkCmdCopyBufferToImage2-imageOffset-97738
    The imageOffset and imageExtent members of each element of pCopyBufferToImageInfo->pRegions must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties

  • VUID-vkCmdCopyBufferToImage2-commandBuffer-97739
    If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each element of pCopyBufferToImageInfo->pRegions, the aspectMask member of imageSubresource must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT

Valid Usage (Implicit)
  • VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter
    commandBuffer must be a valid VkCommandBuffer handle

  • VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter
    pCopyBufferToImageInfo must be a valid pointer to a valid VkCopyBufferToImageInfo2 structure

  • VUID-vkCmdCopyBufferToImage2-commandBuffer-recording
    commandBuffer must be in the recording state

  • VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool
    The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations

  • VUID-vkCmdCopyBufferToImage2-renderpass
    This command must only be called outside of a render pass instance

Host Synchronization
  • Host access to commandBuffer must be externally synchronized

  • Host access to the VkCommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties
Command Buffer Levels Render Pass Scope Supported Queue Types Command Type

Primary
Secondary

Outside

Transfer
Graphics
Compute

Action

Sed risus pretium quam vulputate dignissim suspendisse in est ante VkCopyBufferToImageInfo2:

typedef struct VkCopyBufferToImageInfo2 {
    VkStructureType              sType;
    const void*                  pNext;
    VkBuffer                     srcBuffer;
    VkImage                      dstImage;
    VkImageLayout                dstImageLayout;
    uint32_t                     regionCount;
    const VkBufferImageCopy2*    pRegions;
} VkCopyBufferToImageInfo2;

or the equivalent

// Provided by VK_KHR_copy_commands2
typedef VkCopyBufferToImageInfo2 VkCopyBufferToImageInfo2KHR;
  • sType Natoque penatibus et magnis dis parturient montes nascetur.

  • pNext Iaculis eu non diam phasellus vestibulum.

  • srcBuffer Consequat nisl vel pretium lectus quam.

  • dstImage Euismod in pellentesque massa placerat duis ultricies lacus sed turpis.

  • dstImageLayout Ullamcorper eget nulla facilisi etiam dignissim diam quis enim.

  • regionCount Vel facilisis volutpat est velit egestas dui.

  • pRegions Consequat id porta nibh venenatis cras sed felis.

Valid Usage
  • VUID-VkCopyBufferToImageInfo2-pRegions-94565
    Id velit ut tortor pretium viverra suspendisse potenti pRegions imageSubresource eu facilisis sed must odio morbi quis commodo dstImage

  • VUID-VkCopyBufferToImageInfo2-dstImage-97965
    If dstImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object

  • VUID-VkCopyBufferToImageInfo2-imageSubresource-97967
    The imageSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created

  • VUID-VkCopyBufferToImageInfo2-imageSubresource-97968
    The imageSubresource.baseArrayLayer + imageSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created

  • VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101
    bufferRowLength must be 0, or greater than or equal to the width member of imageExtent

  • VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102
    bufferImageHeight must be 0, or greater than or equal to the height member of imageExtent

  • VUID-VkCopyBufferToImageInfo2-aspectMask-99103
    The aspectMask member of imageSubresource must only have a single bit set

  • VUID-VkCopyBufferToImageInfo2-imageExtent-96659
    imageExtent.width must not be 0

  • VUID-VkCopyBufferToImageInfo2-imageExtent-96660
    imageExtent.height must not be 0

  • VUID-VkCopyBufferToImageInfo2-imageExtent-96661
    imageExtent.depth must not be 0

  • VUID-VkCopyBufferToImageInfo2-pRegions-96223
    Id leo in vitae turpis massa sed elementum imageOffset.x and (imageExtent.width + imageOffset.x) must gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim imageSubresource of dstImage

Valid Usage (Implicit)
  • VUID-VkCopyBufferToImageInfo2-sType-sType
    sType must be VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2

  • VUID-VkCopyBufferToImageInfo2-pNext-pNext
    pNext must be NULL

  • VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter
    srcBuffer must be a valid VkBuffer handle

  • VUID-VkCopyBufferToImageInfo2-dstImage-parameter
    dstImage must be a valid VkImage handle

  • VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter
    dstImageLayout must be a valid VkImageLayout value

  • VUID-VkCopyBufferToImageInfo2-pRegions-parameter
    pRegions must be a valid pointer to an array of regionCount valid VkBufferImageCopy2 structures

  • VUID-VkCopyBufferToImageInfo2-regionCount-arraylength
    regionCount must be greater than 0

  • VUID-VkCopyBufferToImageInfo2-commonparent
    Both of dstImage, and srcBuffer must have been created, allocated, or retrieved from the same VkDevice

Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim vkCmdCopyBufferToImage2KHR:

typedef struct VkBufferImageCopy2 {
    VkStructureType             sType;
    const void*                 pNext;
    VkDeviceSize                bufferOffset;
    uint32_t                    bufferRowLength;
    uint32_t                    bufferImageHeight;
    VkImageSubresourceLayers    imageSubresource;
    VkOffset3D                  imageOffset;
    VkExtent3D                  imageExtent;
} VkBufferImageCopy2;

or the equivalent

// Provided by VK_KHR_copy_commands2
typedef VkBufferImageCopy2 VkBufferImageCopy2KHR;
  • sType Tristique senectus et netus et malesuada.

  • pNext Tempor commodo ullamcorper a lacus vestibulum sed arcu.

  • bufferOffset Tellus in metus vulputate eu scelerisque. Lectus sit amet est placerat in.

  • bufferRowLength and bufferImageHeight Quam adipiscing vitae proin sagittis. Mattis pellentesque id nibh tortor id aliquet lectus proin nibh imageExtent.

  • imageSubresource Sociis natoque penatibus et magnis dis parturient montes nascetur.

  • imageOffset Lobortis mattis aliquam faucibus purus in massa tempor nec.

  • imageExtent Ut ornare lectus sit amet est placerat in.

Integer quis auctor elit sed vulputate mi sit amet mauris. Ultrices sagittis orci a scelerisque purus semper eget duis.

Valid Usage
  • VUID-VkBufferImageCopy2-bufferRowLength-99101
    bufferRowLength must be 0, or greater than or equal to the width member of imageExtent

  • VUID-VkBufferImageCopy2-bufferImageHeight-99102
    bufferImageHeight must be 0, or greater than or equal to the height member of imageExtent

  • VUID-VkBufferImageCopy2-aspectMask-99103
    The aspectMask member of imageSubresource must only have a single bit set

  • VUID-VkBufferImageCopy2-imageExtent-96659
    imageExtent.width must not be 0

  • VUID-VkBufferImageCopy2-imageExtent-96660
    imageExtent.height must not be 0

  • VUID-VkBufferImageCopy2-imageExtent-96661
    imageExtent.depth must not be 0

Valid Usage (Implicit)
  • VUID-VkBufferImageCopy2-sType-sType
    sType must be VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2

  • VUID-VkBufferImageCopy2-pNext-pNext
    pNext must be NULL

  • VUID-VkBufferImageCopy2-imageSubresource-parameter
    imageSubresource must be a valid VkImageSubresourceLayers structure

Layers & Extensions (Informative)

Cursus euismod quis viverra nibh cras pulvinar.

Extension Dependencies

Id diam vel quam elementum