Class VkSubresourceLayout

java.lang.Object
org.lwjgl.system.Pointer.Default
org.lwjgl.system.Struct<VkSubresourceLayout>
org.lwjgl.vulkan.VkSubresourceLayout
All Implemented Interfaces:
AutoCloseable, org.lwjgl.system.NativeResource, org.lwjgl.system.Pointer

public class VkSubresourceLayout extends org.lwjgl.system.Struct<VkSubresourceLayout> implements org.lwjgl.system.NativeResource
Structure specifying subresource layout.
Description

If the image is linear, then rowPitch, arrayPitch and depthPitch describe the layout of the image subresource in linear memory. For uncompressed formats, rowPitch is the number of bytes between texels with the same x coordinate in adjacent rows (y coordinates differ by one). arrayPitch is the number of bytes between texels with the same x and y coordinate in adjacent array layers of the image (array layer values differ by one). depthPitch is the number of bytes between texels with the same x and y coordinate in adjacent slices of a 3D image (z coordinates differ by one). Expressed as an addressing formula, the starting byte of a texel in the image subresource has address:


 // (x,y,z,layer) are in texel coordinates
 address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*elementSize + offset

For compressed formats, the rowPitch is the number of bytes between compressed texel blocks in adjacent rows. arrayPitch is the number of bytes between compressed texel blocks in adjacent array layers. depthPitch is the number of bytes between compressed texel blocks in adjacent slices of a 3D image.


 // (x,y,z,layer) are in compressed texel block coordinates
 address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*compressedTexelBlockByteSize + offset;

The value of arrayPitch is undefined for images that were not created as arrays. depthPitch is defined only for 3D images.

If the image has a single-plane color format and its tiling is IMAGE_TILING_LINEAR , then the aspectMask member of VkImageSubresource must be IMAGE_ASPECT_COLOR_BIT.

If the image has a depth/stencil format and its tiling is IMAGE_TILING_LINEAR , then aspectMask must be either IMAGE_ASPECT_DEPTH_BIT or IMAGE_ASPECT_STENCIL_BIT. On implementations that store depth and stencil aspects separately, querying each of these image subresource layouts will return a different offset and size representing the region of memory used for that aspect. On implementations that store depth and stencil aspects interleaved, the same offset and size are returned and represent the interleaved memory allocation.

If the image has a multi-planar format and its tiling is IMAGE_TILING_LINEAR , then the aspectMask member of VkImageSubresource must be IMAGE_ASPECT_PLANE_0_BIT, IMAGE_ASPECT_PLANE_1_BIT, or (for 3-plane formats only) IMAGE_ASPECT_PLANE_2_BIT. Querying each of these image subresource layouts will return a different offset and size representing the region of memory used for that plane. If the image is disjoint, then the offset is relative to the base address of the plane. If the image is non-disjoint, then the offset is relative to the base address of the image.

If the image’s tiling is IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then the aspectMask member of VkImageSubresource must be one of VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT, where the maximum allowed plane index i is defined by the VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount associated with the image’s VkImageCreateInfo::format and modifier. The memory range used by the subresource is described by offset and size. If the image is disjoint, then the offset is relative to the base address of the memory plane. If the image is non-disjoint, then the offset is relative to the base address of the image. If the image is non-linear, then rowPitch, arrayPitch, and depthPitch have an implementation-dependent meaning.

See Also

VkImageDrmFormatModifierExplicitCreateInfoEXT, VkSubresourceLayout2, GetImageSubresourceLayout

Layout


 struct VkSubresourceLayout {
     VkDeviceSize offset();
     VkDeviceSize size();
     VkDeviceSize rowPitch();
     VkDeviceSize arrayPitch();
     VkDeviceSize depthPitch();
 }
  • Field Details

    • SIZEOF

      public static final int SIZEOF
      The struct size in bytes.
    • ALIGNOF

      public static final int ALIGNOF
      The struct alignment in bytes.
    • OFFSET

      public static final int OFFSET
      The struct member offsets.
    • SIZE

      public static final int SIZE
      The struct member offsets.
    • ROWPITCH

      public static final int ROWPITCH
      The struct member offsets.
    • ARRAYPITCH

      public static final int ARRAYPITCH
      The struct member offsets.
    • DEPTHPITCH

      public static final int DEPTHPITCH
      The struct member offsets.
  • Constructor Details

    • VkSubresourceLayout

      public VkSubresourceLayout(ByteBuffer container)
      Creates a VkSubresourceLayout instance at the current position of the specified ByteBuffer container. Changes to the buffer's content will be visible to the struct instance and vice versa.

      The created instance holds a strong reference to the container object.

  • Method Details

    • sizeof

      public int sizeof()
      Specified by:
      sizeof in class org.lwjgl.system.Struct<VkSubresourceLayout>
    • offset

      public long offset()
      the byte offset from the start of the image or the plane where the image subresource begins.
    • size

      public long size()
      the size in bytes of the image subresource. size includes any extra memory that is required based on rowPitch.
    • rowPitch

      public long rowPitch()
      describes the number of bytes between each row of texels in an image.
    • arrayPitch

      public long arrayPitch()
      describes the number of bytes between each array layer of an image.
    • depthPitch

      public long depthPitch()
      describes the number of bytes between each slice of 3D image.
    • offset

      public VkSubresourceLayout offset(long value)
      Sets the specified value to the offset() field.
    • size

      public VkSubresourceLayout size(long value)
      Sets the specified value to the size() field.
    • rowPitch

      public VkSubresourceLayout rowPitch(long value)
      Sets the specified value to the rowPitch() field.
    • arrayPitch

      public VkSubresourceLayout arrayPitch(long value)
      Sets the specified value to the arrayPitch() field.
    • depthPitch

      public VkSubresourceLayout depthPitch(long value)
      Sets the specified value to the depthPitch() field.
    • set

      public VkSubresourceLayout set(long offset, long size, long rowPitch, long arrayPitch, long depthPitch)
      Initializes this struct with the specified values.
    • set

      Copies the specified struct data to this struct.
      Parameters:
      src - the source struct
      Returns:
      this struct
    • malloc

      public static VkSubresourceLayout malloc()
      Returns a new VkSubresourceLayout instance allocated with memAlloc. The instance must be explicitly freed.
    • calloc

      public static VkSubresourceLayout calloc()
      Returns a new VkSubresourceLayout instance allocated with memCalloc. The instance must be explicitly freed.
    • create

      public static VkSubresourceLayout create()
      Returns a new VkSubresourceLayout instance allocated with BufferUtils.
    • create

      public static VkSubresourceLayout create(long address)
      Returns a new VkSubresourceLayout instance for the specified memory address.
    • createSafe

      public static @Nullable VkSubresourceLayout createSafe(long address)
      Like create, but returns null if address is NULL.
    • malloc

      public static VkSubresourceLayout.Buffer malloc(int capacity)
      Returns a new VkSubresourceLayout.Buffer instance allocated with memAlloc. The instance must be explicitly freed.
      Parameters:
      capacity - the buffer capacity
    • calloc

      public static VkSubresourceLayout.Buffer calloc(int capacity)
      Returns a new VkSubresourceLayout.Buffer instance allocated with memCalloc. The instance must be explicitly freed.
      Parameters:
      capacity - the buffer capacity
    • create

      public static VkSubresourceLayout.Buffer create(int capacity)
      Returns a new VkSubresourceLayout.Buffer instance allocated with BufferUtils.
      Parameters:
      capacity - the buffer capacity
    • create

      public static VkSubresourceLayout.Buffer create(long address, int capacity)
      Create a VkSubresourceLayout.Buffer instance at the specified memory.
      Parameters:
      address - the memory address
      capacity - the buffer capacity
    • createSafe

      public static @Nullable VkSubresourceLayout.Buffer createSafe(long address, int capacity)
      Like create, but returns null if address is NULL.
    • mallocStack

      @Deprecated public static VkSubresourceLayout mallocStack()
      Deprecated.
      Deprecated for removal in 3.4.0. Use malloc(MemoryStack) instead.
    • callocStack

      @Deprecated public static VkSubresourceLayout callocStack()
      Deprecated.
      Deprecated for removal in 3.4.0. Use calloc(MemoryStack) instead.
    • mallocStack

      @Deprecated public static VkSubresourceLayout mallocStack(org.lwjgl.system.MemoryStack stack)
      Deprecated.
      Deprecated for removal in 3.4.0. Use malloc(MemoryStack) instead.
    • callocStack

      @Deprecated public static VkSubresourceLayout callocStack(org.lwjgl.system.MemoryStack stack)
      Deprecated.
      Deprecated for removal in 3.4.0. Use calloc(MemoryStack) instead.
    • mallocStack

      @Deprecated public static VkSubresourceLayout.Buffer mallocStack(int capacity)
      Deprecated.
      Deprecated for removal in 3.4.0. Use malloc(int, MemoryStack) instead.
    • callocStack

      @Deprecated public static VkSubresourceLayout.Buffer callocStack(int capacity)
      Deprecated.
      Deprecated for removal in 3.4.0. Use calloc(int, MemoryStack) instead.
    • mallocStack

      @Deprecated public static VkSubresourceLayout.Buffer mallocStack(int capacity, org.lwjgl.system.MemoryStack stack)
      Deprecated.
      Deprecated for removal in 3.4.0. Use malloc(int, MemoryStack) instead.
    • callocStack

      @Deprecated public static VkSubresourceLayout.Buffer callocStack(int capacity, org.lwjgl.system.MemoryStack stack)
      Deprecated.
      Deprecated for removal in 3.4.0. Use calloc(int, MemoryStack) instead.
    • malloc

      public static VkSubresourceLayout malloc(org.lwjgl.system.MemoryStack stack)
      Returns a new VkSubresourceLayout instance allocated on the specified MemoryStack.
      Parameters:
      stack - the stack from which to allocate
    • calloc

      public static VkSubresourceLayout calloc(org.lwjgl.system.MemoryStack stack)
      Returns a new VkSubresourceLayout instance allocated on the specified MemoryStack and initializes all its bits to zero.
      Parameters:
      stack - the stack from which to allocate
    • malloc

      public static VkSubresourceLayout.Buffer malloc(int capacity, org.lwjgl.system.MemoryStack stack)
      Returns a new VkSubresourceLayout.Buffer instance allocated on the specified MemoryStack.
      Parameters:
      capacity - the buffer capacity
      stack - the stack from which to allocate
    • calloc

      public static VkSubresourceLayout.Buffer calloc(int capacity, org.lwjgl.system.MemoryStack stack)
      Returns a new VkSubresourceLayout.Buffer instance allocated on the specified MemoryStack and initializes all its bits to zero.
      Parameters:
      capacity - the buffer capacity
      stack - the stack from which to allocate
    • noffset

      public static long noffset(long struct)
      Unsafe version of offset().
    • nsize

      public static long nsize(long struct)
      Unsafe version of size().
    • nrowPitch

      public static long nrowPitch(long struct)
      Unsafe version of rowPitch().
    • narrayPitch

      public static long narrayPitch(long struct)
      Unsafe version of arrayPitch().
    • ndepthPitch

      public static long ndepthPitch(long struct)
      Unsafe version of depthPitch().
    • noffset

      public static void noffset(long struct, long value)
      Unsafe version of offset.
    • nsize

      public static void nsize(long struct, long value)
      Unsafe version of size.
    • nrowPitch

      public static void nrowPitch(long struct, long value)
      Unsafe version of rowPitch.
    • narrayPitch

      public static void narrayPitch(long struct, long value)
      Unsafe version of arrayPitch.
    • ndepthPitch

      public static void ndepthPitch(long struct, long value)
      Unsafe version of depthPitch.