My Project
Public Types | Static Public Member Functions | List of all members
mlir::VulkanLayoutUtils Class Reference

#include <LayoutUtils.h>

Public Types

using Size = uint64_t
 

Static Public Member Functions

static spirv::StructType decorateType (spirv::StructType structType, Size &size, Size &alignment)
 
static bool isLegalType (Type type)
 

Detailed Description

According to the Vulkan spec "14.5.4. Offset and Stride Assignment": "There are different alignment requirements depending on the specific resources and on the features enabled on the device."

There are 3 types of alignment: scalar, base, extended. See the spec for details.

Note: Even if scalar alignment is supported, it is generally more performant to use the base alignment. So here the calculation is based on base alignment.

The memory layout must obey the following rules:

  1. The Offset decoration of any member must be a multiple of its alignment.
  2. Any ArrayStride or MatrixStride decoration must be a multiple of the alignment of the array or matrix as defined above.

According to the SPIR-V spec: "The ArrayStride, MatrixStride, and Offset decorations must be large enough to hold the size of the objects they affect (that is, specifying overlap is invalid)."

Member Typedef Documentation

◆ Size

Member Function Documentation

◆ decorateType()

spirv::StructType VulkanLayoutUtils::decorateType ( spirv::StructType  structType,
VulkanLayoutUtils::Size size,
VulkanLayoutUtils::Size alignment 
)
static

Returns a new StructType with layout info. Assigns the type size in bytes to the size. Assigns the type alignment in bytes to the alignment.

◆ isLegalType()

bool VulkanLayoutUtils::isLegalType ( Type  type)
static

Checks whether a type is legal in terms of Vulkan layout info decoration. A type is dynamically illegal if it's a composite type in the StorageBuffer, PhysicalStorageBuffer, Uniform, and PushConstant Storage Classes without layout information.


The documentation for this class was generated from the following files: