## C Specification

Each VkCooperativeMatrixPropertiesNV structure describes a single supported combination of types for a matrix multiply/add operation (OpCooperativeMatrixMulAddNV). The multiply can be described in terms of the following variables and types (in SPIR-V pseudocode):

    %A is of type OpTypeCooperativeMatrixNV %AType %scope %MSize %KSize
%B is of type OpTypeCooperativeMatrixNV %BType %scope %KSize %NSize
%C is of type OpTypeCooperativeMatrixNV %CType %scope %MSize %NSize
%D is of type OpTypeCooperativeMatrixNV %DType %scope %MSize %NSize

%D = %A * %B + %C // using OpCooperativeMatrixMulAddNV

A matrix multiply with these dimensions is known as an MxNxK matrix multiply.

The VkCooperativeMatrixPropertiesNV structure is defined as:

// Provided by VK_NV_cooperative_matrix
typedef struct VkCooperativeMatrixPropertiesNV {
VkStructureType      sType;
void*                pNext;
uint32_t             MSize;
uint32_t             NSize;
uint32_t             KSize;
VkComponentTypeNV    AType;
VkComponentTypeNV    BType;
VkComponentTypeNV    CType;
VkComponentTypeNV    DType;
VkScopeNV            scope;
} VkCooperativeMatrixPropertiesNV;

## Members

• sType is the type of this structure.

• pNext is NULL or a pointer to a structure extending this structure.

• MSize is the number of rows in matrices A, C, and D.

• KSize is the number of columns in matrix A and rows in matrix B.

• NSize is the number of columns in matrices B, C, D.

• AType is the component type of matrix A, of type VkComponentTypeNV.

• BType is the component type of matrix B, of type VkComponentTypeNV.

• CType is the component type of matrix C, of type VkComponentTypeNV.

• DType is the component type of matrix D, of type VkComponentTypeNV.

• scope is the scope of all the matrix types, of type VkScopeNV.

## Description

If some types are preferred over other types (e.g. for performance), they should appear earlier in the list enumerated by vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.

At least one entry in the list must have power of two values for all of MSize, KSize, and NSize.

Valid Usage (Implicit)
• sType must be VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV

• pNext must be NULL

• AType must be a valid VkComponentTypeNV value

• BType must be a valid VkComponentTypeNV value

• CType must be a valid VkComponentTypeNV value

• DType must be a valid VkComponentTypeNV value

• scope must be a valid VkScopeNV value