Regarding this section for D3D12_LINEAR_ALGEBRA_MATRIX_CONSTRUCTION_SUPPORT:
|
#### D3D12_LINEAR_ALGEBRA_MATRIX_CONSTRUCTION_SUPPORT |
|
``` cpp |
|
typedef struct D3D12_LINEAR_ALGEBRA_MATRIX_CONSTRUCTION_SUPPORT |
|
{ |
|
// Inputs |
|
D3D12_LINEAR_ALGEBRA_DATATYPE ComponentType; |
|
UINT WaveSize; |
|
|
|
// Outputs |
|
UINT MinM; |
|
UINT MinK; |
|
UINT MinN; |
|
} D3D12_LINEAR_ALGEBRA_MATRIX_CONSTRUCTION_SUPPORT; |
|
``` |
|
|
|
This query indicates a driver's level of support for general operations on wave-scope and group-scope matrices. Since matrices at these scopes can be loaded, stored, manipulated, and converted without actually being used in a multiplication operation, multiplication support is not sufficient. Essentially, a driver that responds positively to this query indicates that it knows how to lay out these components in registers. If a driver supports a particular component type, then it must support: |
|
* Loading a matrix of that type from buffer or group-shared memory, and similarly for storing (`Load()`/`Store()`). |
|
* Operating on elements of a matrix (`Length()`/`GetCoordinate()`/`Get()`/`Set()`/`Splat()`). |
|
* Being used as a source or destination of a conversion (`Cast()`). |
|
|
|
If a component type is not supported, `MinM`, `MinK`, and `MinN` will all be set to 0. Otherwise, all three must be nonzero, indicating support for A matrices (MxK), B matrices (KxN), and accumulator matrices (MxN). |
Two issues:
- The spec language does not define whether supported dimensions are any combination of values that have a minimum of the specified dimensions, or if the dimensions must be even multiples of these min sizes.
- This API implies that only one layout of Min M/N/K is provided per component type. For multiply, multiple layouts can be supported, which require separate combinations of minimum sizes for M/N/K to express (like
4/16/16 vs. 16/4/16). If you need that for multiply, you also need it for construct, otherwise you can't construct the matrix types used in the multiply in the first place, or you imply support for sizes the driver doesn't actually support, (like an Accumulator of M=4,N=4 based on the example).
Regarding this section for D3D12_LINEAR_ALGEBRA_MATRIX_CONSTRUCTION_SUPPORT:
DirectX-Specs/d3d/D3D12LinearAlgebraRuntimeFeatureSupport.md
Lines 88 to 108 in 510f4c8
Two issues:
4/16/16vs.16/4/16). If you need that for multiply, you also need it for construct, otherwise you can't construct the matrix types used in the multiply in the first place, or you imply support for sizes the driver doesn't actually support, (like an Accumulator of M=4,N=4 based on the example).