@@ -344,6 +344,7 @@ def SPV_KHR_subgroup_rotate : I32EnumAttrCase<"SPV_KHR_subgroup
344
344
def SPV_KHR_non_semantic_info : I32EnumAttrCase<"SPV_KHR_non_semantic_info", 29>;
345
345
def SPV_KHR_terminate_invocation : I32EnumAttrCase<"SPV_KHR_terminate_invocation", 30>;
346
346
def SPV_KHR_cooperative_matrix : I32EnumAttrCase<"SPV_KHR_cooperative_matrix", 31>;
347
+ def SPV_KHR_bfloat16 : I32EnumAttrCase<"SPV_KHR_bfloat16", 32>;
347
348
348
349
def SPV_EXT_demote_to_helper_invocation : I32EnumAttrCase<"SPV_EXT_demote_to_helper_invocation", 1000>;
349
350
def SPV_EXT_descriptor_indexing : I32EnumAttrCase<"SPV_EXT_descriptor_indexing", 1001>;
@@ -436,7 +437,7 @@ def SPIRV_ExtensionAttr :
436
437
SPV_KHR_fragment_shader_barycentric, SPV_KHR_ray_cull_mask,
437
438
SPV_KHR_uniform_group_instructions, SPV_KHR_subgroup_rotate,
438
439
SPV_KHR_non_semantic_info, SPV_KHR_terminate_invocation,
439
- SPV_KHR_cooperative_matrix,
440
+ SPV_KHR_cooperative_matrix, SPV_KHR_bfloat16,
440
441
SPV_EXT_demote_to_helper_invocation, SPV_EXT_descriptor_indexing,
441
442
SPV_EXT_fragment_fully_covered, SPV_EXT_fragment_invocation_density,
442
443
SPV_EXT_fragment_shader_interlock, SPV_EXT_physical_storage_buffer,
@@ -1412,6 +1413,23 @@ def SPIRV_C_ShaderStereoViewNV : I32EnumAttrCase<"Shade
1412
1413
Extension<[SPV_NV_stereo_view_rendering]>
1413
1414
];
1414
1415
}
1416
+ def SPIRV_C_BFloat16TypeKHR : I32EnumAttrCase<"BFloat16TypeKHR", 5116> {
1417
+ list<Availability> availability = [
1418
+ Extension<[SPV_KHR_bfloat16]>
1419
+ ];
1420
+ }
1421
+ def SPIRV_C_BFloat16DotProductKHR : I32EnumAttrCase<"BFloat16DotProductKHR", 5117> {
1422
+ list<I32EnumAttrCase> implies = [SPIRV_C_BFloat16TypeKHR];
1423
+ list<Availability> availability = [
1424
+ Extension<[SPV_KHR_bfloat16]>
1425
+ ];
1426
+ }
1427
+ def SPIRV_C_BFloat16CooperativeMatrixKHR : I32EnumAttrCase<"BFloat16CooperativeMatrixKHR", 5118> {
1428
+ list<I32EnumAttrCase> implies = [SPIRV_C_BFloat16TypeKHR, SPIRV_C_CooperativeMatrixKHR];
1429
+ list<Availability> availability = [
1430
+ Extension<[SPV_KHR_bfloat16]>
1431
+ ];
1432
+ }
1415
1433
1416
1434
def SPIRV_C_Bfloat16ConversionINTEL : I32EnumAttrCase<"Bfloat16ConversionINTEL", 6115> {
1417
1435
list<Availability> availability = [
@@ -1518,7 +1536,8 @@ def SPIRV_CapabilityAttr :
1518
1536
SPIRV_C_StorageTexelBufferArrayNonUniformIndexing,
1519
1537
SPIRV_C_ShaderViewportIndexLayerEXT, SPIRV_C_ShaderViewportMaskNV,
1520
1538
SPIRV_C_ShaderStereoViewNV, SPIRV_C_Bfloat16ConversionINTEL,
1521
- SPIRV_C_CacheControlsINTEL
1539
+ SPIRV_C_CacheControlsINTEL, SPIRV_C_BFloat16TypeKHR,
1540
+ SPIRV_C_BFloat16DotProductKHR, SPIRV_C_BFloat16CooperativeMatrixKHR
1522
1541
]>;
1523
1542
1524
1543
def SPIRV_AM_Logical : I32EnumAttrCase<"Logical", 0>;
@@ -3217,6 +3236,16 @@ def SPIRV_ExecutionModelAttr :
3217
3236
SPIRV_EM_TaskEXT, SPIRV_EM_MeshEXT
3218
3237
]>;
3219
3238
3239
+ def SPIRV_FPE_BFloat16KHR : I32EnumAttrCase<"BFloat16KHR", 0> {
3240
+ list<Availability> availability = [
3241
+ Capability<[SPIRV_C_BFloat16TypeKHR]>
3242
+ ];
3243
+ }
3244
+ def SPIRV_FPEncodingAttr :
3245
+ SPIRV_I32EnumAttr<"FPEncoding", "valid SPIR-V FPEncoding", "f_p_encoding", [
3246
+ SPIRV_FPE_BFloat16KHR
3247
+ ]>;
3248
+
3220
3249
def SPIRV_FC_None : I32BitEnumAttrCaseNone<"None">;
3221
3250
def SPIRV_FC_Inline : I32BitEnumAttrCaseBit<"Inline", 0>;
3222
3251
def SPIRV_FC_DontInline : I32BitEnumAttrCaseBit<"DontInline", 1>;
@@ -4161,10 +4190,12 @@ def SPIRV_Integer : AnyIntOfWidths<[8, 16, 32, 64]>;
4161
4190
def SPIRV_Int16 : TypeAlias<I16, "Int16">;
4162
4191
def SPIRV_Int32 : TypeAlias<I32, "Int32">;
4163
4192
def SPIRV_Float32 : TypeAlias<F32, "Float32">;
4193
+ def SPIRV_BFloat16KHR : TypeAlias<BF16, "BFloat16">;
4164
4194
def SPIRV_Float : FloatOfWidths<[16, 32, 64]>;
4165
4195
def SPIRV_Float16or32 : FloatOfWidths<[16, 32]>;
4196
+ def SPIRV_AnyFloat : AnyTypeOf<[SPIRV_Float, SPIRV_BFloat16KHR]>;
4166
4197
def SPIRV_Vector : VectorOfLengthAndType<[2, 3, 4, 8, 16],
4167
- [SPIRV_Bool, SPIRV_Integer, SPIRV_Float ]>;
4198
+ [SPIRV_Bool, SPIRV_Integer, SPIRV_AnyFloat ]>;
4168
4199
// Component type check is done in the type parser for the following SPIR-V
4169
4200
// dialect-specific types so we use "Any" here.
4170
4201
def SPIRV_AnyPtr : DialectType<SPIRV_Dialect, SPIRV_IsPtrType,
@@ -4187,14 +4218,14 @@ def SPIRV_AnyStruct : DialectType<SPIRV_Dialect, SPIRV_IsStructType,
4187
4218
def SPIRV_AnySampledImage : DialectType<SPIRV_Dialect, SPIRV_IsSampledImageType,
4188
4219
"any SPIR-V sampled image type">;
4189
4220
4190
- def SPIRV_Numerical : AnyTypeOf<[SPIRV_Integer, SPIRV_Float ]>;
4221
+ def SPIRV_Numerical : AnyTypeOf<[SPIRV_Integer, SPIRV_AnyFloat ]>;
4191
4222
def SPIRV_Scalar : AnyTypeOf<[SPIRV_Numerical, SPIRV_Bool]>;
4192
4223
def SPIRV_Aggregate : AnyTypeOf<[SPIRV_AnyArray, SPIRV_AnyRTArray, SPIRV_AnyStruct]>;
4193
4224
def SPIRV_Composite :
4194
4225
AnyTypeOf<[SPIRV_Vector, SPIRV_AnyArray, SPIRV_AnyRTArray, SPIRV_AnyStruct,
4195
4226
SPIRV_AnyCooperativeMatrix, SPIRV_AnyMatrix]>;
4196
4227
def SPIRV_Type : AnyTypeOf<[
4197
- SPIRV_Void, SPIRV_Bool, SPIRV_Integer, SPIRV_Float , SPIRV_Vector,
4228
+ SPIRV_Void, SPIRV_Bool, SPIRV_Integer, SPIRV_AnyFloat , SPIRV_Vector,
4198
4229
SPIRV_AnyPtr, SPIRV_AnyArray, SPIRV_AnyRTArray, SPIRV_AnyStruct,
4199
4230
SPIRV_AnyCooperativeMatrix, SPIRV_AnyMatrix, SPIRV_AnySampledImage,
4200
4231
SPIRV_AnyImage
0 commit comments