# VkCooperativeMatrixPropertiesNV(3) Manual Page

## Name

VkCooperativeMatrixPropertiesNV - Structure specifying cooperative matrix properties

## 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:

    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 an extension-specific 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

## See Also

VkComponentTypeNV, VkScopeNV, VkStructureType, vkGetPhysicalDeviceCooperativeMatrixPropertiesNV

## Document Notes

For more information, see the Vulkan Specification

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.