dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.select
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.sconvert
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.fconvert
+dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.fconvert16
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.vector_related
dEQP-VK.spirv_assembly.instruction.compute.opsource.unknown_source
dEQP-VK.spirv_assembly.instruction.compute.opsource.wrong_source
dEQP-VK.spirv_assembly.instruction.compute.opphi.nested
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_int
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_float
+dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_float16
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_vec3
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_mat4
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_array
dEQP-VK.spirv_assembly.instruction.compute.uconvert.uint64_to_uint8
dEQP-VK.spirv_assembly.instruction.compute.fconvert.float32_to_float64
dEQP-VK.spirv_assembly.instruction.compute.fconvert.float64_to_float32
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float32_to_float16
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float16_to_float32
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float16_to_float64
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float64_to_float16
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float16_m21
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float32_m21
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float64_m99
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float16_min
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float32_min
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float64_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float32_max
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float64
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_m11
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_m37
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_m66
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_min
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_min
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int16
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int32
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int64
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int16
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int32
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int64
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float16_116
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float32_232
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float64_164
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float32_max
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float64
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_33
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_42
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_188
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint16
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint32
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint64
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.buffer_memory
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.buffer_memory_variable_pointers
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.workgroup_memory_variable_pointers
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.matrix
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.struct
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.nested_struct
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisnan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisinf_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordnotequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordnotequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisnan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisinf_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordnotequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordnotequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.function.f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.function.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.function.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.222
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.223
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.224
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.232
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.233
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.234
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.242
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.243
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.244
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.322
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.323
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.324
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.332
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.333
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.334
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.342
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.343
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.344
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.422
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.423
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.424
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.432
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.433
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.434
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.442
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.443
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.444
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeconstruct.struct
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v2f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v3f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v4f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.struct16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v2f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v3f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v4f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.struct16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x2_2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x2_3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x2_4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x3_2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x3_3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x3_4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x4_2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x4_3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x4_4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x2_2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x2_3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x2_4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x3_2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x3_3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x3_4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x4_2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x4_3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x4_4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x2_2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x2_3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x2_4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x3_2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x3_3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x3_4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x4_2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x4_3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x4_4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.determinant2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.determinant3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.determinant4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.matrixinverse2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opdot
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opvectortimesscalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.cross
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opdot
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opvectortimesscalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opdot
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opvectortimesscalar
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.flat
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.no_perspective
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.relaxedprecision
dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_tesse
dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_geom
dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_frag
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_frag
dEQP-VK.spirv_assembly.instruction.graphics.nocontraction.multiplication_vert
dEQP-VK.spirv_assembly.instruction.graphics.nocontraction.multiplication_tessc
dEQP-VK.spirv_assembly.instruction.graphics.nocontraction.multiplication_tesse
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_tesse
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_geom
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_frag
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_frag
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.vector_related_vert
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.vector_related_tessc
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.vector_related_tesse
dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_tesse
dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_geom
dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_m21_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_m21_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_m21_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_min_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_min_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float32_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float32_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float32_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m37_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m37_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m37_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_min_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_min_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_p0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_p0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int16_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int16_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int16_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_232_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_232_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_232_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float32_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float32_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float32_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_42_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_42_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_42_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_p0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_p0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_m0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_m0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint16_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint16_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint16_tesse
dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_variable_pointers_tesse
dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_variable_pointers_geom
dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_variable_pointers_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdxfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdyfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opfwidthfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdxcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdycoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opfwidthcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdx
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdy
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opfwidth
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdxfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdyfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opfwidthfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdxcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdycoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opfwidthcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdx
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdy
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opfwidth
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdxfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdyfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opfwidthfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdxcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdycoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opfwidthcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdx
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdy
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opfwidth
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_frag
dEQP-VK.spirv_assembly.type.scalar.i8.negate_vert
dEQP-VK.spirv_assembly.type.scalar.i8.negate_tessc
dEQP-VK.spirv_assembly.type.scalar.i8.negate_tesse
const double* returnedAsDouble = static_cast<const double*>(outputAllocs[outputNdx]->getHostPtr());
const double* expectedAsDouble = reinterpret_cast<const double*>(&expectedBytes.front());
- const deUint32 count = static_cast<deUint32>(expectedBytes.size() / sizeof(double));
+ const deUint32 count = static_cast<deUint32>(expectedBytes.size() / sizeof(double));
for (deUint32 numNdx = 0; numNdx < count; ++numNdx)
if (!compare64BitFloat(expectedAsDouble[numNdx], returnedAsDouble[numNdx], log))
*//*--------------------------------------------------------------------*/
#include "vktSpvAsmComputeShaderTestUtil.hpp"
+#include "tcuStringTemplate.hpp"
namespace vkt
{
return verifyOutputWithEpsilon(outputAllocs, expectedOutputs, log, epsilon);
}
+// Creates compute-shader assembly by specializing a boilerplate StringTemplate
+// on fragments, which must (at least) map "testfun" to an OpFunction definition
+// for %test_code that takes and returns a %v4f32. Boilerplate IDs are prefixed
+// with "BP_" to avoid collisions with fragments.
+//
+// It corresponds roughly to this GLSL:
+//;
+// void main (void) { test_func(vec4(gl_GlobalInvocationID)); }
+std::string makeComputeShaderAssembly(const std::map<std::string, std::string>& fragments)
+{
+ static const char computeShaderBoilerplate[] =
+ "OpCapability Shader\n"
+
+ "${capability:opt}\n"
+ "${extension:opt}\n"
+
+ "OpMemoryModel Logical GLSL450\n"
+ "OpEntryPoint GLCompute %BP_main \"main\" %BP_id3u\n"
+ "OpExecutionMode %BP_main LocalSize 1 1 1\n"
+ "OpSource GLSL 430\n"
+ "OpDecorate %BP_id3u BuiltIn GlobalInvocationId\n"
+
+ "${decoration:opt}\n"
+
+ SPIRV_ASSEMBLY_TYPES
+ SPIRV_ASSEMBLY_CONSTANTS
+ SPIRV_ASSEMBLY_ARRAYS
+
+ "%ip_v3u32 = OpTypePointer Input %v3u32\n"
+ "%BP_id3u = OpVariable %ip_v3u32 Input\n"
+
+ "${pre_main:opt}\n"
+
+ "%BP_main = OpFunction %void None %fun\n"
+ "%BP_label = OpLabel\n"
+ "%BP_id3ul = OpLoad %v3u32 %BP_id3u\n"
+ "%BP_id4u = OpCompositeConstruct %v4u32 %BP_id3ul %c_u32_0\n"
+ "%BP_id4f = OpConvertUToF %v4f32 %BP_id4u\n"
+ "%BP_result = OpFunctionCall %v4f32 %test_code %BP_id4f\n"
+ " OpReturn\n"
+ " OpFunctionEnd\n"
+ "\n"
+ "${testfun}\n"
+ "\n"
+
+ "%isUniqueIdZero = OpFunction %bool None %bool_function\n"
+ "%BP_getId_label = OpLabel\n"
+ "%BP_id_0_ptr = OpAccessChain %ip_u32 %BP_id3u %c_u32_0\n"
+ "%BP_id_1_ptr = OpAccessChain %ip_u32 %BP_id3u %c_u32_1\n"
+ "%BP_id_2_ptr = OpAccessChain %ip_u32 %BP_id3u %c_u32_2\n"
+ "%BP_id_0_val = OpLoad %u32 %BP_id_0_ptr\n"
+ "%BP_id_1_val = OpLoad %u32 %BP_id_1_ptr\n"
+ "%BP_id_2_val = OpLoad %u32 %BP_id_2_ptr\n"
+ "%BP_id_uni_0 = OpBitwiseOr %u32 %BP_id_0_val %BP_id_1_val\n"
+ " %BP_id_uni = OpBitwiseOr %u32 %BP_id_2_val %BP_id_uni_0\n"
+ " %is_id_zero = OpIEqual %bool %BP_id_uni %c_u32_0\n"
+ " OpReturnValue %is_id_zero\n"
+ " OpFunctionEnd\n";
+
+ return tcu::StringTemplate(computeShaderBoilerplate).specialize(fragments);
+}
+
} // SpirVAssembly
} // vkt
}
}
-#define SPIRV_ASSEMBLY_TYPES \
- "%void = OpTypeVoid\n" \
- "%bool = OpTypeBool\n" \
- \
- "%i32 = OpTypeInt 32 1\n" \
- "%u32 = OpTypeInt 32 0\n" \
- \
- "%f32 = OpTypeFloat 32\n" \
- "%v2i32 = OpTypeVector %i32 2\n" \
- "%v2u32 = OpTypeVector %u32 2\n" \
- "%v2f32 = OpTypeVector %f32 2\n" \
- "%v3i32 = OpTypeVector %i32 3\n" \
- "%v3u32 = OpTypeVector %u32 3\n" \
- "%v3f32 = OpTypeVector %f32 3\n" \
- "%v4i32 = OpTypeVector %i32 4\n" \
- "%v4u32 = OpTypeVector %u32 4\n" \
- "%v4f32 = OpTypeVector %f32 4\n" \
- "%v4bool = OpTypeVector %bool 4\n" \
- \
- "%v4f32_v4f32_function = OpTypeFunction %v4f32 %v4f32\n" \
- "%bool_function = OpTypeFunction %bool\n" \
- "%fun = OpTypeFunction %void\n" \
- \
- "%ip_f32 = OpTypePointer Input %f32\n" \
- "%ip_i32 = OpTypePointer Input %i32\n" \
- "%ip_u32 = OpTypePointer Input %u32\n" \
- "%ip_v3f32 = OpTypePointer Input %v3f32\n" \
- "%ip_v2f32 = OpTypePointer Input %v2f32\n" \
- "%ip_v2i32 = OpTypePointer Input %v2i32\n" \
- "%ip_v2u32 = OpTypePointer Input %v2u32\n" \
- "%ip_v4f32 = OpTypePointer Input %v4f32\n" \
- "%ip_v4i32 = OpTypePointer Input %v4i32\n" \
- "%ip_v4u32 = OpTypePointer Input %v4u32\n" \
- \
- "%op_f32 = OpTypePointer Output %f32\n" \
- "%op_i32 = OpTypePointer Output %i32\n" \
- "%op_u32 = OpTypePointer Output %u32\n" \
- "%op_v2f32 = OpTypePointer Output %v2f32\n" \
- "%op_v2i32 = OpTypePointer Output %v2i32\n" \
- "%op_v2u32 = OpTypePointer Output %v2u32\n" \
- "%op_v4f32 = OpTypePointer Output %v4f32\n" \
- "%op_v4i32 = OpTypePointer Output %v4i32\n" \
- "%op_v4u32 = OpTypePointer Output %v4u32\n" \
- \
- "%fp_f32 = OpTypePointer Function %f32\n" \
- "%fp_i32 = OpTypePointer Function %i32\n" \
- "%fp_v4f32 = OpTypePointer Function %v4f32\n"
-
-#define SPIRV_ASSEMBLY_CONSTANTS \
- "%c_f32_1 = OpConstant %f32 1.0\n" \
- "%c_f32_0 = OpConstant %f32 0.0\n" \
- "%c_f32_0_5 = OpConstant %f32 0.5\n" \
- "%c_f32_n1 = OpConstant %f32 -1.\n" \
- "%c_f32_7 = OpConstant %f32 7.0\n" \
- "%c_f32_8 = OpConstant %f32 8.0\n" \
- "%c_i32_0 = OpConstant %i32 0\n" \
- "%c_i32_1 = OpConstant %i32 1\n" \
- "%c_i32_2 = OpConstant %i32 2\n" \
- "%c_i32_3 = OpConstant %i32 3\n" \
- "%c_i32_4 = OpConstant %i32 4\n" \
- "%c_u32_0 = OpConstant %u32 0\n" \
- "%c_u32_1 = OpConstant %u32 1\n" \
- "%c_u32_2 = OpConstant %u32 2\n" \
- "%c_u32_3 = OpConstant %u32 3\n" \
- "%c_u32_32 = OpConstant %u32 32\n" \
- "%c_u32_4 = OpConstant %u32 4\n" \
- "%c_u32_31_bits = OpConstant %u32 0x7FFFFFFF\n" \
- "%c_v4f32_1_1_1_1 = OpConstantComposite %v4f32 %c_f32_1 %c_f32_1 %c_f32_1 %c_f32_1\n" \
- "%c_v4f32_1_0_0_1 = OpConstantComposite %v4f32 %c_f32_1 %c_f32_0 %c_f32_0 %c_f32_1\n" \
- "%c_v4f32_0_5_0_5_0_5_0_5 = OpConstantComposite %v4f32 %c_f32_0_5 %c_f32_0_5 %c_f32_0_5 %c_f32_0_5\n"
-
-#define SPIRV_ASSEMBLY_ARRAYS \
- "%a1f32 = OpTypeArray %f32 %c_u32_1\n" \
- "%a2f32 = OpTypeArray %f32 %c_u32_2\n" \
- "%a3v4f32 = OpTypeArray %v4f32 %c_u32_3\n" \
- "%a4f32 = OpTypeArray %f32 %c_u32_4\n" \
- "%a32v4f32 = OpTypeArray %v4f32 %c_u32_32\n" \
- "%ip_a3v4f32 = OpTypePointer Input %a3v4f32\n" \
- "%ip_a32v4f32 = OpTypePointer Input %a32v4f32\n" \
- "%op_a2f32 = OpTypePointer Output %a2f32\n" \
- "%op_a3v4f32 = OpTypePointer Output %a3v4f32\n" \
- "%op_a4f32 = OpTypePointer Output %a4f32\n"
-
// Creates vertex-shader assembly by specializing a boilerplate StringTemplate
// on fragments, which must (at least) map "testfun" to an OpFunction definition
// for %test_code that takes and returns a %v4f32. Boilerplate IDs are prefixed
return false;
}
+bool compare16BitFloat (deFloat16 original, deFloat16 returned, std::string& error)
+{
+ std::ostringstream log;
+ const Float16 originalFloat (original);
+ const Float16 returnedFloat (returned);
+
+ if (originalFloat.isZero())
+ {
+ if (returnedFloat.isZero())
+ return true;
+
+ log << "Error: expected zero but returned " << std::hex << "0x" << returned << " (" << returnedFloat.asFloat() << ")";
+ error = log.str();
+ return false;
+ }
+
+ // Any denormalized value input into a shader may be flushed to 0.
+ if (originalFloat.isDenorm() && returnedFloat.isZero())
+ return true;
+
+ // Inf are always turned into Inf with the same sign, too.
+ if (originalFloat.isInf())
+ {
+ if (returnedFloat.isInf() && originalFloat.signBit() == returnedFloat.signBit())
+ return true;
+
+ log << "Error: expected Inf but returned " << std::hex << "0x" << returned << " (" << returnedFloat.asFloat() << ")";
+ error = log.str();
+ return false;
+ }
+
+ // NaN are always turned into NaN, too.
+ if (originalFloat.isNaN())
+ {
+ if (returnedFloat.isNaN())
+ return true;
+
+ log << "Error: expected NaN but returned " << std::hex << "0x" << returned << " (" << returnedFloat.asFloat() << ")";
+ error = log.str();
+ return false;
+ }
+
+ // Any denormalized value potentially generated by any instruction in a shader may be flushed to 0.
+ if (originalFloat.isDenorm() && returnedFloat.isZero())
+ return true;
+
+ // If not matched in the above cases, they should have the same bit pattern.
+ if (originalFloat.bits() == returnedFloat.bits())
+ return true;
+
+ log << "Error: found unmatched 16-bit and 16-bit floats: 0x"
+ << std::hex << original << " <=> 0x" << returned
+ << " (" << originalFloat.asFloat() << " <=> " << returnedFloat.asFloat() << ")";
+ error = log.str();
+ return false;
+}
+
bool compare16BitFloat64 (double original, deUint16 returned, RoundingModeFlags flags, tcu::TestLog& log)
{
// We only support RTE, RTZ, or both.
if (deMemCmp(&expectedBytes.front(), outResourceMemories[outputNdx]->getHostPtr(), expectedBytes.size()))
return tcu::TestStatus::fail("Resource returned doesn't match bitwisely with expected");
+
}
}
// * Different bit patterns of NaNs are allowed.
// * For the rest, require exactly the same bit pattern.
bool compare16BitFloat (deUint16 returned, float original, tcu::TestLog& log);
+bool compare16BitFloat (deFloat16 original, deFloat16 returned, std::string& error);
// Given the original 64-bit float value, computes the corresponding 16-bit
// float value under the given rounding mode flags and compares with the
#include "tcuCommandLine.hpp"
#include "tcuFormatUtil.hpp"
#include "tcuFloat.hpp"
+#include "tcuFloatFormat.hpp"
#include "tcuRGBA.hpp"
#include "tcuStringTemplate.hpp"
#include "tcuTestLog.hpp"
deInt32 scActualValue1;
const char* resultOperation;
vector<deInt32> expectedOutput;
+ deInt32 scActualValueLength;
SpecConstantTwoIntCase (const char* name,
const char* definition0,
deInt32 value0,
deInt32 value1,
const char* resultOp,
- const vector<deInt32>& output)
- : caseName (name)
- , scDefinition0 (definition0)
- , scDefinition1 (definition1)
- , scResultType (resultType)
- , scOperation (operation)
- , scActualValue0 (value0)
- , scActualValue1 (value1)
- , resultOperation (resultOp)
- , expectedOutput (output) {}
+ const vector<deInt32>& output,
+ const deInt32 valueLength = sizeof(deInt32))
+ : caseName (name)
+ , scDefinition0 (definition0)
+ , scDefinition1 (definition1)
+ , scResultType (resultType)
+ , scOperation (operation)
+ , scActualValue0 (value0)
+ , scActualValue1 (value1)
+ , resultOperation (resultOp)
+ , expectedOutput (output)
+ , scActualValueLength (valueLength)
+ {}
};
tcu::TestCaseGroup* createSpecConstantGroup (tcu::TestContext& testCtx)
vector<SpecConstantTwoIntCase> cases;
de::Random rnd (deStringHash(group->getName()));
const int numElements = 100;
+ const deInt32 p1AsFloat16 = 0x3c00; // +1(fp16) == 0 01111 0000000000 == 0011 1100 0000 0000
vector<deInt32> inputInts (numElements, 0);
vector<deInt32> outputInts1 (numElements, 0);
vector<deInt32> outputInts2 (numElements, 0);
cases.push_back(SpecConstantTwoIntCase("sconvert", " %i32 0", " %i32 0", "%i16", "SConvert %sc_0", -11200, 0, addSc32ToInput, outputInts3));
// -969998336 stored as 32-bit two's complement is the binary representation of -11200 as IEEE-754 Float
cases.push_back(SpecConstantTwoIntCase("fconvert", " %f32 0", " %f32 0", "%f64", "FConvert %sc_0", -969998336, 0, addSc32ToInput, outputInts3));
+ cases.push_back(SpecConstantTwoIntCase("fconvert16", " %f16 0", " %f16 0", "%f32", "FConvert %sc_0", p1AsFloat16, 0, addSc32ToInput, outputInts4, sizeof(deFloat16)));
for (size_t caseNdx = 0; caseNdx < cases.size(); ++caseNdx)
{
specializations["TYPE_CONVERT"] = "%sc_final32 = OpConvertFToS %i32 %sc_final\n"; // Converts 64-bit float to 32-bit integer
}
+ // Special SPIR-V code for FConvert-case for 16-bit floats
+ if (strcmp(cases[caseNdx].caseName, "fconvert16") == 0)
+ {
+ specializations["CAPABILITIES"] = "OpCapability Float16\n"; // Adds 16-bit float capability
+ specializations["OPTYPE_DEFINITIONS"] = "%f16 = OpTypeFloat 16\n"; // Adds 16-bit float type
+ specializations["TYPE_CONVERT"] = "%sc_final32 = OpConvertFToS %i32 %sc_final\n"; // Converts 16-bit float to 32-bit integer
+ }
+
spec.assembly = shaderTemplate.specialize(specializations);
spec.inputs.push_back(BufferSp(new Int32Buffer(inputInts)));
spec.outputs.push_back(BufferSp(new Int32Buffer(cases[caseNdx].expectedOutput)));
spec.numWorkGroups = IVec3(numElements, 1, 1);
- spec.specConstants.append(cases[caseNdx].scActualValue0);
- spec.specConstants.append(cases[caseNdx].scActualValue1);
+ spec.specConstants.append(&cases[caseNdx].scActualValue0, cases[caseNdx].scActualValueLength);
+ spec.specConstants.append(&cases[caseNdx].scActualValue1, cases[caseNdx].scActualValueLength);
group->addChild(new SpvAsmComputeShaderCase(testCtx, cases[caseNdx].caseName, cases[caseNdx].caseName, spec));
}
{
ComputeShaderSpec specInt;
ComputeShaderSpec specFloat;
+ ComputeShaderSpec specFloat16;
ComputeShaderSpec specVec3;
ComputeShaderSpec specMat4;
ComputeShaderSpec specArray;
const int numElements = 100;
vector<float> inputFloats (numElements, 0);
vector<float> outputFloats (numElements, 0);
+ vector<deFloat16> inputFloats16 (numElements, 0);
+ vector<deFloat16> outputFloats16 (numElements, 0);
fillRandomScalars(rnd, -300.f, 300.f, &inputFloats[0], numElements);
outputFloats[ndx] = (inputFloats[ndx] > 0) ? 1.0f : -1.0f;
}
+ for (size_t ndx = 0; ndx < numElements; ++ndx)
+ {
+ inputFloats16[ndx] = tcu::Float16(inputFloats[ndx]).bits();
+ outputFloats16[ndx] = tcu::Float16(outputFloats[ndx]).bits();
+ }
+
// All of the tests are of the form:
//
// testtype r
specFloat.outputs.push_back(BufferSp(new Float32Buffer(outputFloats)));
specFloat.numWorkGroups = IVec3(numElements, 1, 1);
+ specFloat16.assembly =
+ "OpCapability Shader\n"
+ "OpCapability StorageUniformBufferBlock16\n"
+ "OpExtension \"SPV_KHR_16bit_storage\"\n"
+ "OpMemoryModel Logical GLSL450\n"
+ "OpEntryPoint GLCompute %main \"main\" %id\n"
+ "OpExecutionMode %main LocalSize 1 1 1\n"
+
+ "OpSource GLSL 430\n"
+ "OpName %main \"main\"\n"
+ "OpName %id \"gl_GlobalInvocationID\"\n"
+
+ "OpDecorate %id BuiltIn GlobalInvocationId\n"
+
+ "OpDecorate %buf BufferBlock\n"
+ "OpDecorate %indata DescriptorSet 0\n"
+ "OpDecorate %indata Binding 0\n"
+ "OpDecorate %outdata DescriptorSet 0\n"
+ "OpDecorate %outdata Binding 1\n"
+ "OpDecorate %f16arr ArrayStride 2\n"
+ "OpMemberDecorate %buf 0 Offset 0\n"
+
+ "%f16 = OpTypeFloat 16\n"
+ "%f16ptr = OpTypePointer Uniform %f16\n"
+ "%f16arr = OpTypeRuntimeArray %f16\n"
+
+ + string(getComputeAsmCommonTypes()) +
+
+ "%buf = OpTypeStruct %f16arr\n"
+ "%bufptr = OpTypePointer Uniform %buf\n"
+ "%indata = OpVariable %bufptr Uniform\n"
+ "%outdata = OpVariable %bufptr Uniform\n"
+
+ "%id = OpVariable %uvec3ptr Input\n"
+ "%zero = OpConstant %i32 0\n"
+ "%float_0 = OpConstant %f16 0.0\n"
+ "%float_1 = OpConstant %f16 1.0\n"
+ "%float_n1 = OpConstant %f16 -1.0\n"
+
+ "%main = OpFunction %void None %voidf\n"
+ "%entry = OpLabel\n"
+ "%idval = OpLoad %uvec3 %id\n"
+ "%x = OpCompositeExtract %u32 %idval 0\n"
+ "%inloc = OpAccessChain %f16ptr %indata %zero %x\n"
+ "%inval = OpLoad %f16 %inloc\n"
+
+ "%comp = OpFOrdGreaterThan %bool %inval %float_0\n"
+ " OpSelectionMerge %cm None\n"
+ " OpBranchConditional %comp %tb %fb\n"
+ "%tb = OpLabel\n"
+ " OpBranch %cm\n"
+ "%fb = OpLabel\n"
+ " OpBranch %cm\n"
+ "%cm = OpLabel\n"
+ "%res = OpPhi %f16 %float_1 %tb %float_n1 %fb\n"
+
+ "%outloc = OpAccessChain %f16ptr %outdata %zero %x\n"
+ " OpStore %outloc %res\n"
+ " OpReturn\n"
+
+ " OpFunctionEnd\n";
+ specFloat16.inputs.push_back(BufferSp(new Float16Buffer(inputFloats16)));
+ specFloat16.outputs.push_back(BufferSp(new Float16Buffer(outputFloats16)));
+ specFloat16.numWorkGroups = IVec3(numElements, 1, 1);
+ specFloat16.requestedVulkanFeatures.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+ specFloat16.requestedVulkanFeatures.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+
specMat4.assembly =
string(getComputeAsmShaderPreamble()) +
group->addChild(new SpvAsmComputeShaderCase(testCtx, "vartype_int", "OpPhi with int variables", specInt));
group->addChild(new SpvAsmComputeShaderCase(testCtx, "vartype_float", "OpPhi with float variables", specFloat));
+ group->addChild(new SpvAsmComputeShaderCase(testCtx, "vartype_float16", "OpPhi with 16bit float variables", specFloat16));
group->addChild(new SpvAsmComputeShaderCase(testCtx, "vartype_vec3", "OpPhi with vec3 variables", specVec3));
group->addChild(new SpvAsmComputeShaderCase(testCtx, "vartype_mat4", "OpPhi with mat4 variables", specMat4));
group->addChild(new SpvAsmComputeShaderCase(testCtx, "vartype_array", "OpPhi with array variables", specArray));
return group.release();
}
+
+// Checks that a compute shader can generate a constant composite value of various types, without exercising a computation on it.
+tcu::TestCaseGroup* createFloat16OpConstantCompositeGroup (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "opconstantcomposite", "Tests the OpConstantComposite instruction"));
+ vector<CaseParameter> cases;
+ de::Random rnd (deStringHash(group->getName()));
+ const int numElements = 100;
+ vector<float> positiveFloats (numElements, 0);
+ vector<float> negativeFloats (numElements, 0);
+ const StringTemplate shaderTemplate (
+ "OpCapability Shader\n"
+ "OpCapability Float16\n"
+ "OpMemoryModel Logical GLSL450\n"
+ "OpEntryPoint GLCompute %main \"main\" %id\n"
+ "OpExecutionMode %main LocalSize 1 1 1\n"
+ "OpSource GLSL 430\n"
+ "OpName %main \"main\"\n"
+ "OpName %id \"gl_GlobalInvocationID\"\n"
+
+ "OpDecorate %id BuiltIn GlobalInvocationId\n"
+
+ + string(getComputeAsmInputOutputBufferTraits()) + string(getComputeAsmCommonTypes()) + string(getComputeAsmInputOutputBuffer()) +
+
+ "%id = OpVariable %uvec3ptr Input\n"
+ "%zero = OpConstant %i32 0\n"
+ "%f16 = OpTypeFloat 16\n"
+ "%c_f16_0 = OpConstant %f16 0.0\n"
+ "%c_f16_0_5 = OpConstant %f16 0.5\n"
+ "%c_f16_1 = OpConstant %f16 1.0\n"
+ "%v2f16 = OpTypeVector %f16 2\n"
+ "%v3f16 = OpTypeVector %f16 3\n"
+ "%v4f16 = OpTypeVector %f16 4\n"
+
+ "${CONSTANT}\n"
+
+ "%main = OpFunction %void None %voidf\n"
+ "%label = OpLabel\n"
+ "%idval = OpLoad %uvec3 %id\n"
+ "%x = OpCompositeExtract %u32 %idval 0\n"
+ "%inloc = OpAccessChain %f32ptr %indata %zero %x\n"
+ "%inval = OpLoad %f32 %inloc\n"
+ "%neg = OpFNegate %f32 %inval\n"
+ "%outloc = OpAccessChain %f32ptr %outdata %zero %x\n"
+ " OpStore %outloc %neg\n"
+ " OpReturn\n"
+ " OpFunctionEnd\n");
+
+
+ cases.push_back(CaseParameter("vector", "%const = OpConstantComposite %v3f16 %c_f16_0 %c_f16_0_5 %c_f16_1\n"));
+ cases.push_back(CaseParameter("matrix", "%m3v3f16 = OpTypeMatrix %v3f16 3\n"
+ "%vec = OpConstantComposite %v3f16 %c_f16_0 %c_f16_0_5 %c_f16_1\n"
+ "%mat = OpConstantComposite %m3v3f16 %vec %vec %vec"));
+ cases.push_back(CaseParameter("struct", "%m2v3f16 = OpTypeMatrix %v3f16 2\n"
+ "%struct = OpTypeStruct %i32 %f16 %v3f16 %m2v3f16\n"
+ "%vec = OpConstantComposite %v3f16 %c_f16_0 %c_f16_0_5 %c_f16_1\n"
+ "%mat = OpConstantComposite %m2v3f16 %vec %vec\n"
+ "%const = OpConstantComposite %struct %zero %c_f16_0_5 %vec %mat\n"));
+ cases.push_back(CaseParameter("nested_struct", "%st1 = OpTypeStruct %i32 %f16\n"
+ "%st2 = OpTypeStruct %i32 %i32\n"
+ "%struct = OpTypeStruct %st1 %st2\n"
+ "%st1val = OpConstantComposite %st1 %zero %c_f16_0_5\n"
+ "%st2val = OpConstantComposite %st2 %zero %zero\n"
+ "%const = OpConstantComposite %struct %st1val %st2val"));
+
+ fillRandomScalars(rnd, 1.f, 100.f, &positiveFloats[0], numElements);
+
+ for (size_t ndx = 0; ndx < numElements; ++ndx)
+ negativeFloats[ndx] = -positiveFloats[ndx];
+
+ for (size_t caseNdx = 0; caseNdx < cases.size(); ++caseNdx)
+ {
+ map<string, string> specializations;
+ ComputeShaderSpec spec;
+
+ specializations["CONSTANT"] = cases[caseNdx].param;
+ spec.assembly = shaderTemplate.specialize(specializations);
+ spec.inputs.push_back(BufferSp(new Float32Buffer(positiveFloats)));
+ spec.outputs.push_back(BufferSp(new Float32Buffer(negativeFloats)));
+ spec.numWorkGroups = IVec3(numElements, 1, 1);
+ spec.extensions.push_back("VK_KHR_16bit_storage");
+
+ group->addChild(new SpvAsmComputeShaderCase(testCtx, cases[caseNdx].name, cases[caseNdx].name, spec));
+ }
+
+ return group.release();
+}
+
+// IEEE-754 floating point numbers:
+// +--------+------+----------+-------------+
+// | binary | sign | exponent | significand |
+// +--------+------+----------+-------------+
+// | 16-bit | 1 | 5 | 10 |
+// +--------+------+----------+-------------+
+// | 32-bit | 1 | 8 | 23 |
+// +--------+------+----------+-------------+
+//
+// 16-bit floats:
+//
+// 0 000 00 00 0000 0001 (0x0001: 2e-24: minimum positive denormalized)
+// 0 000 00 11 1111 1111 (0x03ff: 2e-14 - 2e-24: maximum positive denormalized)
+// 0 000 01 00 0000 0000 (0x0400: 2e-14: minimum positive normalized)
+//
+// 0 000 00 00 0000 0000 (0x0000: +0)
+// 0 111 11 00 0000 0000 (0x7c00: +Inf)
+// 0 000 00 11 1111 0000 (0x03f0: +Denorm)
+// 0 000 01 00 0000 0001 (0x0401: +Norm)
+// 0 111 11 00 0000 1111 (0x7c0f: +SNaN)
+// 0 111 11 11 1111 0000 (0x7ff0: +QNaN)
+
+// Generate and return 16-bit floats and their corresponding 32-bit values.
+//
+// The first 14 number pairs are manually picked, while the rest are randomly generated.
+// Expected count to be at least 14 (numPicks).
+vector<deFloat16> getFloat16s (de::Random& rnd, deUint32 count)
+{
+ vector<deFloat16> float16;
+
+ float16.reserve(count);
+
+ // Zero
+ float16.push_back(deUint16(0x0000));
+ float16.push_back(deUint16(0x8000));
+ // Infinity
+ float16.push_back(deUint16(0x7c00));
+ float16.push_back(deUint16(0xfc00));
+ // SNaN
+ float16.push_back(deUint16(0x7c0f));
+ float16.push_back(deUint16(0xfc0f));
+ // QNaN
+ float16.push_back(deUint16(0x7ff0));
+ float16.push_back(deUint16(0xfff0));
+
+ // Denormalized
+ float16.push_back(deUint16(0x03f0));
+ float16.push_back(deUint16(0x83f0));
+ // Normalized
+ float16.push_back(deUint16(0x0401));
+ float16.push_back(deUint16(0x8401));
+ // Some normal number
+ float16.push_back(deUint16(0x14cb));
+ float16.push_back(deUint16(0x94cb));
+
+ const deUint32 numPicks = static_cast<deUint32>(float16.size());
+
+ DE_ASSERT(count >= numPicks);
+ count -= numPicks;
+
+ for (deUint32 numIdx = 0; numIdx < count; ++numIdx)
+ float16.push_back(rnd.getUint16());
+
+ return float16;
+}
+
+const vector<deFloat16> squarize(const vector<deFloat16>& inData, const deUint32 argNo)
+{
+ const size_t inDataLength = inData.size();
+ vector<deFloat16> result;
+
+ result.reserve(inDataLength * inDataLength);
+
+ if (argNo == 0)
+ {
+ for (size_t numIdx = 0; numIdx < inDataLength; ++numIdx)
+ result.insert(result.end(), inData.begin(), inData.end());
+ }
+
+ if (argNo == 1)
+ {
+ for (size_t numIdx = 0; numIdx < inDataLength; ++numIdx)
+ {
+ const vector<deFloat16> tmp(inDataLength, inData[numIdx]);
+
+ result.insert(result.end(), tmp.begin(), tmp.end());
+ }
+ }
+
+ return result;
+}
+
+const vector<deFloat16> squarizeVector(const vector<deFloat16>& inData, const deUint32 argNo)
+{
+ vector<deFloat16> vec;
+ vector<deFloat16> result;
+
+ // Create vectors. vec will contain each possible pair from inData
+ {
+ const size_t inDataLength = inData.size();
+
+ DE_ASSERT(inDataLength <= 64);
+
+ vec.reserve(2 * inDataLength * inDataLength);
+
+ for (size_t numIdxX = 0; numIdxX < inDataLength; ++numIdxX)
+ for (size_t numIdxY = 0; numIdxY < inDataLength; ++numIdxY)
+ {
+ vec.push_back(inData[numIdxX]);
+ vec.push_back(inData[numIdxY]);
+ }
+ }
+
+ // Create vector pairs. result will contain each possible pair from vec
+ {
+ const size_t coordsPerVector = 2;
+ const size_t vectorsCount = vec.size() / coordsPerVector;
+
+ result.reserve(coordsPerVector * vectorsCount * vectorsCount);
+
+ if (argNo == 0)
+ {
+ for (size_t numIdxX = 0; numIdxX < vectorsCount; ++numIdxX)
+ for (size_t numIdxY = 0; numIdxY < vectorsCount; ++numIdxY)
+ {
+ for (size_t coordNdx = 0; coordNdx < coordsPerVector; ++coordNdx)
+ result.push_back(vec[coordsPerVector * numIdxY + coordNdx]);
+ }
+ }
+
+ if (argNo == 1)
+ {
+ for (size_t numIdxX = 0; numIdxX < vectorsCount; ++numIdxX)
+ for (size_t numIdxY = 0; numIdxY < vectorsCount; ++numIdxY)
+ {
+ for (size_t coordNdx = 0; coordNdx < coordsPerVector; ++coordNdx)
+ result.push_back(vec[coordsPerVector * numIdxX + coordNdx]);
+ }
+ }
+ }
+
+ return result;
+}
+
+struct fp16isNan { bool operator()(const tcu::Float16 in1, const tcu::Float16) { return in1.isNaN(); } };
+struct fp16isInf { bool operator()(const tcu::Float16 in1, const tcu::Float16) { return in1.isInf(); } };
+struct fp16isEqual { bool operator()(const tcu::Float16 in1, const tcu::Float16 in2) { return in1.asFloat() == in2.asFloat(); } };
+struct fp16isUnequal { bool operator()(const tcu::Float16 in1, const tcu::Float16 in2) { return in1.asFloat() != in2.asFloat(); } };
+struct fp16isLess { bool operator()(const tcu::Float16 in1, const tcu::Float16 in2) { return in1.asFloat() < in2.asFloat(); } };
+struct fp16isGreater { bool operator()(const tcu::Float16 in1, const tcu::Float16 in2) { return in1.asFloat() > in2.asFloat(); } };
+struct fp16isLessOrEqual { bool operator()(const tcu::Float16 in1, const tcu::Float16 in2) { return in1.asFloat() <= in2.asFloat(); } };
+struct fp16isGreaterOrEqual { bool operator()(const tcu::Float16 in1, const tcu::Float16 in2) { return in1.asFloat() >= in2.asFloat(); } };
+
+template <class TestedLogicalFunction, bool onlyTestFunc, bool unationModeAnd>
+bool compareFP16Logical (const std::vector<Resource>& inputs, const vector<AllocationSp>& outputAllocs, const std::vector<Resource>&, TestLog& log)
+{
+ if (inputs.size() != 2 || outputAllocs.size() != 1)
+ return false;
+
+ vector<deUint8> input1Bytes;
+ vector<deUint8> input2Bytes;
+
+ inputs[0].getBytes(input1Bytes);
+ inputs[1].getBytes(input2Bytes);
+
+ const deUint32 denormModesCount = 2;
+ const deFloat16 float16one = tcu::Float16(1.0f).bits();
+ const deFloat16 float16zero = tcu::Float16(0.0f).bits();
+ const tcu::Float16 zero = tcu::Float16::zero(1);
+ const deFloat16* const outputAsFP16 = static_cast<deFloat16*>(outputAllocs[0]->getHostPtr());
+ const deFloat16* const input1AsFP16 = reinterpret_cast<deFloat16* const>(&input1Bytes.front());
+ const deFloat16* const input2AsFP16 = reinterpret_cast<deFloat16* const>(&input2Bytes.front());
+ deUint32 successfulRuns = denormModesCount;
+ std::string results[denormModesCount];
+ TestedLogicalFunction testedLogicalFunction;
+
+ for (deUint32 denormMode = 0; denormMode < denormModesCount; denormMode++)
+ {
+ const bool flushToZero = (denormMode == 1);
+
+ for (size_t idx = 0; idx < input1Bytes.size() / sizeof(deFloat16); ++idx)
+ {
+ const tcu::Float16 f1pre = tcu::Float16(input1AsFP16[idx]);
+ const tcu::Float16 f2pre = tcu::Float16(input2AsFP16[idx]);
+ const tcu::Float16 f1 = (flushToZero && f1pre.isDenorm()) ? zero : f1pre;
+ const tcu::Float16 f2 = (flushToZero && f2pre.isDenorm()) ? zero : f2pre;
+ deFloat16 expectedOutput = float16zero;
+
+ if (onlyTestFunc)
+ {
+ if (testedLogicalFunction(f1, f2))
+ expectedOutput = float16one;
+ }
+ else
+ {
+ if (unationModeAnd)
+ {
+ const bool ordered = !f1.isNaN() && !f2.isNaN();
+
+ if (ordered && testedLogicalFunction(f1, f2))
+ expectedOutput = float16one;
+ }
+ else
+ {
+ const bool unordered = f1.isNaN() || f2.isNaN();
+
+ if (unordered || testedLogicalFunction(f1, f2))
+ expectedOutput = float16one;
+ }
+ }
+
+ if (outputAsFP16[idx] != expectedOutput)
+ {
+ std::ostringstream str;
+
+ str << "ERROR: Sub-case #" << idx
+ << " flushToZero:" << flushToZero
+ << std::hex
+ << " failed, inputs: 0x" << f1.bits()
+ << ";0x" << f2.bits()
+ << " output: 0x" << outputAsFP16[idx]
+ << " expected output: 0x" << expectedOutput;
+
+ results[denormMode] = str.str();
+
+ successfulRuns--;
+
+ break;
+ }
+ }
+ }
+
+ if (successfulRuns == 0)
+ for (deUint32 denormMode = 0; denormMode < denormModesCount; denormMode++)
+ log << TestLog::Message << results[denormMode] << TestLog::EndMessage;
+
+ return successfulRuns > 0;
+}
+
} // anonymous
tcu::TestCaseGroup* createOpSourceTests (tcu::TestContext& testCtx)
deInt32 scActualValue1;
const char* resultOperation;
RGBA expectedColors[4];
-
- SpecConstantTwoIntGraphicsCase (const char* name,
- const char* definition0,
- const char* definition1,
- const char* resultType,
- const char* operation,
- deInt32 value0,
- deInt32 value1,
- const char* resultOp,
- const RGBA (&output)[4])
- : caseName (name)
- , scDefinition0 (definition0)
- , scDefinition1 (definition1)
- , scResultType (resultType)
- , scOperation (operation)
- , scActualValue0 (value0)
- , scActualValue1 (value1)
- , resultOperation (resultOp)
+ deInt32 scActualValueLength;
+
+ SpecConstantTwoIntGraphicsCase (const char* name,
+ const char* definition0,
+ const char* definition1,
+ const char* resultType,
+ const char* operation,
+ const deInt32 value0,
+ const deInt32 value1,
+ const char* resultOp,
+ const RGBA (&output)[4],
+ const deInt32 valueLength = sizeof(deInt32))
+ : caseName (name)
+ , scDefinition0 (definition0)
+ , scDefinition1 (definition1)
+ , scResultType (resultType)
+ , scOperation (operation)
+ , scActualValue0 (value0)
+ , scActualValue1 (value1)
+ , resultOperation (resultOp)
+ , scActualValueLength (valueLength)
{
expectedColors[0] = output[0];
expectedColors[1] = output[1];
RGBA outputColors1[4];
RGBA outputColors2[4];
+ const deInt32 m1AsFloat16 = 0xbc00; // -1(fp16) == 1 01111 0000000000 == 1011 1100 0000 0000
+
const char decorations1[] =
"OpDecorate %sc_0 SpecId 0\n"
"OpDecorate %sc_1 SpecId 1\n";
cases.push_back(SpecConstantTwoIntGraphicsCase("sconvert", " %i32 0", " %i32 0", "%i16", "SConvert %sc_0", -1, 0, addZeroToSc32, outputColors0));
// -1082130432 stored as 32-bit two's complement is the binary representation of -1 as IEEE-754 Float
cases.push_back(SpecConstantTwoIntGraphicsCase("fconvert", " %f32 0", " %f32 0", "%f64", "FConvert %sc_0", -1082130432, 0, addZeroToSc32, outputColors0));
+ cases.push_back(SpecConstantTwoIntGraphicsCase("fconvert16", " %f16 0", " %f16 0", "%f32", "FConvert %sc_0", m1AsFloat16, 0, addZeroToSc32, outputColors0, sizeof(deFloat16)));
// \todo[2015-12-1 antiagainst] OpQuantizeToF16
for (size_t caseNdx = 0; caseNdx < cases.size(); ++caseNdx)
specializations["TYPE_CONVERT"] = "%sc_op32 = OpConvertFToS %i32 %sc_op\n"; // Converts 64-bit float to 32-bit integer
}
+ // Special SPIR-V code for FConvert-case for 16-bit floats
+ if (strcmp(cases[caseNdx].caseName, "fconvert16") == 0)
+ {
+ fragments["capability"] = "OpCapability Float16\n"; // Adds 16-bit float capability
+ specializations["OPTYPE_DEFINITIONS"] = "%f16 = OpTypeFloat 16\n"; // Adds 16-bit float type
+ specializations["TYPE_CONVERT"] = "%sc_op32 = OpConvertFToS %i32 %sc_op\n"; // Converts 16-bit float to 32-bit integer
+ }
+
specializations["SC_DEF0"] = cases[caseNdx].scDefinition0;
specializations["SC_DEF1"] = cases[caseNdx].scDefinition1;
specializations["SC_RESULT_TYPE"] = cases[caseNdx].scResultType;
fragments["pre_main"] = tcu::StringTemplate(typesAndConstants1).specialize(specializations);
fragments["testfun"] = tcu::StringTemplate(function1).specialize(specializations);
- specConstants.append(cases[caseNdx].scActualValue0);
- specConstants.append(cases[caseNdx].scActualValue1);
+ specConstants.append(&cases[caseNdx].scActualValue0, cases[caseNdx].scActualValueLength);
+ specConstants.append(&cases[caseNdx].scActualValue1, cases[caseNdx].scActualValueLength);
createTestsForAllStages(
cases[caseNdx].caseName, inputColors, cases[caseNdx].expectedColors, fragments, specConstants,
RGBA outputColors1[4];
RGBA outputColors2[4];
RGBA outputColors3[4];
+ RGBA outputColors4[4];
map<string, string> fragments1;
map<string, string> fragments2;
map<string, string> fragments3;
+ map<string, string> fragments4;
+ std::vector<std::string> extensions4;
+ GraphicsResources resources4;
+ VulkanFeatures vulkanFeatures4;
const char typesAndConstants1[] =
"%c_f32_p2 = OpConstant %f32 0.2\n"
createTestsForAllStages("swap", inputColors, outputColors3, fragments3, group.get());
+ const char typesAndConstants4[] =
+ "%f16 = OpTypeFloat 16\n"
+ "%v4f16 = OpTypeVector %f16 4\n"
+ "%fp_f16 = OpTypePointer Function %f16\n"
+ "%fp_v4f16 = OpTypePointer Function %v4f16\n"
+ "%true = OpConstantTrue %bool\n"
+ "%false = OpConstantFalse %bool\n"
+ "%c_f32_p2 = OpConstant %f32 0.2\n";
+
+ // Swap the second and the third element of the given parameter.
+ const char function4[] =
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ "%param = OpFunctionParameter %v4f32\n"
+ "%entry = OpLabel\n"
+ "%result = OpVariable %fp_v4f16 Function\n"
+ "%param16 = OpFConvert %v4f16 %param\n"
+ " OpStore %result %param16\n"
+ "%a_loc = OpAccessChain %fp_f16 %result %c_i32_1\n"
+ "%a_init = OpLoad %f16 %a_loc\n"
+ "%b_loc = OpAccessChain %fp_f16 %result %c_i32_2\n"
+ "%b_init = OpLoad %f16 %b_loc\n"
+ " OpBranch %phi\n"
+
+ "%phi = OpLabel\n"
+ "%still_loop = OpPhi %bool %true %entry %false %phi\n"
+ "%a_next = OpPhi %f16 %a_init %entry %b_next %phi\n"
+ "%b_next = OpPhi %f16 %b_init %entry %a_next %phi\n"
+ " OpLoopMerge %exit %phi None\n"
+ " OpBranchConditional %still_loop %phi %exit\n"
+
+ "%exit = OpLabel\n"
+ " OpStore %a_loc %a_next\n"
+ " OpStore %b_loc %b_next\n"
+ "%ret16 = OpLoad %v4f16 %result\n"
+ "%ret = OpFConvert %v4f32 %ret16\n"
+ " OpReturnValue %ret\n"
+
+ " OpFunctionEnd\n";
+
+ fragments4["pre_main"] = typesAndConstants4;
+ fragments4["testfun"] = function4;
+ fragments4["capability"] = "OpCapability StorageUniformBufferBlock16\n";
+ fragments4["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+
+ extensions4.push_back("VK_KHR_16bit_storage");
+ extensions4.push_back("VK_KHR_shader_float16_int8");
+
+ vulkanFeatures4.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+ vulkanFeatures4.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+
+ outputColors4[0] = RGBA(127, 127, 127, 255);
+ outputColors4[1] = RGBA(127, 0, 0, 255);
+ outputColors4[2] = RGBA(0, 0, 127, 255);
+ outputColors4[3] = RGBA(0, 127, 0, 255);
+
+ createTestsForAllStages("swap16", inputColors, outputColors4, fragments4, resources4, extensions4, group.get(), vulkanFeatures4);
+
return group.release();
}
map<string, string> codeSpecialization;
map<string, string> fragments;
SpecConstants passConstants;
- deInt32 specConstant;
codeSpecialization["condition"] = tests[idx].condition;
fragments["testfun"] = specConstantFunction.specialize(codeSpecialization);
fragments["decoration"] = specDecorations;
fragments["pre_main"] = specConstants;
- memcpy(&specConstant, &tests[idx].valueAsFloat, sizeof(float));
- passConstants.append(specConstant);
+ passConstants.append<float>(tests[idx].valueAsFloat);
createTestsForAllStages(string("spec_const_") + tests[idx].name, inputColors, expectedColors, fragments, passConstants, testCtx);
}
map<string, string> fragments;
map<string, string> constantSpecialization;
SpecConstants passConstants;
- deInt32 specConstant;
constantSpecialization["output1"] = tests[idx].possibleOutput1;
constantSpecialization["output2"] = tests[idx].possibleOutput2;
fragments["decoration"] = specDecorations;
fragments["pre_main"] = specConstants.specialize(constantSpecialization);
- memcpy(&specConstant, &tests[idx].inputAsFloat, sizeof(float));
- passConstants.append(specConstant);
+ passConstants.append<float>(tests[idx].inputAsFloat);
createTestsForAllStages(string("spec_const_") + tests[idx].name, inputColors, expectedColors, fragments, passConstants, testCtx);
}
DATA_TYPE_UNSIGNED_16,
DATA_TYPE_UNSIGNED_32,
DATA_TYPE_UNSIGNED_64,
+ DATA_TYPE_FLOAT_16,
DATA_TYPE_FLOAT_32,
DATA_TYPE_FLOAT_64,
DATA_TYPE_VEC2_SIGNED_16,
case DATA_TYPE_SIGNED_16:
case DATA_TYPE_UNSIGNED_16:
+ case DATA_TYPE_FLOAT_16:
return "16";
case DATA_TYPE_SIGNED_32:
case DATA_TYPE_SIGNED_16:
case DATA_TYPE_UNSIGNED_16:
+ case DATA_TYPE_FLOAT_16:
return "2";
case DATA_TYPE_SIGNED_32:
case DATA_TYPE_SIGNED_16:
case DATA_TYPE_SIGNED_32:
case DATA_TYPE_SIGNED_64:
+ case DATA_TYPE_FLOAT_16:
case DATA_TYPE_FLOAT_32:
case DATA_TYPE_FLOAT_64:
case DATA_TYPE_VEC2_SIGNED_16:
case DATA_TYPE_UNSIGNED_64:
return true;
+ case DATA_TYPE_FLOAT_16:
case DATA_TYPE_FLOAT_32:
case DATA_TYPE_FLOAT_64:
case DATA_TYPE_VEC2_SIGNED_16:
case DATA_TYPE_VEC2_SIGNED_32:
return false;
+ case DATA_TYPE_FLOAT_16:
case DATA_TYPE_FLOAT_32:
case DATA_TYPE_FLOAT_64:
return true;
case DATA_TYPE_UNSIGNED_16: return getSpecializedBuffer<deUint16>(number);
case DATA_TYPE_UNSIGNED_32: return getSpecializedBuffer<deUint32>(number);
case DATA_TYPE_UNSIGNED_64: return getSpecializedBuffer<deUint64>(number);
+ case DATA_TYPE_FLOAT_16: return getSpecializedBuffer<deUint16>(number);
case DATA_TYPE_FLOAT_32: return getSpecializedBuffer<deUint32>(number);
case DATA_TYPE_FLOAT_64: return getSpecializedBuffer<deUint64>(number);
case DATA_TYPE_VEC2_SIGNED_16: return getSpecializedBuffer<deUint32>(number);
from == DATA_TYPE_UNSIGNED_64 || to == DATA_TYPE_UNSIGNED_64);
}
+bool usesFloat16 (ConversionDataType from, ConversionDataType to)
+{
+ return (from == DATA_TYPE_FLOAT_16 || to == DATA_TYPE_FLOAT_16);
+}
+
bool usesFloat32 (ConversionDataType from, ConversionDataType to)
{
return (from == DATA_TYPE_FLOAT_32 || to == DATA_TYPE_FLOAT_32);
void getVulkanFeaturesAndExtensions (ConversionDataType from, ConversionDataType to, VulkanFeatures& vulkanFeatures, vector<string>& extensions)
{
- vulkanFeatures.coreFeatures.shaderInt16 = usesInt16(from, to) ? DE_TRUE : DE_FALSE;
- vulkanFeatures.coreFeatures.shaderInt64 = usesInt64(from, to) ? DE_TRUE : DE_FALSE;
- vulkanFeatures.coreFeatures.shaderFloat64 = usesFloat64(from, to) ? DE_TRUE : DE_FALSE;
+ if (usesInt16(from, to) && !usesInt32(from, to))
+ vulkanFeatures.coreFeatures.shaderInt16 = DE_TRUE;
+
+ if (usesInt64(from, to))
+ vulkanFeatures.coreFeatures.shaderInt64 = DE_TRUE;
- if (usesInt16(from, to) && usesInt32(from, to))
- vulkanFeatures.coreFeatures.shaderInt16 = DE_FALSE;
+ if (usesFloat64(from, to))
+ vulkanFeatures.coreFeatures.shaderFloat64 = DE_TRUE;
- if (usesInt16(from, to))
+ if (usesInt16(from, to) || usesFloat16(from, to))
{
extensions.push_back("VK_KHR_16bit_storage");
- vulkanFeatures.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+ vulkanFeatures.ext16BitStorage |= EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
}
- if (usesInt8(from, to))
+ if (usesFloat16(from, to) || usesInt8(from, to))
{
- extensions.push_back("VK_KHR_8bit_storage");
extensions.push_back("VK_KHR_shader_float16_int8");
- vulkanFeatures.ext8BitStorage = EXT8BITSTORAGEFEATURES_STORAGE_BUFFER;
- vulkanFeatures.extFloat16Int8 = EXTFLOAT16INT8FEATURES_INT8;
+
+ if (usesFloat16(from, to))
+ {
+ vulkanFeatures.extFloat16Int8 |= EXTFLOAT16INT8FEATURES_FLOAT16;
+ }
+
+ if (usesInt8(from, to))
+ {
+ vulkanFeatures.extFloat16Int8 |= EXTFLOAT16INT8FEATURES_INT8;
+
+ extensions.push_back("VK_KHR_8bit_storage");
+ vulkanFeatures.ext8BitStorage |= EXT8BITSTORAGEFEATURES_STORAGE_BUFFER;
+ }
}
}
"%u16 = OpTypeInt 16 0\n"
"%i16vec2 = OpTypeVector %i16 2\n";
+ // Conversions between 16 and 32 bit are provided by SPV_KHR_16bit_storage. The rest requires explicit Int16
if (requiresInt16Capability)
caps += "OpCapability Int16\n";
+ }
+
+ if (usesFloat16(from, to))
+ {
+ decl += "%f16 = OpTypeFloat 16\n";
+
+ // Conversions between 16 and 32 bit are provided by SPV_KHR_16bit_storage. The rest requires explicit Float16
+ if (!(usesInt32(from, to) || usesFloat32(from, to)))
+ caps += "OpCapability Float16\n";
+ }
+ if (usesInt16(from, to) || usesFloat16(from, to))
+ {
caps += "OpCapability StorageUniformBufferBlock16\n"
"OpCapability StorageUniform16\n";
exts += "OpExtension \"SPV_KHR_16bit_storage\"\n";
// All hexadecimal values below represent 1234.0 as 16/32/64-bit IEEE 754 float
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_FLOAT_64, 0x449a4000, true, 0x4093480000000000));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_FLOAT_32, 0x4093480000000000, true, 0x449a4000));
+
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_FLOAT_16, 0x449a4000, true, 0x64D2));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_FLOAT_32, 0x64D2, true, 0x449a4000));
+
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_FLOAT_64, 0x64D2, true, 0x4093480000000000));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_FLOAT_16, 0x4093480000000000, true, 0x64D2));
}
else if (instruction == "OpConvertFToU")
{
// Normal numbers from uint8 range
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_8, 0x5020, true, 33, "33"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_UNSIGNED_8, 0x42280000, true, 42, "42"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_UNSIGNED_8, 0x4067800000000000ull, true, 188, "188"));
// Maximum uint8 value
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_8, 0x5BF8, true, 255, "max"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_UNSIGNED_8, 0x437F0000, true, 255, "max"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_UNSIGNED_8, 0x406FE00000000000ull, true, 255, "max"));
// +0
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_8, 0x0000, true, 0, "p0"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_UNSIGNED_8, 0x00000000, true, 0, "p0"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_UNSIGNED_8, 0x0000000000000000ull, true, 0, "p0"));
// -0
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_8, 0x8000, true, 0, "m0"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_UNSIGNED_8, 0x80000000, true, 0, "m0"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_UNSIGNED_8, 0x8000000000000000ull, true, 0, "m0"));
+ // All hexadecimal values below represent 1234.0 as 16/32/64-bit IEEE 754 float
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_16, 0x64D2, true, 1234, "1234"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_32, 0x64D2, true, 1234, "1234"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_64, 0x64D2, true, 1234, "1234"));
+
+ // 0x7BFF = 0111 1011 1111 1111 = 0 11110 1111111111 = 65504
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_16, 0x7BFF, true, 65504, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_32, 0x7BFF, true, 65504, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_64, 0x7BFF, true, 65504, "max"));
+
+ // +0
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_32, 0x0000, true, 0, "p0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_16, 0x0000, true, 0, "p0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_64, 0x0000, true, 0, "p0"));
+
+ // -0
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_16, 0x8000, true, 0, "m0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_32, 0x8000, true, 0, "m0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_UNSIGNED_64, 0x8000, true, 0, "m0"));
+
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_UNSIGNED_16, 0x449a4000, true, 1234));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_UNSIGNED_32, 0x449a4000, true, 1234));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_UNSIGNED_64, 0x449a4000, true, 1234));
else if (instruction == "OpConvertUToF")
{
// Normal numbers from uint8 range
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_8, DATA_TYPE_FLOAT_16, 116, true, 0x5740, "116"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_8, DATA_TYPE_FLOAT_32, 232, true, 0x43680000, "232"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_8, DATA_TYPE_FLOAT_64, 164, true, 0x4064800000000000ull, "164"));
// Maximum uint8 value
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_8, DATA_TYPE_FLOAT_16, 255, true, 0x5BF8, "max"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_8, DATA_TYPE_FLOAT_32, 255, true, 0x437F0000, "max"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_8, DATA_TYPE_FLOAT_64, 255, true, 0x406FE00000000000ull, "max"));
+ // All hexadecimal values below represent 1234.0 as 32/64-bit IEEE 754 float
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_16, DATA_TYPE_FLOAT_16, 1234, true, 0x64D2, "1234"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_32, DATA_TYPE_FLOAT_16, 1234, true, 0x64D2, "1234"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_64, DATA_TYPE_FLOAT_16, 1234, true, 0x64D2, "1234"));
+
+ // 0x7BFF = 0111 1011 1111 1111 = 0 11110 1111111111 = 65504
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_16, DATA_TYPE_FLOAT_16, 65504, true, 0x7BFF, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_32, DATA_TYPE_FLOAT_16, 65504, true, 0x7BFF, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_64, DATA_TYPE_FLOAT_16, 65504, true, 0x7BFF, "max"));
+
testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_16, DATA_TYPE_FLOAT_32, 1234, true, 0x449a4000));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_16, DATA_TYPE_FLOAT_64, 1234, true, 0x4093480000000000));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_UNSIGNED_32, DATA_TYPE_FLOAT_32, 1234, true, 0x449a4000));
else if (instruction == "OpConvertFToS")
{
// Normal numbers from int8 range
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_8, 0xC980, true, -11, "m11"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_8, 0xC2140000, true, -37, "m37"));
testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_8, 0xC050800000000000ull, true, -66, "m66"));
- // Minimum int8 value
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_8, 0xC3000000, true, -128, "min"));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_8, 0xC060000000000000ull, true, -128, "min"));
+ // Minimum int8 value
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_8, 0xD800, true, -128, "min"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_8, 0xC3000000, true, -128, "min"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_8, 0xC060000000000000ull, true, -128, "min"));
+
+ // Maximum int8 value
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_8, 0x57F0, true, 127, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_8, 0x42FE0000, true, 127, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_8, 0x405FC00000000000ull, true, 127, "max"));
+
+ // +0
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_8, 0x0000, true, 0, "p0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_8, 0x00000000, true, 0, "p0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_8, 0x0000000000000000ull, true, 0, "p0"));
+
+ // -0
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_8, 0x8000, true, 0, "m0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_8, 0x80000000, true, 0, "m0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_8, 0x8000000000000000ull, true, 0, "m0"));
+
+ // All hexadecimal values below represent -1234.0 as 32/64-bit IEEE 754 float
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_16, 0xE4D2, true, -1234, "m1234"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_32, 0xE4D2, true, -1234, "m1234"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_64, 0xE4D2, true, -1234, "m1234"));
+
+ // 0xF800 = 1111 1000 0000 0000 = 1 11110 0000000000 = -32768
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_16, 0xF800, true, -32768, "min"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_32, 0xF800, true, -32768, "min"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_64, 0xF800, true, -32768, "min"));
+
+ // 0x77FF = 0111 0111 1111 1111 = 0 11101 1111111111 = 32752
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_16, 0x77FF, true, 32752, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_32, 0x77FF, true, 32752, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_64, 0x77FF, true, 32752, "max"));
+
+ // +0
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_16, 0x0000, true, 0, "p0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_32, 0x0000, true, 0, "p0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_64, 0x0000, true, 0, "p0"));
+
+ // -0
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_16, 0x8000, true, 0, "m0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_32, 0x8000, true, 0, "m0"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_16, DATA_TYPE_SIGNED_64, 0x8000, true, 0, "m0"));
+
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_16, 0xc49a4000, true, -1234));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_32, 0xc49a4000, true, -1234));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_64, 0xc49a4000, true, -1234));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_16, 0xc093480000000000, true, -1234));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_32, 0xc093480000000000, true, -1234));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_64, 0xc093480000000000, true, -1234));
+ }
+ else if (instruction == "OpConvertSToF")
+ {
+ // Normal numbers from int8 range
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_16, -12, true, 0xCA00, "m21"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_32, -21, true, 0xC1A80000, "m21"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_64, -99, true, 0xC058C00000000000ull, "m99"));
+
+ // Minimum int8 value
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_16, -128, true, 0xD800, "min"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_32, -128, true, 0xC3000000, "min"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_64, -128, true, 0xC060000000000000ull, "min"));
+
+ // Maximum int8 value
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_16, 127, true, 0x57F0, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_32, 127, true, 0x42FE0000, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_64, 127, true, 0x405FC00000000000ull, "max"));
+
+ // All hexadecimal values below represent 1234.0 as 32/64-bit IEEE 754 float
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_16, DATA_TYPE_FLOAT_16, -1234, true, 0xE4D2, "m1234"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_32, DATA_TYPE_FLOAT_16, -1234, true, 0xE4D2, "m1234"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_64, DATA_TYPE_FLOAT_16, -1234, true, 0xE4D2, "m1234"));
+
+ // 0xF800 = 1111 1000 0000 0000 = 1 11110 0000000000 = -32768
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_16, DATA_TYPE_FLOAT_16, -32768, true, 0xF800, "min"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_32, DATA_TYPE_FLOAT_16, -32768, true, 0xF800, "min"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_64, DATA_TYPE_FLOAT_16, -32768, true, 0xF800, "min"));
+
+ // 0x77FF = 0111 0111 1111 1111 = 0 11101 1111111111 = 32752
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_16, DATA_TYPE_FLOAT_16, 32752, true, 0x77FF, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_32, DATA_TYPE_FLOAT_16, 32752, true, 0x77FF, "max"));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_64, DATA_TYPE_FLOAT_16, 32752, true, 0x77FF, "max"));
+
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_16, DATA_TYPE_FLOAT_32, -1234, true, 0xc49a4000));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_16, DATA_TYPE_FLOAT_64, -1234, true, 0xc093480000000000));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_32, DATA_TYPE_FLOAT_32, -1234, true, 0xc49a4000));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_32, DATA_TYPE_FLOAT_64, -1234, true, 0xc093480000000000));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_64, DATA_TYPE_FLOAT_32, -1234, true, 0xc49a4000));
+ testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_64, DATA_TYPE_FLOAT_64, -1234, true, 0xc093480000000000));
+ }
+ else
+ DE_FATAL("Unknown instruction");
+}
+
+const map<string, string> getConvertCaseFragments (string instruction, const ConvertCase& convertCase)
+{
+ map<string, string> params = convertCase.m_asmTypes;
+ map<string, string> fragments;
+
+ params["instruction"] = instruction;
+ params["inDecorator"] = getByteWidthStr(convertCase.m_fromType);
+
+ const StringTemplate decoration (
+ " OpDecorate %SSBOi DescriptorSet 0\n"
+ " OpDecorate %SSBOo DescriptorSet 0\n"
+ " OpDecorate %SSBOi Binding 0\n"
+ " OpDecorate %SSBOo Binding 1\n"
+ " OpDecorate %s_SSBOi Block\n"
+ " OpDecorate %s_SSBOo Block\n"
+ "OpMemberDecorate %s_SSBOi 0 Offset 0\n"
+ "OpMemberDecorate %s_SSBOo 0 Offset 0\n");
+
+ const StringTemplate pre_main (
+ "${datatype_additional_decl:opt}"
+ " %ptr_in = OpTypePointer StorageBuffer %${inputType}\n"
+ " %ptr_out = OpTypePointer StorageBuffer %${outputType}\n"
+ " %s_SSBOi = OpTypeStruct %${inputType}\n"
+ " %s_SSBOo = OpTypeStruct %${outputType}\n"
+ " %ptr_SSBOi = OpTypePointer StorageBuffer %s_SSBOi\n"
+ " %ptr_SSBOo = OpTypePointer StorageBuffer %s_SSBOo\n"
+ " %SSBOi = OpVariable %ptr_SSBOi StorageBuffer\n"
+ " %SSBOo = OpVariable %ptr_SSBOo StorageBuffer\n");
+
+ const StringTemplate testfun (
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ "%param = OpFunctionParameter %v4f32\n"
+ "%label = OpLabel\n"
+ "%iLoc = OpAccessChain %ptr_in %SSBOi %c_u32_0\n"
+ "%oLoc = OpAccessChain %ptr_out %SSBOo %c_u32_0\n"
+ "%valIn = OpLoad %${inputType} %iLoc\n"
+ "%valOut = ${instruction} %${outputType} %valIn\n"
+ " OpStore %oLoc %valOut\n"
+ " OpReturnValue %param\n"
+ " OpFunctionEnd\n");
+
+ params["datatype_extensions"] =
+ params["datatype_extensions"] +
+ "OpExtension \"SPV_KHR_storage_buffer_storage_class\"\n";
+
+ fragments["capability"] = params["datatype_capabilities"];
+ fragments["extension"] = params["datatype_extensions"];
+ fragments["decoration"] = decoration.specialize(params);
+ fragments["pre_main"] = pre_main.specialize(params);
+ fragments["testfun"] = testfun.specialize(params);
+
+ return fragments;
+}
+
+// Test for OpSConvert, OpUConvert, OpFConvert and OpConvert* in compute shaders
+tcu::TestCaseGroup* createConvertComputeTests (tcu::TestContext& testCtx, const string& instruction, const string& name)
+{
+ de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, name.c_str(), instruction.c_str()));
+ vector<ConvertCase> testCases;
+ createConvertCases(testCases, instruction);
+
+ for (vector<ConvertCase>::const_iterator test = testCases.begin(); test != testCases.end(); ++test)
+ {
+ ComputeShaderSpec spec;
+ spec.assembly = getConvertCaseShaderStr(instruction, *test);
+ spec.numWorkGroups = IVec3(1, 1, 1);
+ spec.inputs.push_back (test->m_inputBuffer);
+ spec.outputs.push_back (test->m_outputBuffer);
+
+ getVulkanFeaturesAndExtensions(test->m_fromType, test->m_toType, spec.requestedVulkanFeatures, spec.extensions);
+
+ group->addChild(new SpvAsmComputeShaderCase(testCtx, test->m_name.c_str(), "", spec));
+ }
+ return group.release();
+}
+
+// Test for OpSConvert, OpUConvert, OpFConvert and OpConvert* in graphics shaders
+tcu::TestCaseGroup* createConvertGraphicsTests (tcu::TestContext& testCtx, const string& instruction, const string& name)
+{
+ de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, name.c_str(), instruction.c_str()));
+ vector<ConvertCase> testCases;
+ createConvertCases(testCases, instruction);
+
+ for (vector<ConvertCase>::const_iterator test = testCases.begin(); test != testCases.end(); ++test)
+ {
+ map<string, string> fragments = getConvertCaseFragments(instruction, *test);
+ vector<string> features;
+ VulkanFeatures vulkanFeatures;
+ GraphicsResources resources;
+ vector<string> extensions;
+ SpecConstants noSpecConstants;
+ PushConstants noPushConstants;
+ GraphicsInterfaces noInterfaces;
+ tcu::RGBA defaultColors[4];
+
+ getDefaultColors (defaultColors);
+ resources.inputs.push_back (Resource(test->m_inputBuffer, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ resources.outputs.push_back (Resource(test->m_outputBuffer, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ extensions.push_back ("VK_KHR_storage_buffer_storage_class");
+
+ getVulkanFeaturesAndExtensions(test->m_fromType, test->m_toType, vulkanFeatures, extensions);
+
+ createTestsForAllStages(
+ test->m_name, defaultColors, defaultColors, fragments, noSpecConstants,
+ noPushConstants, resources, noInterfaces, extensions, features, vulkanFeatures, group.get());
+ }
+ return group.release();
+}
+
+// Constant-Creation Instructions: OpConstant, OpConstantComposite
+tcu::TestCaseGroup* createOpConstantFloat16Tests(tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> opConstantCompositeTests (new tcu::TestCaseGroup(testCtx, "opconstant", "OpConstant and OpConstantComposite instruction"));
+ RGBA inputColors[4];
+ RGBA outputColors[4];
+ vector<string> extensions;
+ GraphicsResources resources;
+ VulkanFeatures features;
+
+ const char functionStart[] =
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ "%param1 = OpFunctionParameter %v4f32\n"
+ "%lbl = OpLabel\n";
+
+ const char functionEnd[] =
+ "%transformed_param_32 = OpFConvert %v4f32 %transformed_param\n"
+ " OpReturnValue %transformed_param_32\n"
+ " OpFunctionEnd\n";
+
+ struct NameConstantsCode
+ {
+ string name;
+ string constants;
+ string code;
+ };
+
+#define FLOAT_16_COMMON_TYPES_AND_CONSTS \
+ "%f16 = OpTypeFloat 16\n" \
+ "%c_f16_0 = OpConstant %f16 0.0\n" \
+ "%c_f16_0_5 = OpConstant %f16 0.5\n" \
+ "%c_f16_1 = OpConstant %f16 1.0\n" \
+ "%v4f16 = OpTypeVector %f16 4\n" \
+ "%fp_f16 = OpTypePointer Function %f16\n" \
+ "%fp_v4f16 = OpTypePointer Function %v4f16\n" \
+ "%c_v4f16_1_1_1_1 = OpConstantComposite %v4f16 %c_f16_1 %c_f16_1 %c_f16_1 %c_f16_1\n" \
+ "%a4f16 = OpTypeArray %f16 %c_u32_4\n" \
+
+ NameConstantsCode tests[] =
+ {
+ {
+ "vec4",
+
+ FLOAT_16_COMMON_TYPES_AND_CONSTS
+ "%cval = OpConstantComposite %v4f16 %c_f16_0_5 %c_f16_0_5 %c_f16_0_5 %c_f16_0\n",
+ "%param1_16 = OpFConvert %v4f16 %param1\n"
+ "%transformed_param = OpFAdd %v4f16 %param1_16 %cval\n"
+ },
+ {
+ "struct",
+
+ FLOAT_16_COMMON_TYPES_AND_CONSTS
+ "%stype = OpTypeStruct %v4f16 %f16\n"
+ "%fp_stype = OpTypePointer Function %stype\n"
+ "%f16_n_1 = OpConstant %f16 -1.0\n"
+ "%f16_1_5 = OpConstant %f16 !0x3e00\n" // +1.5
+ "%cvec = OpConstantComposite %v4f16 %f16_1_5 %f16_1_5 %f16_1_5 %c_f16_1\n"
+ "%cval = OpConstantComposite %stype %cvec %f16_n_1\n",
+
+ "%v = OpVariable %fp_stype Function %cval\n"
+ "%vec_ptr = OpAccessChain %fp_v4f16 %v %c_u32_0\n"
+ "%f16_ptr = OpAccessChain %fp_f16 %v %c_u32_1\n"
+ "%vec_val = OpLoad %v4f16 %vec_ptr\n"
+ "%f16_val = OpLoad %f16 %f16_ptr\n"
+ "%tmp1 = OpVectorTimesScalar %v4f16 %c_v4f16_1_1_1_1 %f16_val\n" // vec4(-1)
+ "%param1_16 = OpFConvert %v4f16 %param1\n"
+ "%tmp2 = OpFAdd %v4f16 %tmp1 %param1_16\n" // param1 + vec4(-1)
+ "%transformed_param = OpFAdd %v4f16 %tmp2 %vec_val\n" // param1 + vec4(-1) + vec4(1.5, 1.5, 1.5, 1.0)
+ },
+ {
+ // [1|0|0|0.5] [x] = x + 0.5
+ // [0|1|0|0.5] [y] = y + 0.5
+ // [0|0|1|0.5] [z] = z + 0.5
+ // [0|0|0|1 ] [1] = 1
+ "matrix",
+
+ FLOAT_16_COMMON_TYPES_AND_CONSTS
+ "%mat4x4_f16 = OpTypeMatrix %v4f16 4\n"
+ "%v4f16_1_0_0_0 = OpConstantComposite %v4f16 %c_f16_1 %c_f16_0 %c_f16_0 %c_f16_0\n"
+ "%v4f16_0_1_0_0 = OpConstantComposite %v4f16 %c_f16_0 %c_f16_1 %c_f16_0 %c_f16_0\n"
+ "%v4f16_0_0_1_0 = OpConstantComposite %v4f16 %c_f16_0 %c_f16_0 %c_f16_1 %c_f16_0\n"
+ "%v4f16_0_5_0_5_0_5_1 = OpConstantComposite %v4f16 %c_f16_0_5 %c_f16_0_5 %c_f16_0_5 %c_f16_1\n"
+ "%cval = OpConstantComposite %mat4x4_f16 %v4f16_1_0_0_0 %v4f16_0_1_0_0 %v4f16_0_0_1_0 %v4f16_0_5_0_5_0_5_1\n",
+
+ "%param1_16 = OpFConvert %v4f16 %param1\n"
+ "%transformed_param = OpMatrixTimesVector %v4f16 %cval %param1_16\n"
+ },
+ {
+ "array",
+
+ FLOAT_16_COMMON_TYPES_AND_CONSTS
+ "%c_v4f16_1_1_1_0 = OpConstantComposite %v4f16 %c_f16_1 %c_f16_1 %c_f16_1 %c_f16_0\n"
+ "%fp_a4f16 = OpTypePointer Function %a4f16\n"
+ "%f16_n_1 = OpConstant %f16 -1.0\n"
+ "%f16_1_5 = OpConstant %f16 !0x3e00\n" // +1.5
+ "%carr = OpConstantComposite %a4f16 %c_f16_0 %f16_n_1 %f16_1_5 %c_f16_0\n",
+
+ "%v = OpVariable %fp_a4f16 Function %carr\n"
+ "%f = OpAccessChain %fp_f16 %v %c_u32_0\n"
+ "%f1 = OpAccessChain %fp_f16 %v %c_u32_1\n"
+ "%f2 = OpAccessChain %fp_f16 %v %c_u32_2\n"
+ "%f3 = OpAccessChain %fp_f16 %v %c_u32_3\n"
+ "%f_val = OpLoad %f16 %f\n"
+ "%f1_val = OpLoad %f16 %f1\n"
+ "%f2_val = OpLoad %f16 %f2\n"
+ "%f3_val = OpLoad %f16 %f3\n"
+ "%ftot1 = OpFAdd %f16 %f_val %f1_val\n"
+ "%ftot2 = OpFAdd %f16 %ftot1 %f2_val\n"
+ "%ftot3 = OpFAdd %f16 %ftot2 %f3_val\n" // 0 - 1 + 1.5 + 0
+ "%add_vec = OpVectorTimesScalar %v4f16 %c_v4f16_1_1_1_0 %ftot3\n"
+ "%param1_16 = OpFConvert %v4f16 %param1\n"
+ "%transformed_param = OpFAdd %v4f16 %param1_16 %add_vec\n"
+ },
+ {
+ //
+ // [
+ // {
+ // 0.0,
+ // [ 1.0, 1.0, 1.0, 1.0]
+ // },
+ // {
+ // 1.0,
+ // [ 0.0, 0.5, 0.0, 0.0]
+ // }, // ^^^
+ // {
+ // 0.0,
+ // [ 1.0, 1.0, 1.0, 1.0]
+ // }
+ // ]
+ "array_of_struct_of_array",
+
+ FLOAT_16_COMMON_TYPES_AND_CONSTS
+ "%c_v4f16_1_1_1_0 = OpConstantComposite %v4f16 %c_f16_1 %c_f16_1 %c_f16_1 %c_f16_0\n"
+ "%fp_a4f16 = OpTypePointer Function %a4f16\n"
+ "%stype = OpTypeStruct %f16 %a4f16\n"
+ "%a3stype = OpTypeArray %stype %c_u32_3\n"
+ "%fp_a3stype = OpTypePointer Function %a3stype\n"
+ "%ca4f16_0 = OpConstantComposite %a4f16 %c_f16_0 %c_f16_0_5 %c_f16_0 %c_f16_0\n"
+ "%ca4f16_1 = OpConstantComposite %a4f16 %c_f16_1 %c_f16_1 %c_f16_1 %c_f16_1\n"
+ "%cstype1 = OpConstantComposite %stype %c_f16_0 %ca4f16_1\n"
+ "%cstype2 = OpConstantComposite %stype %c_f16_1 %ca4f16_0\n"
+ "%carr = OpConstantComposite %a3stype %cstype1 %cstype2 %cstype1",
+
+ "%v = OpVariable %fp_a3stype Function %carr\n"
+ "%f = OpAccessChain %fp_f16 %v %c_u32_1 %c_u32_1 %c_u32_1\n"
+ "%f_l = OpLoad %f16 %f\n"
+ "%add_vec = OpVectorTimesScalar %v4f16 %c_v4f16_1_1_1_0 %f_l\n"
+ "%param1_16 = OpFConvert %v4f16 %param1\n"
+ "%transformed_param = OpFAdd %v4f16 %param1_16 %add_vec\n"
+ }
+ };
+
+ getHalfColorsFullAlpha(inputColors);
+ outputColors[0] = RGBA(255, 255, 255, 255);
+ outputColors[1] = RGBA(255, 127, 127, 255);
+ outputColors[2] = RGBA(127, 255, 127, 255);
+ outputColors[3] = RGBA(127, 127, 255, 255);
+
+ extensions.push_back("VK_KHR_16bit_storage");
+
+ for (size_t testNdx = 0; testNdx < sizeof(tests) / sizeof(NameConstantsCode); ++testNdx)
+ {
+ map<string, string> fragments;
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = "OpCapability Float16\n";
+ fragments["pre_main"] = tests[testNdx].constants;
+ fragments["testfun"] = string(functionStart) + tests[testNdx].code + functionEnd;
+
+ createTestsForAllStages(tests[testNdx].name, inputColors, outputColors, fragments, resources, extensions, opConstantCompositeTests.get(), features);
+ }
+ return opConstantCompositeTests.release();
+}
+
+template<typename T>
+void finalizeTestsCreation (T& specResource,
+ const map<string, string>& fragments,
+ tcu::TestContext& testCtx,
+ tcu::TestCaseGroup& testGroup,
+ const std::string& testName,
+ const VulkanFeatures& vulkanFeatures,
+ const vector<string>& extensions,
+ const IVec3& numWorkGroups);
+
+template<>
+void finalizeTestsCreation (GraphicsResources& specResource,
+ const map<string, string>& fragments,
+ tcu::TestContext& ,
+ tcu::TestCaseGroup& testGroup,
+ const std::string& testName,
+ const VulkanFeatures& vulkanFeatures,
+ const vector<string>& extensions,
+ const IVec3& )
+{
+ RGBA defaultColors[4];
+ getDefaultColors(defaultColors);
+
+ createTestsForAllStages(testName, defaultColors, defaultColors, fragments, specResource, extensions, &testGroup, vulkanFeatures);
+}
+
+template<>
+void finalizeTestsCreation (ComputeShaderSpec& specResource,
+ const map<string, string>& fragments,
+ tcu::TestContext& testCtx,
+ tcu::TestCaseGroup& testGroup,
+ const std::string& testName,
+ const VulkanFeatures& vulkanFeatures,
+ const vector<string>& extensions,
+ const IVec3& numWorkGroups)
+{
+ specResource.numWorkGroups = numWorkGroups;
+ specResource.requestedVulkanFeatures = vulkanFeatures;
+ specResource.extensions = extensions;
+
+ specResource.assembly = makeComputeShaderAssembly(fragments);
+
+ testGroup.addChild(new SpvAsmComputeShaderCase(testCtx, testName.c_str(), "", specResource));
+}
+
+template<class SpecResource>
+tcu::TestCaseGroup* createFloat16LogicalSet (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "logical", "Float 16 logical tests"));
+
+ de::Random rnd (deStringHash(testGroup->getName()));
+ const StringTemplate capabilities ("OpCapability ${cap}\n");
+ const deUint32 numDataPoints = 16;
+ const vector<deFloat16> float16Data = getFloat16s(rnd, numDataPoints);
+ const vector<deFloat16> float16Data1 = squarize(float16Data, 0);
+ const vector<deFloat16> float16Data2 = squarize(float16Data, 1);
+ const vector<deFloat16> float16DataVec1 = squarizeVector(float16Data, 0);
+ const vector<deFloat16> float16DataVec2 = squarizeVector(float16Data, 1);
+ const vector<deFloat16> float16OutDummy (float16Data1.size(), 0);
+ const vector<deFloat16> float16OutVecDummy (float16DataVec1.size(), 0);
+
+ struct TestOp
+ {
+ const char* opCode;
+ VerifyIOFunc verifyFunc;
+ const deUint32 argCount;
+ };
+
+ const TestOp testOps[] =
+ {
+ { "OpIsNan" , compareFP16Logical<fp16isNan, true, false> , 1 },
+ { "OpIsInf" , compareFP16Logical<fp16isInf, true, false> , 1 },
+ { "OpFOrdEqual" , compareFP16Logical<fp16isEqual, false, true> , 2 },
+ { "OpFUnordEqual" , compareFP16Logical<fp16isEqual, false, false> , 2 },
+ { "OpFOrdNotEqual" , compareFP16Logical<fp16isUnequal, false, true> , 2 },
+ { "OpFUnordNotEqual" , compareFP16Logical<fp16isUnequal, false, false> , 2 },
+ { "OpFOrdLessThan" , compareFP16Logical<fp16isLess, false, true> , 2 },
+ { "OpFUnordLessThan" , compareFP16Logical<fp16isLess, false, false> , 2 },
+ { "OpFOrdGreaterThan" , compareFP16Logical<fp16isGreater, false, true> , 2 },
+ { "OpFUnordGreaterThan" , compareFP16Logical<fp16isGreater, false, false> , 2 },
+ { "OpFOrdLessThanEqual" , compareFP16Logical<fp16isLessOrEqual, false, true> , 2 },
+ { "OpFUnordLessThanEqual" , compareFP16Logical<fp16isLessOrEqual, false, false> , 2 },
+ { "OpFOrdGreaterThanEqual" , compareFP16Logical<fp16isGreaterOrEqual, false, true> , 2 },
+ { "OpFUnordGreaterThanEqual" , compareFP16Logical<fp16isGreaterOrEqual, false, false> , 2 },
+ };
+
+ { // scalar cases
+ const StringTemplate preMain
+ (
+ "%c_i32_ndp = OpConstant %i32 ${num_data_points}\n"
+ " %f16 = OpTypeFloat 16\n"
+ " %c_f16_0 = OpConstant %f16 0.0\n"
+ " %c_f16_1 = OpConstant %f16 1.0\n"
+ " %up_f16 = OpTypePointer Uniform %f16\n"
+ " %ra_f16 = OpTypeArray %f16 %c_i32_ndp\n"
+ " %SSBO16 = OpTypeStruct %ra_f16\n"
+ "%up_SSBO16 = OpTypePointer Uniform %SSBO16\n"
+ "%ssbo_src0 = OpVariable %up_SSBO16 Uniform\n"
+ "%ssbo_src1 = OpVariable %up_SSBO16 Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO16 Uniform\n"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %ra_f16 ArrayStride 2\n"
+ "OpMemberDecorate %SSBO16 0 Offset 0\n"
+ "OpDecorate %SSBO16 BufferBlock\n"
+ "OpDecorate %ssbo_src0 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src0 Binding 0\n"
+ "OpDecorate %ssbo_src1 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src1 Binding 1\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 2\n"
+ );
+
+ const StringTemplate testFun
+ (
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+
+ " %entry = OpLabel\n"
+ " %i = OpVariable %fp_i32 Function\n"
+ " OpStore %i %c_i32_0\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %i_cmp = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %i_cmp %c_i32_ndp\n"
+ " OpLoopMerge %merge %next None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %ndx = OpLoad %i32 %i\n"
+
+ " %src0 = OpAccessChain %up_f16 %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %f16 %src0\n"
+
+ "${op_arg1_calc}"
+
+ " %val_bdst = ${op_code} %bool %val_src0 ${op_arg1}\n"
+ " %val_dst = OpSelect %f16 %val_bdst %c_f16_1 %c_f16_0\n"
+ " %dst = OpAccessChain %up_f16 %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n"
+ " OpBranch %next\n"
+
+ " %next = OpLabel\n"
+ " %i_cur = OpLoad %i32 %i\n"
+ " %i_new = OpIAdd %i32 %i_cur %c_i32_1\n"
+ " OpStore %i %i_new\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
+ " OpReturnValue %param\n"
+
+ " OpFunctionEnd\n"
+ );
+
+ const StringTemplate arg1Calc
+ (
+ " %src1 = OpAccessChain %up_f16 %ssbo_src1 %c_i32_0 %ndx\n"
+ " %val_src1 = OpLoad %f16 %src1\n"
+ );
+
+ for (deUint32 testOpsIdx = 0; testOpsIdx < DE_LENGTH_OF_ARRAY(testOps); ++testOpsIdx)
+ {
+ const size_t iterations = float16Data1.size();
+ const TestOp& testOp = testOps[testOpsIdx];
+ const string testName = de::toLower(string(testOp.opCode)) + "_scalar";
+ SpecResource specResource;
+ map<string, string> specs;
+ VulkanFeatures features;
+ map<string, string> fragments;
+ vector<string> extensions;
+
+ specs["cap"] = "StorageUniformBufferBlock16";
+ specs["num_data_points"] = de::toString(iterations);
+ specs["op_code"] = testOp.opCode;
+ specs["op_arg1"] = (testOp.argCount == 1) ? "" : "%val_src1";
+ specs["op_arg1_calc"] = (testOp.argCount == 1) ? "" : arg1Calc.specialize(specs);
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = capabilities.specialize(specs);
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(float16Data1)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(float16Data2)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(float16OutDummy)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = testOp.verifyFunc;
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+
+ finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
+ }
+ }
+ { // vector cases
+ const StringTemplate preMain
+ (
+ " %c_i32_ndp = OpConstant %i32 ${num_data_points}\n"
+ " %v2bool = OpTypeVector %bool 2\n"
+ " %f16 = OpTypeFloat 16\n"
+ " %c_f16_0 = OpConstant %f16 0.0\n"
+ " %c_f16_1 = OpConstant %f16 1.0\n"
+ " %v2f16 = OpTypeVector %f16 2\n"
+ "%c_v2f16_0_0 = OpConstantComposite %v2f16 %c_f16_0 %c_f16_0\n"
+ "%c_v2f16_1_1 = OpConstantComposite %v2f16 %c_f16_1 %c_f16_1\n"
+ " %up_v2f16 = OpTypePointer Uniform %v2f16\n"
+ " %ra_v2f16 = OpTypeArray %v2f16 %c_i32_ndp\n"
+ " %SSBO16 = OpTypeStruct %ra_v2f16\n"
+ " %up_SSBO16 = OpTypePointer Uniform %SSBO16\n"
+ " %ssbo_src0 = OpVariable %up_SSBO16 Uniform\n"
+ " %ssbo_src1 = OpVariable %up_SSBO16 Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO16 Uniform\n"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %ra_v2f16 ArrayStride 4\n"
+ "OpMemberDecorate %SSBO16 0 Offset 0\n"
+ "OpDecorate %SSBO16 BufferBlock\n"
+ "OpDecorate %ssbo_src0 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src0 Binding 0\n"
+ "OpDecorate %ssbo_src1 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src1 Binding 1\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 2\n"
+ );
+
+ const StringTemplate testFun
+ (
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+
+ " %entry = OpLabel\n"
+ " %i = OpVariable %fp_i32 Function\n"
+ " OpStore %i %c_i32_0\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %i_cmp = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %i_cmp %c_i32_ndp\n"
+ " OpLoopMerge %merge %next None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %ndx = OpLoad %i32 %i\n"
+
+ " %src0 = OpAccessChain %up_v2f16 %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %v2f16 %src0\n"
+
+ "${op_arg1_calc}"
+
+ " %val_bdst = ${op_code} %v2bool %val_src0 ${op_arg1}\n"
+ " %val_dst = OpSelect %v2f16 %val_bdst %c_v2f16_1_1 %c_v2f16_0_0\n"
+ " %dst = OpAccessChain %up_v2f16 %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n"
+ " OpBranch %next\n"
+
+ " %next = OpLabel\n"
+ " %i_cur = OpLoad %i32 %i\n"
+ " %i_new = OpIAdd %i32 %i_cur %c_i32_1\n"
+ " OpStore %i %i_new\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
+ " OpReturnValue %param\n"
+
+ " OpFunctionEnd\n"
+ );
+
+ const StringTemplate arg1Calc
+ (
+ " %src1 = OpAccessChain %up_v2f16 %ssbo_src1 %c_i32_0 %ndx\n"
+ " %val_src1 = OpLoad %v2f16 %src1\n"
+ );
+
+ for (deUint32 testOpsIdx = 0; testOpsIdx < DE_LENGTH_OF_ARRAY(testOps); ++testOpsIdx)
+ {
+ const deUint32 itemsPerVec = 2;
+ const size_t iterations = float16DataVec1.size() / itemsPerVec;
+ const TestOp& testOp = testOps[testOpsIdx];
+ const string testName = de::toLower(string(testOp.opCode)) + "_vector";
+ SpecResource specResource;
+ map<string, string> specs;
+ vector<string> extensions;
+ VulkanFeatures features;
+ map<string, string> fragments;
+
+ specs["cap"] = "StorageUniformBufferBlock16";
+ specs["num_data_points"] = de::toString(iterations);
+ specs["op_code"] = testOp.opCode;
+ specs["op_arg1"] = (testOp.argCount == 1) ? "" : "%val_src1";
+ specs["op_arg1_calc"] = (testOp.argCount == 1) ? "" : arg1Calc.specialize(specs);
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = capabilities.specialize(specs);
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(float16DataVec1)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(float16DataVec2)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(float16OutVecDummy)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = testOp.verifyFunc;
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+
+ finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
+ }
+ }
+
+ return testGroup.release();
+}
+
+bool compareFP16FunctionSetFunc (const std::vector<Resource>& inputs, const vector<AllocationSp>& outputAllocs, const std::vector<Resource>&, TestLog& log)
+{
+ if (inputs.size() != 1 || outputAllocs.size() != 1)
+ return false;
+
+ vector<deUint8> input1Bytes;
+
+ inputs[0].getBytes(input1Bytes);
+
+ const deUint16* const input1AsFP16 = (const deUint16*)&input1Bytes[0];
+ const deUint16* const outputAsFP16 = (const deUint16*)outputAllocs[0]->getHostPtr();
+ std::string error;
+
+ for (size_t idx = 0; idx < input1Bytes.size() / sizeof(deUint16); ++idx)
+ {
+ if (!compare16BitFloat(input1AsFP16[idx], outputAsFP16[idx], error))
+ {
+ log << TestLog::Message << error << TestLog::EndMessage;
+
+ return false;
+ }
+ }
+
+ return true;
+}
+
+template<class SpecResource>
+tcu::TestCaseGroup* createFloat16FuncSet (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "function", "Float 16 function call related tests"));
+
+ de::Random rnd (deStringHash(testGroup->getName()));
+ const StringTemplate capabilities ("OpCapability ${cap}\n");
+ const deUint32 numDataPoints = 256;
+ const vector<deFloat16> float16InputData = getFloat16s(rnd, numDataPoints);
+ const vector<deFloat16> float16OutputDummy (float16InputData.size(), 0);
+ map<string, string> fragments;
+
+ struct TestType
+ {
+ const deUint32 typeComponents;
+ const char* typeName;
+ const char* typeDecls;
+ };
+
+ const TestType testTypes[] =
+ {
+ {
+ 1,
+ "f16",
+ ""
+ },
+ {
+ 2,
+ "v2f16",
+ " %v2f16 = OpTypeVector %f16 2\n"
+ " %c_v2f16_0 = OpConstantComposite %v2f16 %c_f16_0 %c_f16_0\n"
+ },
+ {
+ 4,
+ "v4f16",
+ " %v4f16 = OpTypeVector %f16 4\n"
+ " %c_v4f16_0 = OpConstantComposite %v4f16 %c_f16_0 %c_f16_0 %c_f16_0 %c_f16_0\n"
+ },
+ };
+
+ const StringTemplate preMain
+ (
+ " %c_i32_ndp = OpConstant %i32 ${num_data_points}\n"
+ " %v2bool = OpTypeVector %bool 2\n"
+ " %f16 = OpTypeFloat 16\n"
+ " %c_f16_0 = OpConstant %f16 0.0\n"
+
+ "${type_decls}"
+
+ " %${tt}_fun = OpTypeFunction %${tt} %${tt}\n"
+ " %up_${tt} = OpTypePointer Uniform %${tt}\n"
+ " %ra_${tt} = OpTypeArray %${tt} %c_i32_ndp\n"
+ " %SSBO16 = OpTypeStruct %ra_${tt}\n"
+ " %up_SSBO16 = OpTypePointer Uniform %SSBO16\n"
+ " %ssbo_src = OpVariable %up_SSBO16 Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO16 Uniform\n"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %ra_${tt} ArrayStride ${tt_stride}\n"
+ "OpMemberDecorate %SSBO16 0 Offset 0\n"
+ "OpDecorate %SSBO16 BufferBlock\n"
+ "OpDecorate %ssbo_src DescriptorSet 0\n"
+ "OpDecorate %ssbo_src Binding 0\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 1\n"
+ );
+
+ const StringTemplate testFun
+ (
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+ " %entry = OpLabel\n"
+
+ " %i = OpVariable %fp_i32 Function\n"
+ " OpStore %i %c_i32_0\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %i_cmp = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %i_cmp %c_i32_ndp\n"
+ " OpLoopMerge %merge %next None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %ndx = OpLoad %i32 %i\n"
+
+ " %src = OpAccessChain %up_${tt} %ssbo_src %c_i32_0 %ndx\n"
+ " %val_src = OpLoad %${tt} %src\n"
+
+ " %val_dst = OpFunctionCall %${tt} %pass_fun %val_src\n"
+ " %dst = OpAccessChain %up_${tt} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n"
+ " OpBranch %next\n"
+
+ " %next = OpLabel\n"
+ " %i_cur = OpLoad %i32 %i\n"
+ " %i_new = OpIAdd %i32 %i_cur %c_i32_1\n"
+ " OpStore %i %i_new\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
+ " OpReturnValue %param\n"
+
+ " OpFunctionEnd\n"
+
+ " %pass_fun = OpFunction %${tt} None %${tt}_fun\n"
+ " %param0 = OpFunctionParameter %${tt}\n"
+ " %entry_pf = OpLabel\n"
+ " %res0 = OpFAdd %${tt} %param0 %c_${tt}_0\n"
+ " OpReturnValue %res0\n"
+ " OpFunctionEnd\n"
+ );
+
+ for (deUint32 testTypeIdx = 0; testTypeIdx < DE_LENGTH_OF_ARRAY(testTypes); ++testTypeIdx)
+ {
+ const TestType& testType = testTypes[testTypeIdx];
+ const string testName = testType.typeName;
+ const deUint32 itemsPerType = testType.typeComponents;
+ const size_t iterations = float16InputData.size() / itemsPerType;
+ const size_t typeStride = itemsPerType * sizeof(deFloat16);
+ SpecResource specResource;
+ map<string, string> specs;
+ VulkanFeatures features;
+ vector<string> extensions;
+
+ specs["cap"] = "StorageUniformBufferBlock16";
+ specs["num_data_points"] = de::toString(iterations);
+ specs["tt"] = testType.typeName;
+ specs["tt_stride"] = de::toString(typeStride);
+ specs["type_decls"] = testType.typeDecls;
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = capabilities.specialize(specs);
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(float16InputData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(float16OutputDummy)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = compareFP16FunctionSetFunc;
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+
+ finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
+ }
+
+ return testGroup.release();
+}
+
+struct getV_ { deUint32 inline operator()(deUint32 v) const { return v; } getV_(){} };
+struct getV0 { deUint32 inline operator()(deUint32 v) const { return v & (~1); } getV0(){} };
+struct getV1 { deUint32 inline operator()(deUint32 v) const { return v | ( 1); } getV1(){} };
+
+template<deUint32 R, deUint32 N>
+inline static deUint32 getOffset(deUint32 x, deUint32 y, deUint32 n)
+{
+ return N * ((R * y) + x) + n;
+}
+
+template<deUint32 R, deUint32 N, class X0, class X1, class Y0, class Y1>
+struct getFDelta
+{
+ float operator() (const deFloat16* data, deUint32 x, deUint32 y, deUint32 n, deUint32 flavor) const
+ {
+ DE_STATIC_ASSERT(R%2 == 0);
+ DE_ASSERT(flavor == 0);
+ DE_UNREF(flavor);
+
+ const X0 x0;
+ const X1 x1;
+ const Y0 y0;
+ const Y1 y1;
+ const deFloat16 v0 = data[getOffset<R, N>(x0(x), y0(y), n)];
+ const deFloat16 v1 = data[getOffset<R, N>(x1(x), y1(y), n)];
+ const tcu::Float16 f0 = tcu::Float16(v0);
+ const tcu::Float16 f1 = tcu::Float16(v1);
+ const float d0 = f0.asFloat();
+ const float d1 = f1.asFloat();
+ const float d = d1 - d0;
+
+ return d;
+ }
+
+ getFDelta(){}
+};
+
+template<deUint32 F, class Class0, class Class1>
+struct getFOneOf
+{
+ float operator() (const deFloat16* data, deUint32 x, deUint32 y, deUint32 n, deUint32 flavor) const
+ {
+ DE_ASSERT(flavor < F);
+
+ if (flavor == 0)
+ {
+ Class0 c;
+
+ return c(data, x, y, n, flavor);
+ }
+ else
+ {
+ Class1 c;
+
+ return c(data, x, y, n, flavor - 1);
+ }
+ }
+
+ getFOneOf(){}
+};
+
+template<class FineX0, class FineX1, class FineY0, class FineY1>
+struct calcWidthOf4
+{
+ float operator() (const deFloat16* data, deUint32 x, deUint32 y, deUint32 n, deUint32 flavor) const
+ {
+ DE_ASSERT(flavor < 4);
+
+ const deUint32 flavorX = (flavor & 1) == 0 ? 0 : 1;
+ const deUint32 flavorY = (flavor & 2) == 0 ? 0 : 1;
+ const getFOneOf<2, FineX0, FineX1> cx;
+ const getFOneOf<2, FineY0, FineY1> cy;
+ float v = 0;
+
+ v += fabsf(cx(data, x, y, n, flavorX));
+ v += fabsf(cy(data, x, y, n, flavorY));
+
+ return v;
+ }
+
+ calcWidthOf4(){}
+};
+
+template<deUint32 R, deUint32 N, class Derivative>
+bool compareDerivativeWithFlavor (const deFloat16* inputAsFP16, const deFloat16* outputAsFP16, deUint32 flavor, std::string& error)
+{
+ const deUint32 numDataPointsByAxis = R;
+ const Derivative derivativeFunc;
+
+ for (deUint32 y = 0; y < numDataPointsByAxis; ++y)
+ for (deUint32 x = 0; x < numDataPointsByAxis; ++x)
+ for (deUint32 n = 0; n < N; ++n)
+ {
+ const deFloat16 expected = tcu::Float16(derivativeFunc(inputAsFP16, x, y, n, flavor)).bits();
+ const deFloat16 output = outputAsFP16[getOffset<R, N>(x, y, n)];
+
+ if (!compare16BitFloat(expected, output, error))
+ {
+ error = "subcase at " + de::toString(x) + "," + de::toString(y) + "," + de::toString(n) + ": " + error;
+
+ return false;
+ }
+ }
+
+ return true;
+}
+
+template<deUint32 R, deUint32 N, deUint32 FLAVOUR_COUNT, class Derivative>
+bool compareDerivative (const std::vector<Resource>& inputs, const vector<AllocationSp>& outputAllocs, const std::vector<Resource>&, TestLog& log)
+{
+ if (inputs.size() != 1 || outputAllocs.size() != 1)
+ return false;
+
+ deUint32 successfulRuns = FLAVOUR_COUNT;
+ std::string results[FLAVOUR_COUNT];
+ vector<deUint8> inputBytes;
+
+ inputs[0].getBytes(inputBytes);
+
+ const deFloat16* inputAsFP16 = reinterpret_cast<deFloat16* const>(&inputBytes.front());
+ const deFloat16* outputAsFP16 = static_cast<deFloat16*>(outputAllocs[0]->getHostPtr());
+
+ DE_ASSERT(inputBytes.size() == R * R * N * sizeof(deFloat16));
+
+ for (deUint32 flavor = 0; flavor < FLAVOUR_COUNT; ++flavor)
+ if (compareDerivativeWithFlavor<R, N, Derivative> (inputAsFP16, outputAsFP16, flavor, results[flavor]))
+ {
+ break;
+ }
+ else
+ {
+ successfulRuns--;
+ }
+
+ if (successfulRuns == 0)
+ for (deUint32 flavor = 0; flavor < FLAVOUR_COUNT; flavor++)
+ log << TestLog::Message << "At flavor #" << flavor << " " << results[flavor] << TestLog::EndMessage;
+
+ return successfulRuns > 0;
+}
+
+template<deUint32 R, deUint32 N>
+tcu::TestCaseGroup* createDerivativeTests (tcu::TestContext& testCtx)
+{
+ typedef getFDelta<R, N, getV0, getV1, getV_, getV_> getFDxFine;
+ typedef getFDelta<R, N, getV_, getV_, getV0, getV1> getFDyFine;
+
+ typedef getFDelta<R, N, getV0, getV1, getV0, getV0> getFdxCoarse0;
+ typedef getFDelta<R, N, getV0, getV1, getV1, getV1> getFdxCoarse1;
+ typedef getFDelta<R, N, getV0, getV0, getV0, getV1> getFdyCoarse0;
+ typedef getFDelta<R, N, getV1, getV1, getV0, getV1> getFdyCoarse1;
+ typedef getFOneOf<2, getFdxCoarse0, getFdxCoarse1> getFDxCoarse;
+ typedef getFOneOf<2, getFdyCoarse0, getFdyCoarse1> getFDyCoarse;
+
+ typedef calcWidthOf4<getFDxFine, getFDxFine, getFDyFine, getFDyFine> getFWidthFine;
+ typedef calcWidthOf4<getFdxCoarse0, getFdxCoarse1, getFdyCoarse0, getFdyCoarse1> getFWidthCoarse;
+
+ typedef getFOneOf<3, getFDxFine, getFDxCoarse> getFDx;
+ typedef getFOneOf<3, getFDyFine, getFDyCoarse> getFDy;
+ typedef getFOneOf<5, getFWidthFine, getFWidthCoarse> getFWidth;
+
+ const std::string testGroupName (std::string("derivative_") + de::toString(N));
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, testGroupName.c_str(), "Derivative instruction tests"));
+
+ de::Random rnd (deStringHash(testGroup->getName()));
+ const deUint32 numDataPointsByAxis = R;
+ const deUint32 numDataPoints = N * numDataPointsByAxis * numDataPointsByAxis;
+ vector<deFloat16> float16InputX;
+ vector<deFloat16> float16InputY;
+ vector<deFloat16> float16InputW;
+ vector<deFloat16> float16OutputDummy (numDataPoints, 0);
+ RGBA defaultColors[4];
+
+ getDefaultColors(defaultColors);
+
+ float16InputX.reserve(numDataPoints);
+ for (deUint32 y = 0; y < numDataPointsByAxis; ++y)
+ for (deUint32 x = 0; x < numDataPointsByAxis; ++x)
+ for (deUint32 n = 0; n < N; ++n)
+ {
+ const float arg = static_cast<float>(2 * DE_PI) * static_cast<float>(x * (n + 1)) / static_cast<float>(1 * numDataPointsByAxis);
+
+ if (y%2 == 0)
+ float16InputX.push_back(tcu::Float16(sin(arg)).bits());
+ else
+ float16InputX.push_back(tcu::Float16(cos(arg)).bits());
+ }
+
+ float16InputY.reserve(numDataPoints);
+ for (deUint32 y = 0; y < numDataPointsByAxis; ++y)
+ for (deUint32 x = 0; x < numDataPointsByAxis; ++x)
+ for (deUint32 n = 0; n < N; ++n)
+ {
+ const float arg = static_cast<float>(2 * DE_PI) * static_cast<float>(y * (n + 1)) / static_cast<float>(1 * numDataPointsByAxis);
+
+ if (x%2 == 0)
+ float16InputY.push_back(tcu::Float16(sin(arg)).bits());
+ else
+ float16InputY.push_back(tcu::Float16(cos(arg)).bits());
+ }
+
+ const deFloat16 testNumbers[] =
+ {
+ tcu::Float16( 2.0 ).bits(),
+ tcu::Float16( 4.0 ).bits(),
+ tcu::Float16( 8.0 ).bits(),
+ tcu::Float16( 16.0 ).bits(),
+ tcu::Float16( 32.0 ).bits(),
+ tcu::Float16( 64.0 ).bits(),
+ tcu::Float16( 128.0).bits(),
+ tcu::Float16( 256.0).bits(),
+ tcu::Float16( 512.0).bits(),
+ tcu::Float16(-2.0 ).bits(),
+ tcu::Float16(-4.0 ).bits(),
+ tcu::Float16(-8.0 ).bits(),
+ tcu::Float16(-16.0 ).bits(),
+ tcu::Float16(-32.0 ).bits(),
+ tcu::Float16(-64.0 ).bits(),
+ tcu::Float16(-128.0).bits(),
+ tcu::Float16(-256.0).bits(),
+ tcu::Float16(-512.0).bits(),
+ };
+
+ float16InputW.reserve(numDataPoints);
+ for (deUint32 y = 0; y < numDataPointsByAxis; ++y)
+ for (deUint32 x = 0; x < numDataPointsByAxis; ++x)
+ for (deUint32 n = 0; n < N; ++n)
+ float16InputW.push_back(testNumbers[rnd.getInt(0, DE_LENGTH_OF_ARRAY(testNumbers) - 1)]);
+
+ struct TestOp
+ {
+ const char* opCode;
+ vector<deFloat16>& inputData;
+ VerifyIOFunc verifyFunc;
+ };
+
+ const TestOp testOps[] =
+ {
+ { "OpDPdxFine" , float16InputX , compareDerivative<R, N, 1, getFDxFine > },
+ { "OpDPdyFine" , float16InputY , compareDerivative<R, N, 1, getFDyFine > },
+ { "OpFwidthFine" , float16InputW , compareDerivative<R, N, 1, getFWidthFine > },
+ { "OpDPdxCoarse" , float16InputX , compareDerivative<R, N, 2, getFDxCoarse > },
+ { "OpDPdyCoarse" , float16InputY , compareDerivative<R, N, 2, getFDyCoarse > },
+ { "OpFwidthCoarse" , float16InputW , compareDerivative<R, N, 4, getFWidthCoarse > },
+ { "OpDPdx" , float16InputX , compareDerivative<R, N, 3, getFDx > },
+ { "OpDPdy" , float16InputY , compareDerivative<R, N, 3, getFDy > },
+ { "OpFwidth" , float16InputW , compareDerivative<R, N, 5, getFWidth > },
+ };
+
+ struct TestType
+ {
+ const deUint32 typeComponents;
+ const char* typeName;
+ const char* typeDecls;
+ };
+
+ const TestType testTypes[] =
+ {
+ {
+ 1,
+ "f16",
+ ""
+ },
+ {
+ 2,
+ "v2f16",
+ " %v2f16 = OpTypeVector %f16 2\n"
+ },
+ {
+ 4,
+ "v4f16",
+ " %v4f16 = OpTypeVector %f16 4\n"
+ },
+ };
+
+ const deUint32 testTypeNdx = (N == 1) ? 0
+ : (N == 2) ? 1
+ : (N == 4) ? 2
+ : DE_LENGTH_OF_ARRAY(testTypes);
+ const TestType& testType = testTypes[testTypeNdx];
+
+ DE_ASSERT(testTypeNdx < DE_LENGTH_OF_ARRAY(testTypes));
+ DE_ASSERT(testType.typeComponents == N);
+
+ const StringTemplate preMain
+ (
+ "%c_i32_ndp = OpConstant %i32 ${num_data_points}\n"
+ " %c_u32_xw = OpConstant %u32 ${items_by_x}\n"
+ " %f16 = OpTypeFloat 16\n"
+ "${type_decls}"
+ " %up_${tt} = OpTypePointer Uniform %${tt}\n"
+ " %ra_${tt} = OpTypeArray %${tt} %c_i32_ndp\n"
+ " %SSBO16 = OpTypeStruct %ra_${tt}\n"
+ "%up_SSBO16 = OpTypePointer Uniform %SSBO16\n"
+ " %ssbo_src = OpVariable %up_SSBO16 Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO16 Uniform\n"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %ra_${tt} ArrayStride ${tt_stride}\n"
+ "OpMemberDecorate %SSBO16 0 Offset 0\n"
+ "OpDecorate %SSBO16 BufferBlock\n"
+ "OpDecorate %ssbo_src DescriptorSet 0\n"
+ "OpDecorate %ssbo_src Binding 0\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 1\n"
+ );
+
+ const StringTemplate testFun
+ (
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+ " %entry = OpLabel\n"
+
+ " %loc_x_c = OpAccessChain %ip_f32 %BP_gl_FragCoord %c_i32_0\n"
+ " %loc_y_c = OpAccessChain %ip_f32 %BP_gl_FragCoord %c_i32_1\n"
+ " %x_c = OpLoad %f32 %loc_x_c\n"
+ " %y_c = OpLoad %f32 %loc_y_c\n"
+ " %x_idx = OpConvertFToU %u32 %x_c\n"
+ " %y_idx = OpConvertFToU %u32 %y_c\n"
+ " %ndx_y = OpIMul %u32 %y_idx %c_u32_xw\n"
+ " %ndx = OpIAdd %u32 %ndx_y %x_idx\n"
+
+ " %src = OpAccessChain %up_${tt} %ssbo_src %c_i32_0 %ndx\n"
+ " %val_src = OpLoad %${tt} %src\n"
+ " %val_dst = ${op_code} %${tt} %val_src\n"
+ " %dst = OpAccessChain %up_${tt} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n"
+ " OpBranch %merge\n"
+
+ " %merge = OpLabel\n"
+ " OpReturnValue %param\n"
+
+ " OpFunctionEnd\n"
+ );
+
+ for (deUint32 testOpsIdx = 0; testOpsIdx < DE_LENGTH_OF_ARRAY(testOps); ++testOpsIdx)
+ {
+ const TestOp& testOp = testOps[testOpsIdx];
+ const string testName = de::toLower(string(testOp.opCode));
+ const size_t typeStride = N * sizeof(deFloat16);
+ GraphicsResources specResource;
+ map<string, string> specs;
+ VulkanFeatures features;
+ vector<string> extensions;
+ map<string, string> fragments;
+ SpecConstants noSpecConstants;
+ PushConstants noPushConstants;
+ GraphicsInterfaces noInterfaces;
+ vector<string> noFeatures;
+
+ specs["op_code"] = testOp.opCode;
+ specs["num_data_points"] = de::toString(testOp.inputData.size() / N);
+ specs["items_by_x"] = de::toString(numDataPointsByAxis);
+ specs["tt"] = testType.typeName;
+ specs["tt_stride"] = de::toString(typeStride);
+ specs["type_decls"] = testType.typeDecls;
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = "OpCapability DerivativeControl\nOpCapability StorageUniformBufferBlock16\n";
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(testOp.inputData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(float16OutputDummy)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = testOp.verifyFunc;
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+
+ createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, testName.c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+ noPushConstants, specResource, noInterfaces, extensions, noFeatures, features, testGroup.get(), QP_TEST_RESULT_FAIL, string(), true);
+ }
+
+ return testGroup.release();
+}
+
+bool compareFP16VectorExtractFunc (const std::vector<Resource>& inputs, const vector<AllocationSp>& outputAllocs, const std::vector<Resource>&, TestLog& log)
+{
+ if (inputs.size() != 2 || outputAllocs.size() != 1)
+ return false;
+
+ vector<deUint8> input1Bytes;
+ vector<deUint8> input2Bytes;
+
+ inputs[0].getBytes(input1Bytes);
+ inputs[1].getBytes(input2Bytes);
+
+ DE_ASSERT(input1Bytes.size() > 0);
+ DE_ASSERT(input2Bytes.size() > 0);
+ DE_ASSERT(input2Bytes.size() % sizeof(deUint32) == 0);
+
+ const size_t iterations = input2Bytes.size() / sizeof(deUint32);
+ const size_t components = input1Bytes.size() / (sizeof(deFloat16) * iterations);
+ const deFloat16* const input1AsFP16 = (const deFloat16*)&input1Bytes[0];
+ const deUint32* const inputIndices = (const deUint32*)&input2Bytes[0];
+ const deFloat16* const outputAsFP16 = (const deFloat16*)outputAllocs[0]->getHostPtr();
+ std::string error;
+
+ DE_ASSERT(components == 2 || components == 4);
+ DE_ASSERT(input1Bytes.size() == iterations * components * sizeof(deFloat16));
+
+ for (size_t idx = 0; idx < iterations; ++idx)
+ {
+ const deUint32 componentNdx = inputIndices[idx];
+
+ DE_ASSERT(componentNdx < components);
+
+ const deFloat16 expected = input1AsFP16[components * idx + componentNdx];
+
+ if (!compare16BitFloat(expected, outputAsFP16[idx], error))
+ {
+ log << TestLog::Message << "At " << idx << error << TestLog::EndMessage;
+
+ return false;
+ }
+ }
+
+ return true;
+}
+
+template<class SpecResource>
+tcu::TestCaseGroup* createFloat16VectorExtractSet (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "opvectorextractdynamic", "OpVectorExtractDynamic tests"));
+
+ de::Random rnd (deStringHash(testGroup->getName()));
+ const deUint32 numDataPoints = 256;
+ const vector<deFloat16> float16InputData = getFloat16s(rnd, numDataPoints);
+ const vector<deFloat16> float16OutputDummy (float16InputData.size(), 0);
+
+ struct TestType
+ {
+ const deUint32 typeComponents;
+ const size_t typeStride;
+ const char* typeName;
+ const char* typeDecls;
+ };
+
+ const TestType testTypes[] =
+ {
+ {
+ 2,
+ 2 * sizeof(deFloat16),
+ "v2f16",
+ " %v2f16 = OpTypeVector %f16 2\n"
+ },
+ {
+ 3,
+ 4 * sizeof(deFloat16),
+ "v3f16",
+ " %v3f16 = OpTypeVector %f16 3\n"
+ },
+ {
+ 4,
+ 4 * sizeof(deFloat16),
+ "v4f16",
+ " %v4f16 = OpTypeVector %f16 4\n"
+ },
+ };
+
+ const StringTemplate preMain
+ (
+ " %c_i32_ndp = OpConstant %i32 ${num_data_points}\n"
+ " %f16 = OpTypeFloat 16\n"
+
+ "${type_decl}"
+
+ " %up_${tt} = OpTypePointer Uniform %${tt}\n"
+ " %ra_${tt} = OpTypeArray %${tt} %c_i32_ndp\n"
+ " %SSBO_SRC = OpTypeStruct %ra_${tt}\n"
+ "%up_SSBO_SRC = OpTypePointer Uniform %SSBO_SRC\n"
+
+ " %up_u32 = OpTypePointer Uniform %u32\n"
+ " %ra_u32 = OpTypeArray %u32 %c_i32_ndp\n"
+ " %SSBO_IDX = OpTypeStruct %ra_u32\n"
+ "%up_SSBO_IDX = OpTypePointer Uniform %SSBO_IDX\n"
+
+ " %up_f16 = OpTypePointer Uniform %f16\n"
+ " %ra_f16 = OpTypeArray %f16 %c_i32_ndp\n"
+ " %SSBO_DST = OpTypeStruct %ra_f16\n"
+ "%up_SSBO_DST = OpTypePointer Uniform %SSBO_DST\n"
+
+ " %ssbo_src = OpVariable %up_SSBO_SRC Uniform\n"
+ " %ssbo_idx = OpVariable %up_SSBO_IDX Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO_DST Uniform\n"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %ra_${tt} ArrayStride ${tt_stride}\n"
+ "OpMemberDecorate %SSBO_SRC 0 Offset 0\n"
+ "OpDecorate %SSBO_SRC BufferBlock\n"
+ "OpDecorate %ssbo_src DescriptorSet 0\n"
+ "OpDecorate %ssbo_src Binding 0\n"
+
+ "OpDecorate %ra_u32 ArrayStride 4\n"
+ "OpMemberDecorate %SSBO_IDX 0 Offset 0\n"
+ "OpDecorate %SSBO_IDX BufferBlock\n"
+ "OpDecorate %ssbo_idx DescriptorSet 0\n"
+ "OpDecorate %ssbo_idx Binding 1\n"
+
+ "OpDecorate %ra_f16 ArrayStride 2\n"
+ "OpMemberDecorate %SSBO_DST 0 Offset 0\n"
+ "OpDecorate %SSBO_DST BufferBlock\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 2\n"
+ );
+
+ const StringTemplate testFun
+ (
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+ " %entry = OpLabel\n"
+
+ " %i = OpVariable %fp_i32 Function\n"
+ " OpStore %i %c_i32_0\n"
+
+ " %will_run = OpFunctionCall %bool %isUniqueIdZero\n"
+ " OpSelectionMerge %end_if None\n"
+ " OpBranchConditional %will_run %run_test %end_if\n"
+
+ " %run_test = OpLabel\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %i_cmp = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %i_cmp %c_i32_ndp\n"
+ " OpLoopMerge %merge %next None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %ndx = OpLoad %i32 %i\n"
+
+ " %src = OpAccessChain %up_${tt} %ssbo_src %c_i32_0 %ndx\n"
+ " %val_src = OpLoad %${tt} %src\n"
+
+ " %src_idx = OpAccessChain %up_u32 %ssbo_idx %c_i32_0 %ndx\n"
+ " %val_idx = OpLoad %u32 %src_idx\n"
+
+ " %val_dst = OpVectorExtractDynamic %f16 %val_src %val_idx\n"
+ " %dst = OpAccessChain %up_f16 %ssbo_dst %c_i32_0 %ndx\n"
+
+ " OpStore %dst %val_dst\n"
+ " OpBranch %next\n"
+
+ " %next = OpLabel\n"
+ " %i_cur = OpLoad %i32 %i\n"
+ " %i_new = OpIAdd %i32 %i_cur %c_i32_1\n"
+ " OpStore %i %i_new\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
+ " OpBranch %end_if\n"
+ " %end_if = OpLabel\n"
+ " OpReturnValue %param\n"
+
+ " OpFunctionEnd\n"
+ );
+
+ for (deUint32 testTypeIdx = 0; testTypeIdx < DE_LENGTH_OF_ARRAY(testTypes); ++testTypeIdx)
+ {
+ const TestType& testType = testTypes[testTypeIdx];
+ const string testName = testType.typeName;
+ const size_t itemsPerType = testType.typeStride / sizeof(deFloat16);
+ const size_t iterations = float16InputData.size() / itemsPerType;
+ SpecResource specResource;
+ map<string, string> specs;
+ VulkanFeatures features;
+ vector<deUint32> inputDataNdx;
+ map<string, string> fragments;
+ vector<string> extensions;
+
+ for (deUint32 ndx = 0; ndx < iterations; ++ndx)
+ inputDataNdx.push_back(rnd.getUint32() % testType.typeComponents);
+
+ specs["num_data_points"] = de::toString(iterations);
+ specs["tt"] = testType.typeName;
+ specs["tt_stride"] = de::toString(testType.typeStride);
+ specs["type_decl"] = testType.typeDecls;
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = "OpCapability StorageUniformBufferBlock16\n";
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(float16InputData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.inputs.push_back(Resource(BufferSp(new Uint32Buffer(inputDataNdx)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(float16OutputDummy)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = compareFP16VectorExtractFunc;
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+
+ finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
+ }
+
+ return testGroup.release();
+}
+
+template<deUint32 COMPONENTS_COUNT, deUint32 REPLACEMENT>
+bool compareFP16VectorInsertFunc (const std::vector<Resource>& inputs, const vector<AllocationSp>& outputAllocs, const std::vector<Resource>&, TestLog& log)
+{
+ if (inputs.size() != 2 || outputAllocs.size() != 1)
+ return false;
+
+ vector<deUint8> input1Bytes;
+ vector<deUint8> input2Bytes;
+
+ inputs[0].getBytes(input1Bytes);
+ inputs[1].getBytes(input2Bytes);
+
+ DE_ASSERT(input1Bytes.size() > 0);
+ DE_ASSERT(input2Bytes.size() > 0);
+ DE_ASSERT(input2Bytes.size() % sizeof(deUint32) == 0);
+
+ const size_t iterations = input2Bytes.size() / sizeof(deUint32);
+ const size_t componentsStride = input1Bytes.size() / (sizeof(deFloat16) * iterations);
+ const deFloat16* const input1AsFP16 = (const deFloat16*)&input1Bytes[0];
+ const deUint32* const inputIndices = (const deUint32*)&input2Bytes[0];
+ const deFloat16* const outputAsFP16 = (const deFloat16*)outputAllocs[0]->getHostPtr();
+ const deFloat16 magic = tcu::Float16(float(REPLACEMENT)).bits();
+ std::string error;
+
+ DE_ASSERT(componentsStride == 2 || componentsStride == 4);
+ DE_ASSERT(input1Bytes.size() == iterations * componentsStride * sizeof(deFloat16));
+
+ for (size_t idx = 0; idx < iterations; ++idx)
+ {
+ const deFloat16* inputVec = &input1AsFP16[componentsStride * idx];
+ const deFloat16* outputVec = &outputAsFP16[componentsStride * idx];
+ const deUint32 replacedCompNdx = inputIndices[idx];
+
+ DE_ASSERT(replacedCompNdx < COMPONENTS_COUNT);
+
+ for (size_t compNdx = 0; compNdx < COMPONENTS_COUNT; ++compNdx)
+ {
+ const deFloat16 expected = (compNdx == replacedCompNdx) ? magic : inputVec[compNdx];
+
+ if (!compare16BitFloat(expected, outputVec[compNdx], error))
+ {
+ log << TestLog::Message << "At " << idx << "[" << compNdx << "]: " << error << TestLog::EndMessage;
+
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+template<class SpecResource>
+tcu::TestCaseGroup* createFloat16VectorInsertSet (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "opvectorinsertdynamic", "OpVectorInsertDynamic tests"));
+
+ de::Random rnd (deStringHash(testGroup->getName()));
+ const deUint32 replacement = 42;
+ const deUint32 numDataPoints = 256;
+ const vector<deFloat16> float16InputData = getFloat16s(rnd, numDataPoints);
+ const vector<deFloat16> float16OutputDummy (float16InputData.size(), 0);
+
+ struct TestType
+ {
+ const deUint32 typeComponents;
+ const size_t typeStride;
+ const char* typeName;
+ const char* typeDecls;
+ VerifyIOFunc verifyIOFunc;
+ };
+
+ const TestType testTypes[] =
+ {
+ {
+ 2,
+ 2 * sizeof(deFloat16),
+ "v2f16",
+ " %v2f16 = OpTypeVector %f16 2\n",
+ compareFP16VectorInsertFunc<2, replacement>
+ },
+ {
+ 3,
+ 4 * sizeof(deFloat16),
+ "v3f16",
+ " %v3f16 = OpTypeVector %f16 3\n",
+ compareFP16VectorInsertFunc<3, replacement>
+ },
+ {
+ 4,
+ 4 * sizeof(deFloat16),
+ "v4f16",
+ " %v4f16 = OpTypeVector %f16 4\n",
+ compareFP16VectorInsertFunc<4, replacement>
+ },
+ };
+
+ const StringTemplate preMain
+ (
+ " %c_i32_ndp = OpConstant %i32 ${num_data_points}\n"
+ " %f16 = OpTypeFloat 16\n"
+ " %c_f16_ins = OpConstant %f16 ${replacement}\n"
+
+ "${type_decl}"
+
+ " %up_${tt} = OpTypePointer Uniform %${tt}\n"
+ " %ra_${tt} = OpTypeArray %${tt} %c_i32_ndp\n"
+ " %SSBO_SRC = OpTypeStruct %ra_${tt}\n"
+ "%up_SSBO_SRC = OpTypePointer Uniform %SSBO_SRC\n"
+
+ " %up_u32 = OpTypePointer Uniform %u32\n"
+ " %ra_u32 = OpTypeArray %u32 %c_i32_ndp\n"
+ " %SSBO_IDX = OpTypeStruct %ra_u32\n"
+ "%up_SSBO_IDX = OpTypePointer Uniform %SSBO_IDX\n"
+
+ " %SSBO_DST = OpTypeStruct %ra_${tt}\n"
+ "%up_SSBO_DST = OpTypePointer Uniform %SSBO_DST\n"
+
+ " %ssbo_src = OpVariable %up_SSBO_SRC Uniform\n"
+ " %ssbo_idx = OpVariable %up_SSBO_IDX Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO_DST Uniform\n"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %ra_${tt} ArrayStride ${tt_stride}\n"
+ "OpMemberDecorate %SSBO_SRC 0 Offset 0\n"
+ "OpDecorate %SSBO_SRC BufferBlock\n"
+ "OpDecorate %ssbo_src DescriptorSet 0\n"
+ "OpDecorate %ssbo_src Binding 0\n"
+
+ "OpDecorate %ra_u32 ArrayStride 4\n"
+ "OpMemberDecorate %SSBO_IDX 0 Offset 0\n"
+ "OpDecorate %SSBO_IDX BufferBlock\n"
+ "OpDecorate %ssbo_idx DescriptorSet 0\n"
+ "OpDecorate %ssbo_idx Binding 1\n"
+
+ "OpMemberDecorate %SSBO_DST 0 Offset 0\n"
+ "OpDecorate %SSBO_DST BufferBlock\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 2\n"
+ );
+
+ const StringTemplate testFun
+ (
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+ " %entry = OpLabel\n"
+
+ " %i = OpVariable %fp_i32 Function\n"
+ " OpStore %i %c_i32_0\n"
+
+ " %will_run = OpFunctionCall %bool %isUniqueIdZero\n"
+ " OpSelectionMerge %end_if None\n"
+ " OpBranchConditional %will_run %run_test %end_if\n"
+
+ " %run_test = OpLabel\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %i_cmp = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %i_cmp %c_i32_ndp\n"
+ " OpLoopMerge %merge %next None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %ndx = OpLoad %i32 %i\n"
+
+ " %src = OpAccessChain %up_${tt} %ssbo_src %c_i32_0 %ndx\n"
+ " %val_src = OpLoad %${tt} %src\n"
+
+ " %src_idx = OpAccessChain %up_u32 %ssbo_idx %c_i32_0 %ndx\n"
+ " %val_idx = OpLoad %u32 %src_idx\n"
+
+ " %val_dst = OpVectorInsertDynamic %${tt} %val_src %c_f16_ins %val_idx\n"
+ " %dst = OpAccessChain %up_${tt} %ssbo_dst %c_i32_0 %ndx\n"
+
+ " OpStore %dst %val_dst\n"
+ " OpBranch %next\n"
+
+ " %next = OpLabel\n"
+ " %i_cur = OpLoad %i32 %i\n"
+ " %i_new = OpIAdd %i32 %i_cur %c_i32_1\n"
+ " OpStore %i %i_new\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
+ " OpBranch %end_if\n"
+ " %end_if = OpLabel\n"
+ " OpReturnValue %param\n"
+
+ " OpFunctionEnd\n"
+ );
+
+ for (deUint32 testTypeIdx = 0; testTypeIdx < DE_LENGTH_OF_ARRAY(testTypes); ++testTypeIdx)
+ {
+ const TestType& testType = testTypes[testTypeIdx];
+ const string testName = testType.typeName;
+ const size_t itemsPerType = testType.typeStride / sizeof(deFloat16);
+ const size_t iterations = float16InputData.size() / itemsPerType;
+ SpecResource specResource;
+ map<string, string> specs;
+ VulkanFeatures features;
+ vector<deUint32> inputDataNdx;
+ map<string, string> fragments;
+ vector<string> extensions;
+
+ for (deUint32 ndx = 0; ndx < iterations; ++ndx)
+ inputDataNdx.push_back(rnd.getUint32() % testType.typeComponents);
+
+ specs["num_data_points"] = de::toString(iterations);
+ specs["tt"] = testType.typeName;
+ specs["tt_stride"] = de::toString(testType.typeStride);
+ specs["type_decl"] = testType.typeDecls;
+ specs["replacement"] = de::toString(replacement);
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = "OpCapability StorageUniformBufferBlock16\n";
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(float16InputData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.inputs.push_back(Resource(BufferSp(new Uint32Buffer(inputDataNdx)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(float16OutputDummy)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = testType.verifyIOFunc;
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+
+ finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
+ }
+
+ return testGroup.release();
+}
+
+inline deFloat16 getShuffledComponent (const size_t iteration, const size_t componentNdx, const deFloat16* input1Vec, const deFloat16* input2Vec, size_t vec1Len, size_t vec2Len, bool& validate)
+{
+ const size_t compNdxCount = (vec1Len + vec2Len + 1);
+ const size_t compNdxLimited = iteration % (compNdxCount * compNdxCount);
+ size_t comp;
+
+ switch (componentNdx)
+ {
+ case 0: comp = compNdxLimited / compNdxCount; break;
+ case 1: comp = compNdxLimited % compNdxCount; break;
+ case 2: comp = 0; break;
+ case 3: comp = 1; break;
+ default: TCU_THROW(InternalError, "Impossible");
+ }
+
+ if (comp >= vec1Len + vec2Len)
+ {
+ validate = false;
+ return 0;
+ }
+ else
+ {
+ validate = true;
+ return (comp < vec1Len) ? input1Vec[comp] : input2Vec[comp - vec1Len];
+ }
+}
+
+template<deUint32 DST_COMPONENTS_COUNT, deUint32 SRC0_COMPONENTS_COUNT, deUint32 SRC1_COMPONENTS_COUNT>
+bool compareFP16VectorShuffleFunc (const std::vector<Resource>& inputs, const vector<AllocationSp>& outputAllocs, const std::vector<Resource>&, TestLog& log)
+{
+ DE_STATIC_ASSERT(DST_COMPONENTS_COUNT == 2 || DST_COMPONENTS_COUNT == 3 || DST_COMPONENTS_COUNT == 4);
+ DE_STATIC_ASSERT(SRC0_COMPONENTS_COUNT == 2 || SRC0_COMPONENTS_COUNT == 3 || SRC0_COMPONENTS_COUNT == 4);
+ DE_STATIC_ASSERT(SRC1_COMPONENTS_COUNT == 2 || SRC1_COMPONENTS_COUNT == 3 || SRC1_COMPONENTS_COUNT == 4);
+
+ if (inputs.size() != 2 || outputAllocs.size() != 1)
+ return false;
+
+ vector<deUint8> input1Bytes;
+ vector<deUint8> input2Bytes;
+
+ inputs[0].getBytes(input1Bytes);
+ inputs[1].getBytes(input2Bytes);
+
+ DE_ASSERT(input1Bytes.size() > 0);
+ DE_ASSERT(input2Bytes.size() > 0);
+ DE_ASSERT(input2Bytes.size() % sizeof(deFloat16) == 0);
+
+ const size_t componentsStrideDst = (DST_COMPONENTS_COUNT == 3) ? 4 : DST_COMPONENTS_COUNT;
+ const size_t componentsStrideSrc0 = (SRC0_COMPONENTS_COUNT == 3) ? 4 : SRC0_COMPONENTS_COUNT;
+ const size_t componentsStrideSrc1 = (SRC1_COMPONENTS_COUNT == 3) ? 4 : SRC1_COMPONENTS_COUNT;
+ const size_t iterations = input1Bytes.size() / (componentsStrideSrc0 * sizeof(deFloat16));
+ const deFloat16* const input1AsFP16 = (const deFloat16*)&input1Bytes[0];
+ const deFloat16* const input2AsFP16 = (const deFloat16*)&input2Bytes[0];
+ const deFloat16* const outputAsFP16 = (const deFloat16*)outputAllocs[0]->getHostPtr();
+ std::string error;
+
+ DE_ASSERT(input1Bytes.size() == iterations * componentsStrideSrc0 * sizeof(deFloat16));
+ DE_ASSERT(input2Bytes.size() == iterations * componentsStrideSrc1 * sizeof(deFloat16));
+
+ for (size_t idx = 0; idx < iterations; ++idx)
+ {
+ const deFloat16* input1Vec = &input1AsFP16[componentsStrideSrc0 * idx];
+ const deFloat16* input2Vec = &input2AsFP16[componentsStrideSrc1 * idx];
+ const deFloat16* outputVec = &outputAsFP16[componentsStrideDst * idx];
+
+ for (size_t compNdx = 0; compNdx < DST_COMPONENTS_COUNT; ++compNdx)
+ {
+ bool validate = true;
+ deFloat16 expected = getShuffledComponent(idx, compNdx, input1Vec, input2Vec, SRC0_COMPONENTS_COUNT, SRC1_COMPONENTS_COUNT, validate);
+
+ if (validate && !compare16BitFloat(expected, outputVec[compNdx], error))
+ {
+ log << TestLog::Message << "At " << idx << "[" << compNdx << "]: " << error << TestLog::EndMessage;
+
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+VerifyIOFunc getFloat16VectorShuffleVerifyIOFunc (deUint32 dstComponentsCount, deUint32 src0ComponentsCount, deUint32 src1ComponentsCount)
+{
+ DE_ASSERT(dstComponentsCount <= 4);
+ DE_ASSERT(src0ComponentsCount <= 4);
+ DE_ASSERT(src1ComponentsCount <= 4);
+ deUint32 funcCode = 100 * dstComponentsCount + 10 * src0ComponentsCount + src1ComponentsCount;
+
+ switch (funcCode)
+ {
+ case 222:return compareFP16VectorShuffleFunc<2, 2, 2>;
+ case 223:return compareFP16VectorShuffleFunc<2, 2, 3>;
+ case 224:return compareFP16VectorShuffleFunc<2, 2, 4>;
+ case 232:return compareFP16VectorShuffleFunc<2, 3, 2>;
+ case 233:return compareFP16VectorShuffleFunc<2, 3, 3>;
+ case 234:return compareFP16VectorShuffleFunc<2, 3, 4>;
+ case 242:return compareFP16VectorShuffleFunc<2, 4, 2>;
+ case 243:return compareFP16VectorShuffleFunc<2, 4, 3>;
+ case 244:return compareFP16VectorShuffleFunc<2, 4, 4>;
+ case 322:return compareFP16VectorShuffleFunc<3, 2, 2>;
+ case 323:return compareFP16VectorShuffleFunc<3, 2, 3>;
+ case 324:return compareFP16VectorShuffleFunc<3, 2, 4>;
+ case 332:return compareFP16VectorShuffleFunc<3, 3, 2>;
+ case 333:return compareFP16VectorShuffleFunc<3, 3, 3>;
+ case 334:return compareFP16VectorShuffleFunc<3, 3, 4>;
+ case 342:return compareFP16VectorShuffleFunc<3, 4, 2>;
+ case 343:return compareFP16VectorShuffleFunc<3, 4, 3>;
+ case 344:return compareFP16VectorShuffleFunc<3, 4, 4>;
+ case 422:return compareFP16VectorShuffleFunc<4, 2, 2>;
+ case 423:return compareFP16VectorShuffleFunc<4, 2, 3>;
+ case 424:return compareFP16VectorShuffleFunc<4, 2, 4>;
+ case 432:return compareFP16VectorShuffleFunc<4, 3, 2>;
+ case 433:return compareFP16VectorShuffleFunc<4, 3, 3>;
+ case 434:return compareFP16VectorShuffleFunc<4, 3, 4>;
+ case 442:return compareFP16VectorShuffleFunc<4, 4, 2>;
+ case 443:return compareFP16VectorShuffleFunc<4, 4, 3>;
+ case 444:return compareFP16VectorShuffleFunc<4, 4, 4>;
+ default: TCU_THROW(InternalError, "Invalid number of components specified.");
+ }
+}
+
+template<class SpecResource>
+tcu::TestCaseGroup* createFloat16VectorShuffleSet (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "opvectorshuffle", "OpVectorShuffle tests"));
+ const int testSpecificSeed = deStringHash(testGroup->getName());
+ const int seed = testCtx.getCommandLine().getBaseSeed() ^ testSpecificSeed;
+ de::Random rnd (seed);
+ const deUint32 numDataPoints = 128;
+ map<string, string> fragments;
+
+ struct TestType
+ {
+ const deUint32 typeComponents;
+ const char* typeName;
+ };
+
+ const TestType testTypes[] =
+ {
+ {
+ 2,
+ "v2f16",
+ },
+ {
+ 3,
+ "v3f16",
+ },
+ {
+ 4,
+ "v4f16",
+ },
+ };
+
+ const StringTemplate preMain
+ (
+ " %c_i32_ndp = OpConstant %i32 ${num_data_points}\n"
+ " %c_i32_cc = OpConstant %i32 ${case_count}\n"
+ " %f16 = OpTypeFloat 16\n"
+ " %v2f16 = OpTypeVector %f16 2\n"
+ " %v3f16 = OpTypeVector %f16 3\n"
+ " %v4f16 = OpTypeVector %f16 4\n"
+
+ " %up_v2f16 = OpTypePointer Uniform %v2f16\n"
+ " %ra_v2f16 = OpTypeArray %v2f16 %c_i32_ndp\n"
+ " %SSBO_v2f16 = OpTypeStruct %ra_v2f16\n"
+ "%up_SSBO_v2f16 = OpTypePointer Uniform %SSBO_v2f16\n"
+
+ " %up_v3f16 = OpTypePointer Uniform %v3f16\n"
+ " %ra_v3f16 = OpTypeArray %v3f16 %c_i32_ndp\n"
+ " %SSBO_v3f16 = OpTypeStruct %ra_v3f16\n"
+ "%up_SSBO_v3f16 = OpTypePointer Uniform %SSBO_v3f16\n"
+
+ " %up_v4f16 = OpTypePointer Uniform %v4f16\n"
+ " %ra_v4f16 = OpTypeArray %v4f16 %c_i32_ndp\n"
+ " %SSBO_v4f16 = OpTypeStruct %ra_v4f16\n"
+ "%up_SSBO_v4f16 = OpTypePointer Uniform %SSBO_v4f16\n"
+
+ " %fun_t = OpTypeFunction %${tt_dst} %${tt_src0} %${tt_src1} %i32\n"
+
+ " %ssbo_src0 = OpVariable %up_SSBO_${tt_src0} Uniform\n"
+ " %ssbo_src1 = OpVariable %up_SSBO_${tt_src1} Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO_${tt_dst} Uniform\n"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %ra_v2f16 ArrayStride 4\n"
+ "OpDecorate %ra_v3f16 ArrayStride 8\n"
+ "OpDecorate %ra_v4f16 ArrayStride 8\n"
+
+ "OpMemberDecorate %SSBO_v2f16 0 Offset 0\n"
+ "OpDecorate %SSBO_v2f16 BufferBlock\n"
+
+ "OpMemberDecorate %SSBO_v3f16 0 Offset 0\n"
+ "OpDecorate %SSBO_v3f16 BufferBlock\n"
+
+ "OpMemberDecorate %SSBO_v4f16 0 Offset 0\n"
+ "OpDecorate %SSBO_v4f16 BufferBlock\n"
+
+ "OpDecorate %ssbo_src0 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src0 Binding 0\n"
+ "OpDecorate %ssbo_src1 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src1 Binding 1\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 2\n"
+ );
+
+ const StringTemplate testFun
+ (
+ "%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+ " %entry = OpLabel\n"
+
+ " %i = OpVariable %fp_i32 Function\n"
+ " OpStore %i %c_i32_0\n"
+
+ " %will_run = OpFunctionCall %bool %isUniqueIdZero\n"
+ " OpSelectionMerge %end_if None\n"
+ " OpBranchConditional %will_run %run_test %end_if\n"
+
+ " %run_test = OpLabel\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %i_cmp = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %i_cmp %c_i32_ndp\n"
+ " OpLoopMerge %merge %next None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %ndx = OpLoad %i32 %i\n"
+ " %src0 = OpAccessChain %up_${tt_src0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${tt_src0} %src0\n"
+ " %src1 = OpAccessChain %up_${tt_src1} %ssbo_src1 %c_i32_0 %ndx\n"
+ " %val_src1 = OpLoad %${tt_src1} %src1\n"
+ " %val_dst = OpFunctionCall %${tt_dst} %sw_fun %val_src0 %val_src1 %ndx\n"
+ " %dst = OpAccessChain %up_${tt_dst} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n"
+ " OpBranch %next\n"
+
+ " %next = OpLabel\n"
+ " %i_cur = OpLoad %i32 %i\n"
+ " %i_new = OpIAdd %i32 %i_cur %c_i32_1\n"
+ " OpStore %i %i_new\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
+ " OpBranch %end_if\n"
+ " %end_if = OpLabel\n"
+ " OpReturnValue %param\n"
+ " OpFunctionEnd\n"
+ "\n"
+
+ " %sw_fun = OpFunction %${tt_dst} None %fun_t\n"
+ "%sw_param0 = OpFunctionParameter %${tt_src0}\n"
+ "%sw_param1 = OpFunctionParameter %${tt_src1}\n"
+ "%sw_paramn = OpFunctionParameter %i32\n"
+ " %sw_entry = OpLabel\n"
+ " %modulo = OpSMod %i32 %sw_paramn %c_i32_cc\n"
+ " OpSelectionMerge %switch_e None\n"
+ " OpSwitch %modulo %default ${case_list}\n"
+ "${case_bodies}"
+ "%default = OpLabel\n"
+ " OpUnreachable\n" // Unreachable default case for switch statement
+ "%switch_e = OpLabel\n"
+ " OpUnreachable\n" // Unreachable merge block for switch statement
+ " OpFunctionEnd\n"
+ );
+
+ const StringTemplate testCaseBody
+ (
+ "%case_${case_ndx} = OpLabel\n"
+ "%val_dst_${case_ndx} = OpVectorShuffle %${tt_dst} %sw_param0 %sw_param1 ${shuffle}\n"
+ " OpReturnValue %val_dst_${case_ndx}\n"
+ );
+
+ for (deUint32 dstTypeIdx = 0; dstTypeIdx < DE_LENGTH_OF_ARRAY(testTypes); ++dstTypeIdx)
+ {
+ const TestType& dstType = testTypes[dstTypeIdx];
+
+ for (deUint32 comp0Idx = 0; comp0Idx < DE_LENGTH_OF_ARRAY(testTypes); ++comp0Idx)
+ {
+ const TestType& src0Type = testTypes[comp0Idx];
+
+ for (deUint32 comp1Idx = 0; comp1Idx < DE_LENGTH_OF_ARRAY(testTypes); ++comp1Idx)
+ {
+ const TestType& src1Type = testTypes[comp1Idx];
+ const deUint32 input0Stride = (src0Type.typeComponents == 3) ? 4 : src0Type.typeComponents;
+ const deUint32 input1Stride = (src1Type.typeComponents == 3) ? 4 : src1Type.typeComponents;
+ const deUint32 outputStride = (dstType.typeComponents == 3) ? 4 : dstType.typeComponents;
+ const vector<deFloat16> float16Input0Data = getFloat16s(rnd, input0Stride * numDataPoints);
+ const vector<deFloat16> float16Input1Data = getFloat16s(rnd, input1Stride * numDataPoints);
+ const vector<deFloat16> float16OutputDummy (outputStride * numDataPoints, 0);
+ const string testName = de::toString(dstType.typeComponents) + de::toString(src0Type.typeComponents) + de::toString(src1Type.typeComponents);
+ deUint32 caseCount = 0;
+ SpecResource specResource;
+ map<string, string> specs;
+ vector<string> extensions;
+ VulkanFeatures features;
+ string caseBodies;
+ string caseList;
+
+ // Generate case
+ {
+ vector<string> componentList;
+
+ // Generate component possible indices for OpVectorShuffle for components 0 and 1 in output vector
+ {
+ deUint32 caseNo = 0;
+
+ for (deUint32 comp0IdxLocal = 0; comp0IdxLocal < src0Type.typeComponents; ++comp0IdxLocal)
+ componentList.push_back(de::toString(caseNo++));
+ for (deUint32 comp1IdxLocal = 0; comp1IdxLocal < src1Type.typeComponents; ++comp1IdxLocal)
+ componentList.push_back(de::toString(caseNo++));
+ componentList.push_back("0xFFFFFFFF");
+ }
+
+ for (deUint32 comp0IdxLocal = 0; comp0IdxLocal < componentList.size(); ++comp0IdxLocal)
+ {
+ for (deUint32 comp1IdxLocal = 0; comp1IdxLocal < componentList.size(); ++comp1IdxLocal)
+ {
+ map<string, string> specCase;
+ string shuffle = componentList[comp0IdxLocal] + " " + componentList[comp1IdxLocal];
+
+ for (deUint32 compIdx = 2; compIdx < dstType.typeComponents; ++compIdx)
+ shuffle += " " + de::toString(compIdx - 2);
+
+ specCase["case_ndx"] = de::toString(caseCount);
+ specCase["shuffle"] = shuffle;
+ specCase["tt_dst"] = dstType.typeName;
+
+ caseBodies += testCaseBody.specialize(specCase);
+ caseList += de::toString(caseCount) + " %case_" + de::toString(caseCount) + " ";
+
+ caseCount++;
+ }
+ }
+ }
+
+ specs["num_data_points"] = de::toString(numDataPoints);
+ specs["tt_dst"] = dstType.typeName;
+ specs["tt_src0"] = src0Type.typeName;
+ specs["tt_src1"] = src1Type.typeName;
+ specs["case_bodies"] = caseBodies;
+ specs["case_list"] = caseList;
+ specs["case_count"] = de::toString(caseCount);
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = "OpCapability StorageUniformBufferBlock16\n";
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(float16Input0Data)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(float16Input1Data)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(float16OutputDummy)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = getFloat16VectorShuffleVerifyIOFunc(dstType.typeComponents, src0Type.typeComponents, src1Type.typeComponents);
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+
+ finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
+ }
+ }
+ }
+
+ return testGroup.release();
+}
+
+bool compareFP16CompositeFunc (const std::vector<Resource>& inputs, const vector<AllocationSp>& outputAllocs, const std::vector<Resource>&, TestLog& log)
+{
+ if (inputs.size() != 1 || outputAllocs.size() != 1)
+ return false;
+
+ vector<deUint8> input1Bytes;
+
+ inputs[0].getBytes(input1Bytes);
+
+ DE_ASSERT(input1Bytes.size() > 0);
+ DE_ASSERT(input1Bytes.size() % sizeof(deFloat16) == 0);
+
+ const size_t iterations = input1Bytes.size() / sizeof(deFloat16);
+ const deFloat16* const input1AsFP16 = (const deFloat16*)&input1Bytes[0];
+ const deFloat16* const outputAsFP16 = (const deFloat16*)outputAllocs[0]->getHostPtr();
+ const deFloat16 exceptionValue = tcu::Float16(-1.0).bits();
+ std::string error;
+
+ for (size_t idx = 0; idx < iterations; ++idx)
+ {
+ if (input1AsFP16[idx] == exceptionValue)
+ continue;
+
+ if (!compare16BitFloat(input1AsFP16[idx], outputAsFP16[idx], error))
+ {
+ log << TestLog::Message << "At " << idx << ":" << error << TestLog::EndMessage;
+
+ return false;
+ }
+ }
+
+ return true;
+}
+
+template<class SpecResource>
+tcu::TestCaseGroup* createFloat16CompositeConstructSet (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "opcompositeconstruct", "OpCompositeConstruct tests"));
+ const deUint32 numElements = 8;
+ const string testName = "struct";
+ const deUint32 structItemsCount = 88;
+ const deUint32 exceptionIndices[] = { 1, 7, 15, 17, 25, 33, 51, 55, 59, 63, 67, 71, 84, 85, 86, 87 };
+ const deFloat16 exceptionValue = tcu::Float16(-1.0).bits();
+ const deUint32 fieldModifier = 2;
+ const deUint32 fieldModifiedMulIndex = 60;
+ const deUint32 fieldModifiedAddIndex = 66;
+
+ const StringTemplate preMain
+ (
+ " %c_i32_ndp = OpConstant %i32 ${num_elements}\n"
+ " %f16 = OpTypeFloat 16\n"
+ " %v2f16 = OpTypeVector %f16 2\n"
+ " %v3f16 = OpTypeVector %f16 3\n"
+ " %v4f16 = OpTypeVector %f16 4\n"
+ " %c_f16_mod = OpConstant %f16 ${field_modifier}\n"
+
+ "${consts}"
+
+ " %c_u32_5 = OpConstant %u32 5\n"
+
+ " %f16arr3 = OpTypeArray %f16 %c_u32_3\n"
+ " %v2f16arr3 = OpTypeArray %v2f16 %c_u32_3\n"
+ " %v2f16arr5 = OpTypeArray %v2f16 %c_u32_5\n"
+ " %v3f16arr5 = OpTypeArray %v3f16 %c_u32_5\n"
+ " %v4f16arr3 = OpTypeArray %v4f16 %c_u32_3\n"
+ " %struct16 = OpTypeStruct %f16 %v2f16arr3\n"
+ " %struct16arr3 = OpTypeArray %struct16 %c_u32_3\n"
+ " %st_test = OpTypeStruct %f16 %v2f16 %v3f16 %v4f16 %f16arr3 %struct16arr3 %v2f16arr5 %f16 %v3f16arr5 %v4f16arr3\n"
+
+ " %up_st = OpTypePointer Uniform %st_test\n"
+ " %ra_st = OpTypeArray %st_test %c_i32_ndp\n"
+ " %SSBO_st = OpTypeStruct %ra_st\n"
+ " %up_SSBO_st = OpTypePointer Uniform %SSBO_st\n"
+
+ " %ssbo_dst = OpVariable %up_SSBO_st Uniform\n"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %SSBO_st BufferBlock\n"
+ "OpDecorate %ra_st ArrayStride ${struct_item_size}\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 1\n"
+
+ "OpMemberDecorate %SSBO_st 0 Offset 0\n"
+
+ "OpDecorate %v2f16arr3 ArrayStride 4\n"
+ "OpMemberDecorate %struct16 0 Offset 0\n"
+ "OpMemberDecorate %struct16 1 Offset 4\n"
+ "OpDecorate %struct16arr3 ArrayStride 16\n"
+ "OpDecorate %f16arr3 ArrayStride 2\n"
+ "OpDecorate %v2f16arr5 ArrayStride 4\n"
+ "OpDecorate %v3f16arr5 ArrayStride 8\n"
+ "OpDecorate %v4f16arr3 ArrayStride 8\n"
+
+ "OpMemberDecorate %st_test 0 Offset 0\n"
+ "OpMemberDecorate %st_test 1 Offset 4\n"
+ "OpMemberDecorate %st_test 2 Offset 8\n"
+ "OpMemberDecorate %st_test 3 Offset 16\n"
+ "OpMemberDecorate %st_test 4 Offset 24\n"
+ "OpMemberDecorate %st_test 5 Offset 32\n"
+ "OpMemberDecorate %st_test 6 Offset 80\n"
+ "OpMemberDecorate %st_test 7 Offset 100\n"
+ "OpMemberDecorate %st_test 8 Offset 104\n"
+ "OpMemberDecorate %st_test 9 Offset 144\n"
+ );
+
+ const StringTemplate testFun
+ (
+ " %test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+ " %entry = OpLabel\n"
+
+ " %i = OpVariable %fp_i32 Function\n"
+ " OpStore %i %c_i32_0\n"
+
+ " %will_run = OpFunctionCall %bool %isUniqueIdZero\n"
+ " OpSelectionMerge %end_if None\n"
+ " OpBranchConditional %will_run %run_test %end_if\n"
+
+ " %run_test = OpLabel\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %i_cmp = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %i_cmp %c_i32_ndp\n"
+ " OpLoopMerge %merge %next None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %ndx = OpLoad %i32 %i\n"
+
+ " %fld1 = OpCompositeConstruct %v2f16 %c_f16_2 %c_f16_3\n"
+ " %fld2 = OpCompositeConstruct %v3f16 %c_f16_4 %c_f16_5 %c_f16_6\n"
+ " %fld3 = OpCompositeConstruct %v4f16 %c_f16_8 %c_f16_9 %c_f16_10 %c_f16_11\n"
+
+ " %fld4 = OpCompositeConstruct %f16arr3 %c_f16_12 %c_f16_13 %c_f16_14\n"
+
+ "%fld5_0_1_0 = OpCompositeConstruct %v2f16 %c_f16_18 %c_f16_19\n"
+ "%fld5_0_1_1 = OpCompositeConstruct %v2f16 %c_f16_20 %c_f16_21\n"
+ "%fld5_0_1_2 = OpCompositeConstruct %v2f16 %c_f16_22 %c_f16_23\n"
+ " %fld5_0_1 = OpCompositeConstruct %v2f16arr3 %fld5_0_1_0 %fld5_0_1_1 %fld5_0_1_2\n"
+ " %fld5_0 = OpCompositeConstruct %struct16 %c_f16_16 %fld5_0_1\n"
+
+ "%fld5_1_1_0 = OpCompositeConstruct %v2f16 %c_f16_26 %c_f16_27\n"
+ "%fld5_1_1_1 = OpCompositeConstruct %v2f16 %c_f16_28 %c_f16_29\n"
+ "%fld5_1_1_2 = OpCompositeConstruct %v2f16 %c_f16_30 %c_f16_31\n"
+ " %fld5_1_1 = OpCompositeConstruct %v2f16arr3 %fld5_1_1_0 %fld5_1_1_1 %fld5_1_1_2\n"
+ " %fld5_1 = OpCompositeConstruct %struct16 %c_f16_24 %fld5_1_1\n"
+
+ "%fld5_2_1_0 = OpCompositeConstruct %v2f16 %c_f16_34 %c_f16_35\n"
+ "%fld5_2_1_1 = OpCompositeConstruct %v2f16 %c_f16_36 %c_f16_37\n"
+ "%fld5_2_1_2 = OpCompositeConstruct %v2f16 %c_f16_38 %c_f16_39\n"
+ " %fld5_2_1 = OpCompositeConstruct %v2f16arr3 %fld5_2_1_0 %fld5_2_1_1 %fld5_2_1_2\n"
+ " %fld5_2 = OpCompositeConstruct %struct16 %c_f16_32 %fld5_2_1\n"
+
+ " %fld5 = OpCompositeConstruct %struct16arr3 %fld5_0 %fld5_1 %fld5_2\n"
+
+ " %fld6_0 = OpCompositeConstruct %v2f16 %c_f16_40 %c_f16_41\n"
+ " %fld6_1 = OpCompositeConstruct %v2f16 %c_f16_42 %c_f16_43\n"
+ " %fld6_2 = OpCompositeConstruct %v2f16 %c_f16_44 %c_f16_45\n"
+ " %fld6_3 = OpCompositeConstruct %v2f16 %c_f16_46 %c_f16_47\n"
+ " %fld6_4 = OpCompositeConstruct %v2f16 %c_f16_48 %c_f16_49\n"
+ " %fld6 = OpCompositeConstruct %v2f16arr5 %fld6_0 %fld6_1 %fld6_2 %fld6_3 %fld6_4\n"
+
+ " %fndx = OpConvertSToF %f16 %ndx\n"
+ " %fld8_2a0 = OpFMul %f16 %fndx %c_f16_mod\n"
+ " %fld8_3b1 = OpFAdd %f16 %fndx %c_f16_mod\n"
+
+ " %fld8_2a = OpCompositeConstruct %v2f16 %fld8_2a0 %c_f16_61\n"
+ " %fld8_3b = OpCompositeConstruct %v2f16 %c_f16_65 %fld8_3b1\n"
+ " %fld8_0 = OpCompositeConstruct %v3f16 %c_f16_52 %c_f16_53 %c_f16_54\n"
+ " %fld8_1 = OpCompositeConstruct %v3f16 %c_f16_56 %c_f16_57 %c_f16_58\n"
+ " %fld8_2 = OpCompositeConstruct %v3f16 %fld8_2a %c_f16_62\n"
+ " %fld8_3 = OpCompositeConstruct %v3f16 %c_f16_64 %fld8_3b\n"
+ " %fld8_4 = OpCompositeConstruct %v3f16 %c_f16_68 %c_f16_69 %c_f16_70\n"
+ " %fld8 = OpCompositeConstruct %v3f16arr5 %fld8_0 %fld8_1 %fld8_2 %fld8_3 %fld8_4\n"
+
+ " %fld9_0 = OpCompositeConstruct %v4f16 %c_f16_72 %c_f16_73 %c_f16_74 %c_f16_75\n"
+ " %fld9_1 = OpCompositeConstruct %v4f16 %c_f16_76 %c_f16_77 %c_f16_78 %c_f16_79\n"
+ " %fld9_2 = OpCompositeConstruct %v4f16 %c_f16_80 %c_f16_81 %c_f16_82 %c_f16_83\n"
+ " %fld9 = OpCompositeConstruct %v4f16arr3 %fld9_0 %fld9_1 %fld9_2\n"
+
+ " %st_val = OpCompositeConstruct %st_test %c_f16_0 %fld1 %fld2 %fld3 %fld4 %fld5 %fld6 %c_f16_50 %fld8 %fld9\n"
+ " %dst = OpAccessChain %up_st %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %st_val\n"
+
+ " OpBranch %next\n"
+
+ " %next = OpLabel\n"
+ " %i_cur = OpLoad %i32 %i\n"
+ " %i_new = OpIAdd %i32 %i_cur %c_i32_1\n"
+ " OpStore %i %i_new\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
+ " OpBranch %end_if\n"
+ " %end_if = OpLabel\n"
+ " OpReturnValue %param\n"
+ " OpFunctionEnd\n"
+ );
+
+ {
+ SpecResource specResource;
+ map<string, string> specs;
+ VulkanFeatures features;
+ map<string, string> fragments;
+ vector<string> extensions;
+ vector<deFloat16> expectedOutput;
+ string consts;
+
+ for (deUint32 elementNdx = 0; elementNdx < numElements; ++elementNdx)
+ {
+ vector<deFloat16> expectedIterationOutput;
+
+ for (deUint32 structItemNdx = 0; structItemNdx < structItemsCount; ++structItemNdx)
+ expectedIterationOutput.push_back(tcu::Float16(float(structItemNdx)).bits());
+
+ for (deUint32 structItemNdx = 0; structItemNdx < DE_LENGTH_OF_ARRAY(exceptionIndices); ++structItemNdx)
+ expectedIterationOutput[exceptionIndices[structItemNdx]] = exceptionValue;
+
+ expectedIterationOutput[fieldModifiedMulIndex] = tcu::Float16(float(elementNdx * fieldModifier)).bits();
+ expectedIterationOutput[fieldModifiedAddIndex] = tcu::Float16(float(elementNdx + fieldModifier)).bits();
+
+ expectedOutput.insert(expectedOutput.end(), expectedIterationOutput.begin(), expectedIterationOutput.end());
+ }
+
+ for (deUint32 i = 0; i < structItemsCount; ++i)
+ consts += " %c_f16_" + de::toString(i) + " = OpConstant %f16 " + de::toString(i) + "\n";
+
+ specs["num_elements"] = de::toString(numElements);
+ specs["struct_item_size"] = de::toString(structItemsCount * sizeof(deFloat16));
+ specs["field_modifier"] = de::toString(fieldModifier);
+ specs["consts"] = consts;
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = "OpCapability StorageUniformBufferBlock16\n";
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = compareFP16CompositeFunc;
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+
+ finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
+ }
+
+ return testGroup.release();
+}
+
+template<class SpecResource>
+tcu::TestCaseGroup* createFloat16CompositeInsertExtractSet (tcu::TestContext& testCtx, const char* op)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, de::toLower(op).c_str(), op));
+ const deFloat16 exceptionValue = tcu::Float16(-1.0).bits();
+ const string opName (op);
+ const deUint32 opIndex = (opName == "OpCompositeInsert") ? 0
+ : (opName == "OpCompositeExtract") ? 1
+ : -1;
+
+ const StringTemplate preMain
+ (
+ " %c_i32_ndp = OpConstant %i32 ${num_elements}\n"
+ " %f16 = OpTypeFloat 16\n"
+ " %v2f16 = OpTypeVector %f16 2\n"
+ " %v3f16 = OpTypeVector %f16 3\n"
+ " %v4f16 = OpTypeVector %f16 4\n"
+ " %c_f16_na = OpConstant %f16 -1.0\n"
+ " %c_u32_5 = OpConstant %u32 5\n"
+
+ "%f16arr3 = OpTypeArray %f16 %c_u32_3\n"
+ "%v2f16arr3 = OpTypeArray %v2f16 %c_u32_3\n"
+ "%v2f16arr5 = OpTypeArray %v2f16 %c_u32_5\n"
+ "%v3f16arr5 = OpTypeArray %v3f16 %c_u32_5\n"
+ "%v4f16arr3 = OpTypeArray %v4f16 %c_u32_3\n"
+ "%struct16 = OpTypeStruct %f16 %v2f16arr3\n"
+ "%struct16arr3 = OpTypeArray %struct16 %c_u32_3\n"
+ "%st_test = OpTypeStruct %${field_type}\n"
+
+ " %up_f16 = OpTypePointer Uniform %f16\n"
+ " %up_st = OpTypePointer Uniform %st_test\n"
+ " %ra_f16 = OpTypeArray %f16 %c_i32_ndp\n"
+ " %ra_st = OpTypeArray %st_test %c_i32_1\n"
+
+ "${op_premain_decls}"
+
+ " %up_SSBO_src = OpTypePointer Uniform %SSBO_src\n"
+ " %up_SSBO_dst = OpTypePointer Uniform %SSBO_dst\n"
+
+ " %ssbo_src = OpVariable %up_SSBO_src Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO_dst Uniform\n"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %SSBO_src BufferBlock\n"
+ "OpDecorate %SSBO_dst BufferBlock\n"
+ "OpDecorate %ra_f16 ArrayStride 2\n"
+ "OpDecorate %ra_st ArrayStride ${struct_item_size}\n"
+ "OpDecorate %ssbo_src DescriptorSet 0\n"
+ "OpDecorate %ssbo_src Binding 0\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 1\n"
+
+ "OpMemberDecorate %SSBO_src 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_dst 0 Offset 0\n"
+
+ "OpDecorate %v2f16arr3 ArrayStride 4\n"
+ "OpMemberDecorate %struct16 0 Offset 0\n"
+ "OpMemberDecorate %struct16 1 Offset 4\n"
+ "OpDecorate %struct16arr3 ArrayStride 16\n"
+ "OpDecorate %f16arr3 ArrayStride 2\n"
+ "OpDecorate %v2f16arr5 ArrayStride 4\n"
+ "OpDecorate %v3f16arr5 ArrayStride 8\n"
+ "OpDecorate %v4f16arr3 ArrayStride 8\n"
+
+ "OpMemberDecorate %st_test 0 Offset 0\n"
+ );
+
+ const StringTemplate testFun
+ (
+ " %test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+ " %param = OpFunctionParameter %v4f32\n"
+ " %entry = OpLabel\n"
+
+ " %i = OpVariable %fp_i32 Function\n"
+ " OpStore %i %c_i32_0\n"
+
+ " %will_run = OpFunctionCall %bool %isUniqueIdZero\n"
+ " OpSelectionMerge %end_if None\n"
+ " OpBranchConditional %will_run %run_test %end_if\n"
+
+ " %run_test = OpLabel\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %i_cmp = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %i_cmp %c_i32_ndp\n"
+ " OpLoopMerge %merge %next None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %ndx = OpLoad %i32 %i\n"
+
+ "${op_sw_fun_call}"
+
+ " OpStore %dst %val_dst\n"
+ " OpBranch %next\n"
+
+ " %next = OpLabel\n"
+ " %i_cur = OpLoad %i32 %i\n"
+ " %i_new = OpIAdd %i32 %i_cur %c_i32_1\n"
+ " OpStore %i %i_new\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
+ " OpBranch %end_if\n"
+ " %end_if = OpLabel\n"
+ " OpReturnValue %param\n"
+ " OpFunctionEnd\n"
+
+ "${op_sw_fun_header}"
+ " %sw_param = OpFunctionParameter %st_test\n"
+ "%sw_paramn = OpFunctionParameter %i32\n"
+ " %sw_entry = OpLabel\n"
+ " OpSelectionMerge %switch_e None\n"
+ " OpSwitch %sw_paramn %default ${case_list}\n"
+
+ "${case_bodies}"
+
+ "%default = OpLabel\n"
+ " OpReturnValue ${op_case_default_value}\n"
+ "%switch_e = OpLabel\n"
+ " OpUnreachable\n" // Unreachable merge block for switch statement
+ " OpFunctionEnd\n"
+ );
+
+ const StringTemplate testCaseBody
+ (
+ "%case_${case_ndx} = OpLabel\n"
+ "%val_ret_${case_ndx} = ${op_name} ${op_args_part} ${access_path}\n"
+ " OpReturnValue %val_ret_${case_ndx}\n"
+ );
+
+ struct OpParts
+ {
+ const char* premainDecls;
+ const char* swFunCall;
+ const char* swFunHeader;
+ const char* caseDefaultValue;
+ const char* argsPartial;
+ };
+
+ OpParts opPartsArray[] =
+ {
+ // OpCompositeInsert
+ {
+ " %fun_t = OpTypeFunction %st_test %f16 %st_test %i32\n"
+ " %SSBO_src = OpTypeStruct %ra_f16\n"
+ " %SSBO_dst = OpTypeStruct %ra_st\n",
+
+ " %src = OpAccessChain %up_f16 %ssbo_src %c_i32_0 %ndx\n"
+ " %dst = OpAccessChain %up_st %ssbo_dst %c_i32_0 %c_i32_0\n"
+ " %val_new = OpLoad %f16 %src\n"
+ " %val_old = OpLoad %st_test %dst\n"
+ " %val_dst = OpFunctionCall %st_test %sw_fun %val_new %val_old %ndx\n",
+
+ " %sw_fun = OpFunction %st_test None %fun_t\n"
+ "%sw_paramv = OpFunctionParameter %f16\n",
+
+ "%sw_param",
+
+ "%st_test %sw_paramv %sw_param",
+ },
+ // OpCompositeExtract
+ {
+ " %fun_t = OpTypeFunction %f16 %st_test %i32\n"
+ " %SSBO_src = OpTypeStruct %ra_st\n"
+ " %SSBO_dst = OpTypeStruct %ra_f16\n",
+
+ " %src = OpAccessChain %up_st %ssbo_src %c_i32_0 %c_i32_0\n"
+ " %dst = OpAccessChain %up_f16 %ssbo_dst %c_i32_0 %ndx\n"
+ " %val_src = OpLoad %st_test %src\n"
+ " %val_dst = OpFunctionCall %f16 %sw_fun %val_src %ndx\n",
+
+ " %sw_fun = OpFunction %f16 None %fun_t\n",
+
+ "%c_f16_na",
+
+ "%f16 %sw_param",
+ },
+ };
+
+ DE_ASSERT(opIndex >= 0 && opIndex < DE_LENGTH_OF_ARRAY(opPartsArray));
+
+ const char* accessPathF16[] =
+ {
+ "0", // %f16
+ DE_NULL,
+ };
+ const char* accessPathV2F16[] =
+ {
+ "0 0", // %v2f16
+ "0 1",
+ };
+ const char* accessPathV3F16[] =
+ {
+ "0 0", // %v3f16
+ "0 1",
+ "0 2",
+ DE_NULL,
+ };
+ const char* accessPathV4F16[] =
+ {
+ "0 0", // %v4f16"
+ "0 1",
+ "0 2",
+ "0 3",
+ };
+ const char* accessPathF16Arr3[] =
+ {
+ "0 0", // %f16arr3
+ "0 1",
+ "0 2",
+ DE_NULL,
+ };
+ const char* accessPathStruct16Arr3[] =
+ {
+ "0 0 0", // %struct16arr3
+ DE_NULL,
+ "0 0 1 0 0",
+ "0 0 1 0 1",
+ "0 0 1 1 0",
+ "0 0 1 1 1",
+ "0 0 1 2 0",
+ "0 0 1 2 1",
+ "0 1 0",
+ DE_NULL,
+ "0 1 1 0 0",
+ "0 1 1 0 1",
+ "0 1 1 1 0",
+ "0 1 1 1 1",
+ "0 1 1 2 0",
+ "0 1 1 2 1",
+ "0 2 0",
+ DE_NULL,
+ "0 2 1 0 0",
+ "0 2 1 0 1",
+ "0 2 1 1 0",
+ "0 2 1 1 1",
+ "0 2 1 2 0",
+ "0 2 1 2 1",
+ };
+ const char* accessPathV2F16Arr5[] =
+ {
+ "0 0 0", // %v2f16arr5
+ "0 0 1",
+ "0 1 0",
+ "0 1 1",
+ "0 2 0",
+ "0 2 1",
+ "0 3 0",
+ "0 3 1",
+ "0 4 0",
+ "0 4 1",
+ };
+ const char* accessPathV3F16Arr5[] =
+ {
+ "0 0 0", // %v3f16arr5
+ "0 0 1",
+ "0 0 2",
+ DE_NULL,
+ "0 1 0",
+ "0 1 1",
+ "0 1 2",
+ DE_NULL,
+ "0 2 0",
+ "0 2 1",
+ "0 2 2",
+ DE_NULL,
+ "0 3 0",
+ "0 3 1",
+ "0 3 2",
+ DE_NULL,
+ "0 4 0",
+ "0 4 1",
+ "0 4 2",
+ DE_NULL,
+ };
+ const char* accessPathV4F16Arr3[] =
+ {
+ "0 0 0", // %v4f16arr3
+ "0 0 1",
+ "0 0 2",
+ "0 0 3",
+ "0 1 0",
+ "0 1 1",
+ "0 1 2",
+ "0 1 3",
+ "0 2 0",
+ "0 2 1",
+ "0 2 2",
+ "0 2 3",
+ DE_NULL,
+ DE_NULL,
+ DE_NULL,
+ DE_NULL,
+ };
+
+ struct TypeTestParameters
+ {
+ const char* name;
+ size_t accessPathLength;
+ const char** accessPath;
+ };
+
+ const TypeTestParameters typeTestParameters[] =
+ {
+ { "f16", DE_LENGTH_OF_ARRAY(accessPathF16), accessPathF16 },
+ { "v2f16", DE_LENGTH_OF_ARRAY(accessPathV2F16), accessPathV2F16 },
+ { "v3f16", DE_LENGTH_OF_ARRAY(accessPathV3F16), accessPathV3F16 },
+ { "v4f16", DE_LENGTH_OF_ARRAY(accessPathV4F16), accessPathV4F16 },
+ { "f16arr3", DE_LENGTH_OF_ARRAY(accessPathF16Arr3), accessPathF16Arr3 },
+ { "v2f16arr5", DE_LENGTH_OF_ARRAY(accessPathV2F16Arr5), accessPathV2F16Arr5 },
+ { "v3f16arr5", DE_LENGTH_OF_ARRAY(accessPathV3F16Arr5), accessPathV3F16Arr5 },
+ { "v4f16arr3", DE_LENGTH_OF_ARRAY(accessPathV4F16Arr3), accessPathV4F16Arr3 },
+ { "struct16arr3", DE_LENGTH_OF_ARRAY(accessPathStruct16Arr3), accessPathStruct16Arr3 },
+ };
+
+ for (size_t typeTestNdx = 0; typeTestNdx < DE_LENGTH_OF_ARRAY(typeTestParameters); ++typeTestNdx)
+ {
+ const OpParts opParts = opPartsArray[opIndex];
+ const string testName = typeTestParameters[typeTestNdx].name;
+ const size_t structItemsCount = typeTestParameters[typeTestNdx].accessPathLength;
+ const char** accessPath = typeTestParameters[typeTestNdx].accessPath;
+ SpecResource specResource;
+ map<string, string> specs;
+ VulkanFeatures features;
+ map<string, string> fragments;
+ vector<string> extensions;
+ vector<deFloat16> inputFP16;
+ vector<deFloat16> dummyFP16Output;
+
+ // Generate values for input
+ inputFP16.reserve(structItemsCount);
+ for (deUint32 structItemNdx = 0; structItemNdx < structItemsCount; ++structItemNdx)
+ inputFP16.push_back((accessPath[structItemNdx] == DE_NULL) ? exceptionValue : tcu::Float16(float(structItemNdx)).bits());
+
+ dummyFP16Output.resize(structItemsCount);
+
+ // Generate cases for OpSwitch
+ {
+ string caseBodies;
+ string caseList;
+
+ for (deUint32 caseNdx = 0; caseNdx < structItemsCount; ++caseNdx)
+ if (accessPath[caseNdx] != DE_NULL)
+ {
+ map<string, string> specCase;
+
+ specCase["case_ndx"] = de::toString(caseNdx);
+ specCase["access_path"] = accessPath[caseNdx];
+ specCase["op_args_part"] = opParts.argsPartial;
+ specCase["op_name"] = opName;
+
+ caseBodies += testCaseBody.specialize(specCase);
+ caseList += de::toString(caseNdx) + " %case_" + de::toString(caseNdx) + " ";
+ }
+
+ specs["case_bodies"] = caseBodies;
+ specs["case_list"] = caseList;
+ }
+
+ specs["num_elements"] = de::toString(structItemsCount);
+ specs["field_type"] = typeTestParameters[typeTestNdx].name;
+ specs["struct_item_size"] = de::toString(structItemsCount * sizeof(deFloat16));
+ specs["op_premain_decls"] = opParts.premainDecls;
+ specs["op_sw_fun_call"] = opParts.swFunCall;
+ specs["op_sw_fun_header"] = opParts.swFunHeader;
+ specs["op_case_default_value"] = opParts.caseDefaultValue;
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"";
+ fragments["capability"] = "OpCapability StorageUniformBufferBlock16\n";
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(inputFP16)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(dummyFP16Output)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = compareFP16CompositeFunc;
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+
+ finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
+ }
+
+ return testGroup.release();
+}
+
+struct fp16PerComponent
+{
+ fp16PerComponent()
+ : flavor(0)
+ , floatFormat16 (-14, 15, 10, true)
+ , outCompCount(0)
+ , argCompCount(3, 0)
+ {
+ }
+
+ bool callOncePerComponent () { return true; }
+ deUint32 getComponentValidity () { return static_cast<deUint32>(-1); }
+
+ virtual double getULPs (vector<const deFloat16*>&) { return 1.0; }
+ virtual double getMin (double value, double ulps) { return value - floatFormat16.ulp(deAbs(value), ulps); }
+ virtual double getMax (double value, double ulps) { return value + floatFormat16.ulp(deAbs(value), ulps); }
+
+ virtual size_t getFlavorCount () { return flavorNames.empty() ? 1 : flavorNames.size(); }
+ virtual void setFlavor (size_t flavorNo) { DE_ASSERT(flavorNo < getFlavorCount()); flavor = flavorNo; }
+ virtual size_t getFlavor () { return flavor; }
+ virtual string getCurrentFlavorName () { return flavorNames.empty() ? string("") : flavorNames[getFlavor()]; }
+
+ virtual void setOutCompCount (size_t compCount) { outCompCount = compCount; }
+ virtual size_t getOutCompCount () { return outCompCount; }
+
+ virtual void setArgCompCount (size_t argNo, size_t compCount) { argCompCount[argNo] = compCount; }
+ virtual size_t getArgCompCount (size_t argNo) { return argCompCount[argNo]; }
+
+protected:
+ size_t flavor;
+ tcu::FloatFormat floatFormat16;
+ size_t outCompCount;
+ vector<size_t> argCompCount;
+ vector<string> flavorNames;
+};
+
+struct fp16OpFNegate : public fp16PerComponent
+{
+ template <class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (0.0 - d);
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Round : public fp16PerComponent
+{
+ fp16Round() : fp16PerComponent()
+ {
+ flavorNames.push_back("Floor(x+0.5)");
+ flavorNames.push_back("Floor(x-0.5)");
+ flavorNames.push_back("RoundEven");
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ double result (0.0);
+
+ switch (flavor)
+ {
+ case 0: result = deRound(d); break;
+ case 1: result = deFloor(d - 0.5); break;
+ case 2: result = deRoundEven(d); break;
+ default: TCU_THROW(InternalError, "Invalid flavor specified");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16RoundEven : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deRoundEven(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Trunc : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deTrunc(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16FAbs : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deAbs(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16FSign : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deSign(d));
+
+ if (x.isNaN())
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Floor : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deFloor(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Ceil : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deCeil(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Fract : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deFrac(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Radians : public fp16PerComponent
+{
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 2.5;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const float d (x.asFloat());
+ const float result (deFloatRadians(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Degrees : public fp16PerComponent
+{
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 2.5;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const float d (x.asFloat());
+ const float result (deFloatDegrees(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Sin : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deSin(d));
+ const double unspecUlp (16.0);
+ const double err (de::inRange(d, -DE_PI_DOUBLE, DE_PI_DOUBLE) ? deLdExp(1.0, -7) : floatFormat16.ulp(deAbs(result), unspecUlp));
+
+ if (!de::inRange(d, -DE_PI_DOUBLE, DE_PI_DOUBLE))
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = result - err;
+ max[0] = result + err;
+
+ return true;
+ }
+};
+
+struct fp16Cos : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deCos(d));
+ const double unspecUlp (16.0);
+ const double err (de::inRange(d, -DE_PI_DOUBLE, DE_PI_DOUBLE) ? deLdExp(1.0, -7) : floatFormat16.ulp(deAbs(result), unspecUlp));
+
+ if (!de::inRange(d, -DE_PI_DOUBLE, DE_PI_DOUBLE))
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = result - err;
+ max[0] = result + err;
+
+ return true;
+ }
+};
+
+struct fp16Tan : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deTan(d));
+
+ if (!de::inRange(d, -DE_PI_DOUBLE, DE_PI_DOUBLE))
+ return false;
+
+ out[0] = fp16type(result).bits();
+ {
+ const double err = deLdExp(1.0, -7);
+ const double s1 = deSin(d) + err;
+ const double s2 = deSin(d) - err;
+ const double c1 = deCos(d) + err;
+ const double c2 = deCos(d) - err;
+ const double edgeVals[] = {s1/c1, s1/c2, s2/c1, s2/c2};
+ double edgeLeft = out[0];
+ double edgeRight = out[0];
+
+ if (deSign(c1 * c2) < 0.0)
+ {
+ edgeLeft = -std::numeric_limits<double>::infinity();
+ edgeRight = +std::numeric_limits<double>::infinity();
+ }
+ else
+ {
+ edgeLeft = *std::min_element(&edgeVals[0], &edgeVals[DE_LENGTH_OF_ARRAY(edgeVals)]);
+ edgeRight = *std::max_element(&edgeVals[0], &edgeVals[DE_LENGTH_OF_ARRAY(edgeVals)]);
+ }
+
+ min[0] = edgeLeft;
+ max[0] = edgeRight;
+ }
+
+ return true;
+ }
+};
+
+struct fp16Asin : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deAsin(d));
+ const double error (deAtan2(d, sqrt(1.0 - d * d)));
+
+ if (!x.isNaN() && deAbs(d) > 1.0)
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = result - floatFormat16.ulp(deAbs(error), 2 * 5.0); // This is not a precision test. Value is not from spec
+ max[0] = result + floatFormat16.ulp(deAbs(error), 2 * 5.0); // This is not a precision test. Value is not from spec
+
+ return true;
+ }
+};
+
+struct fp16Acos : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deAcos(d));
+ const double error (deAtan2(sqrt(1.0 - d * d), d));
+
+ if (!x.isNaN() && deAbs(d) > 1.0)
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = result - floatFormat16.ulp(deAbs(error), 2 * 5.0); // This is not a precision test. Value is not from spec
+ max[0] = result + floatFormat16.ulp(deAbs(error), 2 * 5.0); // This is not a precision test. Value is not from spec
+
+ return true;
+ }
+};
+
+struct fp16Atan : public fp16PerComponent
+{
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 2 * 5.0; // This is not a precision test. Value is not from spec
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deAtanOver(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Sinh : public fp16PerComponent
+{
+ fp16Sinh() : fp16PerComponent()
+ {
+ flavorNames.push_back("Double");
+ flavorNames.push_back("ExpFP16");
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double ulps (64 * (1.0 + 2 * deAbs(d))); // This is not a precision test. Value is not from spec
+ double result (0.0);
+ double error (0.0);
+
+ if (getFlavor() == 0)
+ {
+ result = deSinh(d);
+ error = floatFormat16.ulp(deAbs(result), ulps);
+ }
+ else if (getFlavor() == 1)
+ {
+ const fp16type epx (deExp(d));
+ const fp16type enx (deExp(-d));
+ const fp16type esx (epx.asDouble() - enx.asDouble());
+ const fp16type sx2 (esx.asDouble() / 2.0);
+
+ result = sx2.asDouble();
+ error = deAbs(floatFormat16.ulp(epx.asDouble(), ulps)) + deAbs(floatFormat16.ulp(enx.asDouble(), ulps));
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = result - error;
+ max[0] = result + error;
+
+ return true;
+ }
+};
+
+struct fp16Cosh : public fp16PerComponent
+{
+ fp16Cosh() : fp16PerComponent()
+ {
+ flavorNames.push_back("Double");
+ flavorNames.push_back("ExpFP16");
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double ulps (64 * (1.0 + 2 * deAbs(d))); // This is not a precision test. Value is not from spec
+ double result (0.0);
+
+ if (getFlavor() == 0)
+ {
+ result = deCosh(d);
+ }
+ else if (getFlavor() == 1)
+ {
+ const fp16type epx (deExp(d));
+ const fp16type enx (deExp(-d));
+ const fp16type esx (epx.asDouble() + enx.asDouble());
+ const fp16type sx2 (esx.asDouble() / 2.0);
+
+ result = sx2.asDouble();
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = result - floatFormat16.ulp(deAbs(result), ulps);
+ max[0] = result + floatFormat16.ulp(deAbs(result), ulps);
+
+ return true;
+ }
+};
+
+struct fp16Tanh : public fp16PerComponent
+{
+ fp16Tanh() : fp16PerComponent()
+ {
+ flavorNames.push_back("Tanh");
+ flavorNames.push_back("SinhCosh");
+ flavorNames.push_back("SinhCoshFP16");
+ flavorNames.push_back("PolyFP16");
+ }
+
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ const tcu::Float16 x (*in[0]);
+ const double d (x.asDouble());
+
+ return 2 * (1.0 + 2 * deAbs(d)); // This is not a precision test. Value is not from spec
+ }
+
+ template<class fp16type>
+ inline double calcPoly (const fp16type& espx, const fp16type& esnx, const fp16type& ecpx, const fp16type& ecnx)
+ {
+ const fp16type esx (espx.asDouble() - esnx.asDouble());
+ const fp16type sx2 (esx.asDouble() / 2.0);
+ const fp16type ecx (ecpx.asDouble() + ecnx.asDouble());
+ const fp16type cx2 (ecx.asDouble() / 2.0);
+ const fp16type tg (sx2.asDouble() / cx2.asDouble());
+ const double rez (tg.asDouble());
+
+ return rez;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ double result (0.0);
+
+ if (getFlavor() == 0)
+ {
+ result = deTanh(d);
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+ }
+ else if (getFlavor() == 1)
+ {
+ result = deSinh(d) / deCosh(d);
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+ }
+ else if (getFlavor() == 2)
+ {
+ const fp16type s (deSinh(d));
+ const fp16type c (deCosh(d));
+
+ result = s.asDouble() / c.asDouble();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+ }
+ else if (getFlavor() == 3)
+ {
+ const double ulps (getULPs(in));
+ const double epxm (deExp( d));
+ const double enxm (deExp(-d));
+ const double epxmerr = floatFormat16.ulp(epxm, ulps);
+ const double enxmerr = floatFormat16.ulp(enxm, ulps);
+ const fp16type epx[] = { fp16type(epxm - epxmerr), fp16type(epxm + epxmerr) };
+ const fp16type enx[] = { fp16type(enxm - enxmerr), fp16type(enxm + enxmerr) };
+ const fp16type epxm16 (epxm);
+ const fp16type enxm16 (enxm);
+ vector<double> tgs;
+
+ for (size_t spNdx = 0; spNdx < DE_LENGTH_OF_ARRAY(epx); ++spNdx)
+ for (size_t snNdx = 0; snNdx < DE_LENGTH_OF_ARRAY(enx); ++snNdx)
+ for (size_t cpNdx = 0; cpNdx < DE_LENGTH_OF_ARRAY(epx); ++cpNdx)
+ for (size_t cnNdx = 0; cnNdx < DE_LENGTH_OF_ARRAY(enx); ++cnNdx)
+ {
+ const double tgh = calcPoly(epx[spNdx], enx[snNdx], epx[cpNdx], enx[cnNdx]);
+
+ tgs.push_back(tgh);
+ }
+
+ result = calcPoly(epxm16, enxm16, epxm16, enxm16);
+ min[0] = *std::min_element(tgs.begin(), tgs.end());
+ max[0] = *std::max_element(tgs.begin(), tgs.end());
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+
+ return true;
+ }
+};
+
+struct fp16Asinh : public fp16PerComponent
+{
+ fp16Asinh() : fp16PerComponent()
+ {
+ flavorNames.push_back("Double");
+ flavorNames.push_back("PolyFP16Wiki");
+ flavorNames.push_back("PolyFP16Abs");
+ }
+
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 256.0; // This is not a precision test. Value is not from spec
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ double result (0.0);
+
+ if (getFlavor() == 0)
+ {
+ result = deAsinh(d);
+ }
+ else if (getFlavor() == 1)
+ {
+ const fp16type x2 (d * d);
+ const fp16type x2p1 (x2.asDouble() + 1.0);
+ const fp16type sq (deSqrt(x2p1.asDouble()));
+ const fp16type sxsq (d + sq.asDouble());
+ const fp16type lsxsq (deLog(sxsq.asDouble()));
+
+ if (lsxsq.isInf())
+ return false;
+
+ result = lsxsq.asDouble();
+ }
+ else if (getFlavor() == 2)
+ {
+ const fp16type x2 (d * d);
+ const fp16type x2p1 (x2.asDouble() + 1.0);
+ const fp16type sq (deSqrt(x2p1.asDouble()));
+ const fp16type sxsq (deAbs(d) + sq.asDouble());
+ const fp16type lsxsq (deLog(sxsq.asDouble()));
+
+ result = deSign(d) * lsxsq.asDouble();
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Acosh : public fp16PerComponent
+{
+ fp16Acosh() : fp16PerComponent()
+ {
+ flavorNames.push_back("Double");
+ flavorNames.push_back("PolyFP16");
+ }
+
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 16.0; // This is not a precision test. Value is not from spec
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ double result (0.0);
+
+ if (!x.isNaN() && d < 1.0)
+ return false;
+
+ if (getFlavor() == 0)
+ {
+ result = deAcosh(d);
+ }
+ else if (getFlavor() == 1)
+ {
+ const fp16type x2 (d * d);
+ const fp16type x2m1 (x2.asDouble() - 1.0);
+ const fp16type sq (deSqrt(x2m1.asDouble()));
+ const fp16type sxsq (d + sq.asDouble());
+ const fp16type lsxsq (deLog(sxsq.asDouble()));
+
+ result = lsxsq.asDouble();
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Atanh : public fp16PerComponent
+{
+ fp16Atanh() : fp16PerComponent()
+ {
+ flavorNames.push_back("Double");
+ flavorNames.push_back("PolyFP16");
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ double result (0.0);
+
+ if (deAbs(d) >= 1.0)
+ return false;
+
+ if (getFlavor() == 0)
+ {
+ const double ulps (16.0); // This is not a precision test. Value is not from spec
+
+ result = deAtanh(d);
+ min[0] = getMin(result, ulps);
+ max[0] = getMax(result, ulps);
+ }
+ else if (getFlavor() == 1)
+ {
+ const fp16type x1a (1.0 + d);
+ const fp16type x1b (1.0 - d);
+ const fp16type x1d (x1a.asDouble() / x1b.asDouble());
+ const fp16type lx1d (deLog(x1d.asDouble()));
+ const fp16type lx1d2 (0.5 * lx1d.asDouble());
+ const double error (2 * (de::inRange(deAbs(x1d.asDouble()), 0.5, 2.0) ? deLdExp(2.0, -7) : floatFormat16.ulp(deAbs(x1d.asDouble()), 3.0)));
+
+ result = lx1d2.asDouble();
+ min[0] = result - error;
+ max[0] = result + error;
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+
+ return true;
+ }
+};
+
+struct fp16Exp : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double ulps (10.0 * (1.0 + 2.0 * deAbs(d)));
+ const double result (deExp(d));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, ulps);
+ max[0] = getMax(result, ulps);
+
+ return true;
+ }
+};
+
+struct fp16Log : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deLog(d));
+ const double error (de::inRange(deAbs(d), 0.5, 2.0) ? deLdExp(2.0, -7) : floatFormat16.ulp(deAbs(result), 3.0));
+
+ if (d <= 0.0)
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = result - error;
+ max[0] = result + error;
+
+ return true;
+ }
+};
+
+struct fp16Exp2 : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deExp2(d));
+ const double ulps (1.0 + 2.0 * deAbs(fp16type(in[0][0]).asDouble()));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, ulps);
+ max[0] = getMax(result, ulps);
+
+ return true;
+ }
+};
+
+struct fp16Log2 : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deLog2(d));
+ const double error (de::inRange(deAbs(d), 0.5, 2.0) ? deLdExp(2.0, -7) : floatFormat16.ulp(deAbs(result), 3.0));
+
+ if (d <= 0.0)
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = result - error;
+ max[0] = result + error;
+
+ return true;
+ }
+};
+
+struct fp16Sqrt : public fp16PerComponent
+{
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 6.0;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (deSqrt(d));
+
+ if (!x.isNaN() && d < 0.0)
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16InverseSqrt : public fp16PerComponent
+{
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 2.0;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ const double result (1.0/deSqrt(d));
+
+ if (!x.isNaN() && d <= 0.0)
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16ModfFrac : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ double i (0.0);
+ const double result (deModf(d, &i));
+
+ if (x.isInf() || x.isNaN())
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16ModfInt : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ double i (0.0);
+ const double dummy (deModf(d, &i));
+ const double result (i);
+
+ DE_UNREF(dummy);
+
+ if (x.isInf() || x.isNaN())
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16FrexpS : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ int e (0);
+ const double result (deFrExp(d, &e));
+
+ if (x.isNaN() || x.isInf())
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16FrexpE : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const double d (x.asDouble());
+ int e (0);
+ const double dummy (deFrExp(d, &e));
+ const double result (static_cast<double>(e));
+
+ DE_UNREF(dummy);
+
+ if (x.isNaN() || x.isInf())
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16OpFAdd : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double result (xd + yd);
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16OpFSub : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double result (xd - yd);
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16OpFMul : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double result (xd * yd);
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16OpFDiv : public fp16PerComponent
+{
+ fp16OpFDiv() : fp16PerComponent()
+ {
+ flavorNames.push_back("DirectDiv");
+ flavorNames.push_back("InverseDiv");
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double unspecUlp (16.0);
+ const double ulpCnt (de::inRange(deAbs(yd), deLdExp(1, -14), deLdExp(1, 14)) ? 2.5 : unspecUlp);
+ double result (0.0);
+
+ if (y.isZero())
+ return false;
+
+ if (getFlavor() == 0)
+ {
+ result = (xd / yd);
+ }
+ else if (getFlavor() == 1)
+ {
+ const double invyd (1.0 / yd);
+ const fp16type invy (invyd);
+
+ result = (xd * invy.asDouble());
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, ulpCnt);
+ max[0] = getMax(result, ulpCnt);
+
+ return true;
+ }
+};
+
+struct fp16Atan2 : public fp16PerComponent
+{
+ fp16Atan2() : fp16PerComponent()
+ {
+ flavorNames.push_back("DoubleCalc");
+ flavorNames.push_back("DoubleCalc_PI");
+ }
+
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 2 * 5.0; // This is not a precision test. Value is not from spec
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ double result (0.0);
+
+ if (x.isZero() && y.isZero())
+ return false;
+
+ if (getFlavor() == 0)
+ {
+ result = deAtan2(xd, yd);
+ }
+ else if (getFlavor() == 1)
+ {
+ const double ulps (2.0 * 5.0); // This is not a precision test. Value is not from spec
+ const double eps (floatFormat16.ulp(DE_PI_DOUBLE, ulps));
+
+ result = deAtan2(xd, yd);
+
+ if (de::inRange(deAbs(result), DE_PI_DOUBLE - eps, DE_PI_DOUBLE + eps))
+ result = -result;
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Pow : public fp16PerComponent
+{
+ fp16Pow() : fp16PerComponent()
+ {
+ flavorNames.push_back("Pow");
+ flavorNames.push_back("PowLog2");
+ flavorNames.push_back("PowLog2FP16");
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double logxeps (de::inRange(deAbs(xd), 0.5, 2.0) ? deLdExp(1.0, -7) : floatFormat16.ulp(deLog2(xd), 3.0));
+ const double ulps1 (1.0 + 4.0 * deAbs(yd * (deLog2(xd) - logxeps)));
+ const double ulps2 (1.0 + 4.0 * deAbs(yd * (deLog2(xd) + logxeps)));
+ const double ulps (deMax(deAbs(ulps1), deAbs(ulps2)));
+ double result (0.0);
+
+ if (xd < 0.0)
+ return false;
+
+ if (x.isZero() && yd <= 0.0)
+ return false;
+
+ if (getFlavor() == 0)
+ {
+ result = dePow(xd, yd);
+ }
+ else if (getFlavor() == 1)
+ {
+ const double l2d (deLog2(xd));
+ const double e2d (deExp2(yd * l2d));
+
+ result = e2d;
+ }
+ else if (getFlavor() == 2)
+ {
+ const double l2d (deLog2(xd));
+ const fp16type l2 (l2d);
+ const double e2d (deExp2(yd * l2.asDouble()));
+ const fp16type e2 (e2d);
+
+ result = e2.asDouble();
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, ulps);
+ max[0] = getMax(result, ulps);
+
+ return true;
+ }
+};
+
+struct fp16FMin : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double result (deMin(xd, yd));
+
+ if (x.isNaN() || y.isNaN())
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16FMax : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double result (deMax(xd, yd));
+
+ if (x.isNaN() || y.isNaN())
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Step : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type edge (*in[0]);
+ const fp16type x (*in[1]);
+ const double edged (edge.asDouble());
+ const double xd (x.asDouble());
+ const double result (deStep(edged, xd));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Ldexp : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const double xd (x.asDouble());
+ const int yd (static_cast<int>(deTrunc(y.asDouble())));
+ const double result (deLdExp(xd, yd));
+
+ if (y.isNaN() || y.isInf() || y.isDenorm() || yd < -14 || yd > 15)
+ return false;
+
+ // Spec: "If this product is too large to be represented in the floating-point type, the result is undefined."
+ if (fp16type(result).isInf())
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16FClamp : public fp16PerComponent
+{
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type minVal (*in[1]);
+ const fp16type maxVal (*in[2]);
+ const double xd (x.asDouble());
+ const double minVald (minVal.asDouble());
+ const double maxVald (maxVal.asDouble());
+ const double result (deClamp(xd, minVald, maxVald));
+
+ if (minVal.isNaN() || maxVal.isNaN() || minVald > maxVald)
+ return false;
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16FMix : public fp16PerComponent
+{
+ fp16FMix() : fp16PerComponent()
+ {
+ flavorNames.push_back("DoubleCalc");
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("EmulatingFP16YminusX");
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type x (*in[0]);
+ const fp16type y (*in[1]);
+ const fp16type a (*in[2]);
+ const double ulps (8.0); // This is not a precision test. Value is not from spec
+ double result (0.0);
+
+ if (getFlavor() == 0)
+ {
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double ad (a.asDouble());
+ const double xeps (floatFormat16.ulp(deAbs(xd * (1.0 - ad)), ulps));
+ const double yeps (floatFormat16.ulp(deAbs(yd * ad), ulps));
+ const double eps (xeps + yeps);
+
+ result = deMix(xd, yd, ad);
+ min[0] = result - eps;
+ max[0] = result + eps;
+ }
+ else if (getFlavor() == 1)
+ {
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double ad (a.asDouble());
+ const fp16type am (1.0 - ad);
+ const double amd (am.asDouble());
+ const fp16type xam (xd * amd);
+ const double xamd (xam.asDouble());
+ const fp16type ya (yd * ad);
+ const double yad (ya.asDouble());
+ const double xeps (floatFormat16.ulp(deAbs(xd * (1.0 - ad)), ulps));
+ const double yeps (floatFormat16.ulp(deAbs(yd * ad), ulps));
+ const double eps (xeps + yeps);
+
+ result = xamd + yad;
+ min[0] = result - eps;
+ max[0] = result + eps;
+ }
+ else if (getFlavor() == 2)
+ {
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const double ad (a.asDouble());
+ const fp16type ymx (yd - xd);
+ const double ymxd (ymx.asDouble());
+ const fp16type ymxa (ymxd * ad);
+ const double ymxad (ymxa.asDouble());
+ const double xeps (floatFormat16.ulp(deAbs(xd * (1.0 - ad)), ulps));
+ const double yeps (floatFormat16.ulp(deAbs(yd * ad), ulps));
+ const double eps (xeps + yeps);
+
+ result = xd + ymxad;
+ min[0] = result - eps;
+ max[0] = result + eps;
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+
+ return true;
+ }
+};
+
+struct fp16SmoothStep : public fp16PerComponent
+{
+ fp16SmoothStep() : fp16PerComponent()
+ {
+ flavorNames.push_back("FloatCalc");
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("EmulatingFP16WClamp");
+ }
+
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 4.0; // This is not a precision test. Value is not from spec
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const fp16type edge0 (*in[0]);
+ const fp16type edge1 (*in[1]);
+ const fp16type x (*in[2]);
+ double result (0.0);
+
+ if (edge0.isNaN() || edge1.isNaN() || x.isNaN() || edge0.asDouble() >= edge1.asDouble())
+ return false;
+
+ if (edge0.isInf() || edge1.isInf() || x.isInf())
+ return false;
+
+ if (getFlavor() == 0)
+ {
+ const float edge0d (edge0.asFloat());
+ const float edge1d (edge1.asFloat());
+ const float xd (x.asFloat());
+ const float sstep (deFloatSmoothStep(edge0d, edge1d, xd));
+
+ result = sstep;
+ }
+ else if (getFlavor() == 1)
+ {
+ const double edge0d (edge0.asDouble());
+ const double edge1d (edge1.asDouble());
+ const double xd (x.asDouble());
+
+ if (xd <= edge0d)
+ result = 0.0;
+ else if (xd >= edge1d)
+ result = 1.0;
+ else
+ {
+ const fp16type a (xd - edge0d);
+ const fp16type b (edge1d - edge0d);
+ const fp16type t (a.asDouble() / b.asDouble());
+ const fp16type t2 (2.0 * t.asDouble());
+ const fp16type t3 (3.0 - t2.asDouble());
+ const fp16type t4 (t.asDouble() * t3.asDouble());
+ const fp16type t5 (t.asDouble() * t4.asDouble());
+
+ result = t5.asDouble();
+ }
+ }
+ else if (getFlavor() == 2)
+ {
+ const double edge0d (edge0.asDouble());
+ const double edge1d (edge1.asDouble());
+ const double xd (x.asDouble());
+ const fp16type a (xd - edge0d);
+ const fp16type b (edge1d - edge0d);
+ const fp16type bi (1.0 / b.asDouble());
+ const fp16type t0 (a.asDouble() * bi.asDouble());
+ const double tc (deClamp(t0.asDouble(), 0.0, 1.0));
+ const fp16type t (tc);
+ const fp16type t2 (2.0 * t.asDouble());
+ const fp16type t3 (3.0 - t2.asDouble());
+ const fp16type t4 (t.asDouble() * t3.asDouble());
+ const fp16type t5 (t.asDouble() * t4.asDouble());
+
+ result = t5.asDouble();
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Fma : public fp16PerComponent
+{
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 16.0;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 3);
+ DE_ASSERT(getArgCompCount(0) == getOutCompCount());
+ DE_ASSERT(getArgCompCount(1) == getOutCompCount());
+ DE_ASSERT(getArgCompCount(2) == getOutCompCount());
+ DE_ASSERT(getOutCompCount() > 0);
+
+ const fp16type a (*in[0]);
+ const fp16type b (*in[1]);
+ const fp16type c (*in[2]);
+ const double ad (a.asDouble());
+ const double bd (b.asDouble());
+ const double cd (c.asDouble());
+ const double result (deMadd(ad, bd, cd));
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+
+struct fp16AllComponents : public fp16PerComponent
+{
+ bool callOncePerComponent () { return false; }
+};
+
+struct fp16Length : public fp16AllComponents
+{
+ fp16Length() : fp16AllComponents()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("DoubleCalc");
+ }
+
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 4.0;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(getOutCompCount() == 1);
+ DE_ASSERT(in.size() == 1);
+
+ double result (0.0);
+
+ if (getFlavor() == 0)
+ {
+ fp16type r (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(0); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const fp16type q (x.asDouble() * x.asDouble());
+
+ r = fp16type(r.asDouble() + q.asDouble());
+ }
+
+ result = deSqrt(r.asDouble());
+
+ out[0] = fp16type(result).bits();
+ }
+ else if (getFlavor() == 1)
+ {
+ double r (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(0); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const double q (x.asDouble() * x.asDouble());
+
+ r += q;
+ }
+
+ result = deSqrt(r);
+
+ out[0] = fp16type(result).bits();
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Distance : public fp16AllComponents
+{
+ fp16Distance() : fp16AllComponents()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("DoubleCalc");
+ }
+
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 4.0;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(getOutCompCount() == 1);
+ DE_ASSERT(in.size() == 2);
+ DE_ASSERT(getArgCompCount(0) == getArgCompCount(1));
+
+ double result (0.0);
+
+ if (getFlavor() == 0)
+ {
+ fp16type r (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(0); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const fp16type y (in[1][componentNdx]);
+ const fp16type d (x.asDouble() - y.asDouble());
+ const fp16type q (d.asDouble() * d.asDouble());
+
+ r = fp16type(r.asDouble() + q.asDouble());
+ }
+
+ result = deSqrt(r.asDouble());
+ }
+ else if (getFlavor() == 1)
+ {
+ double r (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(0); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const fp16type y (in[1][componentNdx]);
+ const double d (x.asDouble() - y.asDouble());
+ const double q (d * d);
+
+ r += q;
+ }
+
+ result = deSqrt(r);
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = getMin(result, getULPs(in));
+ max[0] = getMax(result, getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Cross : public fp16AllComponents
+{
+ fp16Cross() : fp16AllComponents()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("DoubleCalc");
+ }
+
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 4.0;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(getOutCompCount() == 3);
+ DE_ASSERT(in.size() == 2);
+ DE_ASSERT(getArgCompCount(0) == 3);
+ DE_ASSERT(getArgCompCount(1) == 3);
+
+ if (getFlavor() == 0)
+ {
+ const fp16type x0 (in[0][0]);
+ const fp16type x1 (in[0][1]);
+ const fp16type x2 (in[0][2]);
+ const fp16type y0 (in[1][0]);
+ const fp16type y1 (in[1][1]);
+ const fp16type y2 (in[1][2]);
+ const fp16type x1y2 (x1.asDouble() * y2.asDouble());
+ const fp16type y1x2 (y1.asDouble() * x2.asDouble());
+ const fp16type x2y0 (x2.asDouble() * y0.asDouble());
+ const fp16type y2x0 (y2.asDouble() * x0.asDouble());
+ const fp16type x0y1 (x0.asDouble() * y1.asDouble());
+ const fp16type y0x1 (y0.asDouble() * x1.asDouble());
+
+ out[0] = fp16type(x1y2.asDouble() - y1x2.asDouble()).bits();
+ out[1] = fp16type(x2y0.asDouble() - y2x0.asDouble()).bits();
+ out[2] = fp16type(x0y1.asDouble() - y0x1.asDouble()).bits();
+ }
+ else if (getFlavor() == 1)
+ {
+ const fp16type x0 (in[0][0]);
+ const fp16type x1 (in[0][1]);
+ const fp16type x2 (in[0][2]);
+ const fp16type y0 (in[1][0]);
+ const fp16type y1 (in[1][1]);
+ const fp16type y2 (in[1][2]);
+ const double x1y2 (x1.asDouble() * y2.asDouble());
+ const double y1x2 (y1.asDouble() * x2.asDouble());
+ const double x2y0 (x2.asDouble() * y0.asDouble());
+ const double y2x0 (y2.asDouble() * x0.asDouble());
+ const double x0y1 (x0.asDouble() * y1.asDouble());
+ const double y0x1 (y0.asDouble() * x1.asDouble());
+
+ out[0] = fp16type(x1y2 - y1x2).bits();
+ out[1] = fp16type(x2y0 - y2x0).bits();
+ out[2] = fp16type(x0y1 - y0x1).bits();
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ min[ndx] = getMin(fp16type(out[ndx]).asDouble(), getULPs(in));
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ max[ndx] = getMax(fp16type(out[ndx]).asDouble(), getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Normalize : public fp16AllComponents
+{
+ fp16Normalize() : fp16AllComponents()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("DoubleCalc");
+ }
+
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 4.0;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 1);
+ DE_ASSERT(getArgCompCount(0) == getOutCompCount());
+
+ if (getFlavor() == 0)
+ {
+ fp16type r(0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(0); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const fp16type q (x.asDouble() * x.asDouble());
+
+ r = fp16type(r.asDouble() + q.asDouble());
+ }
+
+ r = fp16type(deSqrt(r.asDouble()));
+
+ if (r.isZero())
+ return false;
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(0); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+
+ out[componentNdx] = fp16type(x.asDouble() / r.asDouble()).bits();
+ }
+ }
+ else if (getFlavor() == 1)
+ {
+ double r(0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(0); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const double q (x.asDouble() * x.asDouble());
+
+ r += q;
+ }
+
+ r = deSqrt(r);
+
+ if (r == 0)
+ return false;
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(0); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+
+ out[componentNdx] = fp16type(x.asDouble() / r).bits();
+ }
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ min[ndx] = getMin(fp16type(out[ndx]).asDouble(), getULPs(in));
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ max[ndx] = getMax(fp16type(out[ndx]).asDouble(), getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16FaceForward : public fp16AllComponents
+{
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 4.0;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 3);
+ DE_ASSERT(getArgCompCount(0) == getOutCompCount());
+ DE_ASSERT(getArgCompCount(1) == getOutCompCount());
+ DE_ASSERT(getArgCompCount(2) == getOutCompCount());
+
+ fp16type dp(0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type x (in[1][componentNdx]);
+ const fp16type y (in[2][componentNdx]);
+ const double xd (x.asDouble());
+ const double yd (y.asDouble());
+ const fp16type q (xd * yd);
+
+ dp = fp16type(dp.asDouble() + q.asDouble());
+ }
+
+ if (dp.isNaN() || dp.isZero())
+ return false;
+
+ for (size_t componentNdx = 0; componentNdx < getOutCompCount(); ++componentNdx)
+ {
+ const fp16type n (in[0][componentNdx]);
+
+ out[componentNdx] = (dp.signBit() == 1) ? n.bits() : fp16type(-n.asDouble()).bits();
+ }
+
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ min[ndx] = getMin(fp16type(out[ndx]).asDouble(), getULPs(in));
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ max[ndx] = getMax(fp16type(out[ndx]).asDouble(), getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Reflect : public fp16AllComponents
+{
+ fp16Reflect() : fp16AllComponents()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("EmulatingFP16+KeepZeroSign");
+ flavorNames.push_back("FloatCalc");
+ flavorNames.push_back("FloatCalc+KeepZeroSign");
+ flavorNames.push_back("EmulatingFP16+2Nfirst");
+ flavorNames.push_back("EmulatingFP16+2Ifirst");
+ }
+
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 256.0; // This is not a precision test. Value is not from spec
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 2);
+ DE_ASSERT(getArgCompCount(0) == getOutCompCount());
+ DE_ASSERT(getArgCompCount(1) == getOutCompCount());
+
+ if (getFlavor() < 4)
+ {
+ const bool keepZeroSign ((flavor & 1) != 0 ? true : false);
+ const bool floatCalc ((flavor & 2) != 0 ? true : false);
+
+ if (floatCalc)
+ {
+ float dp(0.0f);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const float id (i.asFloat());
+ const float nd (n.asFloat());
+ const float qd (id * nd);
+
+ if (keepZeroSign)
+ dp = (componentNdx == 0) ? qd : dp + qd;
+ else
+ dp = dp + qd;
+ }
+
+ for (size_t componentNdx = 0; componentNdx < getOutCompCount(); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const float dpnd (dp * n.asFloat());
+ const float dpn2d (2.0f * dpnd);
+ const float idpn2d (i.asFloat() - dpn2d);
+ const fp16type result (idpn2d);
+
+ out[componentNdx] = result.bits();
+ }
+ }
+ else
+ {
+ fp16type dp(0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const double id (i.asDouble());
+ const double nd (n.asDouble());
+ const fp16type q (id * nd);
+
+ if (keepZeroSign)
+ dp = (componentNdx == 0) ? q : fp16type(dp.asDouble() + q.asDouble());
+ else
+ dp = fp16type(dp.asDouble() + q.asDouble());
+ }
+
+ if (dp.isNaN())
+ return false;
+
+ for (size_t componentNdx = 0; componentNdx < getOutCompCount(); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const fp16type dpn (dp.asDouble() * n.asDouble());
+ const fp16type dpn2 (2 * dpn.asDouble());
+ const fp16type idpn2 (i.asDouble() - dpn2.asDouble());
+
+ out[componentNdx] = idpn2.bits();
+ }
+ }
+ }
+ else if (getFlavor() == 4)
+ {
+ fp16type dp(0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const double id (i.asDouble());
+ const double nd (n.asDouble());
+ const fp16type q (id * nd);
+
+ dp = fp16type(dp.asDouble() + q.asDouble());
+ }
+
+ if (dp.isNaN())
+ return false;
+
+ for (size_t componentNdx = 0; componentNdx < getOutCompCount(); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const fp16type n2 (2 * n.asDouble());
+ const fp16type dpn2 (dp.asDouble() * n2.asDouble());
+ const fp16type idpn2 (i.asDouble() - dpn2.asDouble());
+
+ out[componentNdx] = idpn2.bits();
+ }
+ }
+ else if (getFlavor() == 5)
+ {
+ fp16type dp2(0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const fp16type i2 (2.0 * i.asDouble());
+ const double i2d (i2.asDouble());
+ const double nd (n.asDouble());
+ const fp16type q (i2d * nd);
+
+ dp2 = fp16type(dp2.asDouble() + q.asDouble());
+ }
+
+ if (dp2.isNaN())
+ return false;
+
+ for (size_t componentNdx = 0; componentNdx < getOutCompCount(); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const fp16type dpn2 (dp2.asDouble() * n.asDouble());
+ const fp16type idpn2 (i.asDouble() - dpn2.asDouble());
+
+ out[componentNdx] = idpn2.bits();
+ }
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ min[ndx] = getMin(fp16type(out[ndx]).asDouble(), getULPs(in));
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ max[ndx] = getMax(fp16type(out[ndx]).asDouble(), getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Refract : public fp16AllComponents
+{
+ fp16Refract() : fp16AllComponents()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("EmulatingFP16+KeepZeroSign");
+ flavorNames.push_back("FloatCalc");
+ flavorNames.push_back("FloatCalc+KeepZeroSign");
+ }
+
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 8192.0; // This is not a precision test. Value is not from spec
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 3);
+ DE_ASSERT(getArgCompCount(0) == getOutCompCount());
+ DE_ASSERT(getArgCompCount(1) == getOutCompCount());
+ DE_ASSERT(getArgCompCount(2) == 1);
+
+ const bool keepZeroSign ((flavor & 1) != 0 ? true : false);
+ const bool doubleCalc ((flavor & 2) != 0 ? true : false);
+ const fp16type eta (*in[2]);
+
+ if (doubleCalc)
+ {
+ double dp (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const double id (i.asDouble());
+ const double nd (n.asDouble());
+ const double qd (id * nd);
+
+ if (keepZeroSign)
+ dp = (componentNdx == 0) ? qd : dp + qd;
+ else
+ dp = dp + qd;
+ }
+
+ const double eta2 (eta.asDouble() * eta.asDouble());
+ const double dp2 (dp * dp);
+ const double dp1 (1.0 - dp2);
+ const double dpe (eta2 * dp1);
+ const double k (1.0 - dpe);
+
+ if (k < 0.0)
+ {
+ const fp16type zero (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getOutCompCount(); ++componentNdx)
+ out[componentNdx] = zero.bits();
+ }
+ else
+ {
+ const double sk (deSqrt(k));
+
+ for (size_t componentNdx = 0; componentNdx < getOutCompCount(); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const double etai (i.asDouble() * eta.asDouble());
+ const double etadp (eta.asDouble() * dp);
+ const double etadpk (etadp + sk);
+ const double etadpkn (etadpk * n.asDouble());
+ const double full (etai - etadpkn);
+ const fp16type result (full);
+
+ if (result.isInf())
+ return false;
+
+ out[componentNdx] = result.bits();
+ }
+ }
+ }
+ else
+ {
+ fp16type dp (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const double id (i.asDouble());
+ const double nd (n.asDouble());
+ const fp16type q (id * nd);
+
+ if (keepZeroSign)
+ dp = (componentNdx == 0) ? q : fp16type(dp.asDouble() + q.asDouble());
+ else
+ dp = fp16type(dp.asDouble() + q.asDouble());
+ }
+
+ if (dp.isNaN())
+ return false;
+
+ const fp16type eta2(eta.asDouble() * eta.asDouble());
+ const fp16type dp2 (dp.asDouble() * dp.asDouble());
+ const fp16type dp1 (1.0 - dp2.asDouble());
+ const fp16type dpe (eta2.asDouble() * dp1.asDouble());
+ const fp16type k (1.0 - dpe.asDouble());
+
+ if (k.asDouble() < 0.0)
+ {
+ const fp16type zero (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getOutCompCount(); ++componentNdx)
+ out[componentNdx] = zero.bits();
+ }
+ else
+ {
+ const fp16type sk (deSqrt(k.asDouble()));
+
+ for (size_t componentNdx = 0; componentNdx < getOutCompCount(); ++componentNdx)
+ {
+ const fp16type i (in[0][componentNdx]);
+ const fp16type n (in[1][componentNdx]);
+ const fp16type etai (i.asDouble() * eta.asDouble());
+ const fp16type etadp (eta.asDouble() * dp.asDouble());
+ const fp16type etadpk (etadp.asDouble() + sk.asDouble());
+ const fp16type etadpkn (etadpk.asDouble() * n.asDouble());
+ const fp16type full (etai.asDouble() - etadpkn.asDouble());
+
+ if (full.isNaN() || full.isInf())
+ return false;
+
+ out[componentNdx] = full.bits();
+ }
+ }
+ }
+
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ min[ndx] = getMin(fp16type(out[ndx]).asDouble(), getULPs(in));
+ for (size_t ndx = 0; ndx < getOutCompCount(); ++ndx)
+ max[ndx] = getMax(fp16type(out[ndx]).asDouble(), getULPs(in));
+
+ return true;
+ }
+};
+
+struct fp16Dot : public fp16AllComponents
+{
+ fp16Dot() : fp16AllComponents()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("FloatCalc");
+ flavorNames.push_back("DoubleCalc");
+ }
+
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 16.0; // This is not a precision test. Value is not from spec
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 2);
+ DE_ASSERT(getArgCompCount(0) == getArgCompCount(1));
+ DE_ASSERT(getOutCompCount() == 1);
+
+ double result (0.0);
+ double eps (0.0);
+
+ if (getFlavor() == 0)
+ {
+ fp16type dp (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const fp16type y (in[1][componentNdx]);
+ const fp16type q (x.asDouble() * y.asDouble());
+
+ dp = fp16type(dp.asDouble() + q.asDouble());
+ eps += floatFormat16.ulp(q.asDouble(), 2.0);
+ }
+
+ result = dp.asDouble();
+ }
+ else if (getFlavor() == 1)
+ {
+ float dp (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const fp16type y (in[1][componentNdx]);
+ const float q (x.asFloat() * y.asFloat());
+
+ dp += q;
+ eps += floatFormat16.ulp(static_cast<double>(q), 2.0);
+ }
+
+ result = dp;
+ }
+ else if (getFlavor() == 2)
+ {
+ double dp (0.0);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(1); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const fp16type y (in[1][componentNdx]);
+ const double q (x.asDouble() * y.asDouble());
+
+ dp += q;
+ eps += floatFormat16.ulp(q, 2.0);
+ }
+
+ result = dp;
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ out[0] = fp16type(result).bits();
+ min[0] = result - eps;
+ max[0] = result + eps;
+
+ return true;
+ }
+};
+
+struct fp16VectorTimesScalar : public fp16AllComponents
+{
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 2.0;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 2);
+ DE_ASSERT(getArgCompCount(0) == getOutCompCount());
+ DE_ASSERT(getArgCompCount(1) == 1);
+
+ fp16type s (*in[1]);
+
+ for (size_t componentNdx = 0; componentNdx < getArgCompCount(0); ++componentNdx)
+ {
+ const fp16type x (in[0][componentNdx]);
+ const fp16type m (s.asDouble() * x.asDouble());
+
+ out[componentNdx] = m.bits();
+ min[componentNdx] = getMin(m.asDouble(), getULPs(in));
+ max[componentNdx] = getMax(m.asDouble(), getULPs(in));
+ }
+
+ return true;
+ }
+};
+
+struct fp16MatrixBase : public fp16AllComponents
+{
+ deUint32 getComponentValidity ()
+ {
+ return static_cast<deUint32>(-1);
+ }
+
+ inline size_t getNdx (const size_t rowCount, const size_t col, const size_t row)
+ {
+ const size_t minComponentCount = 0;
+ const size_t maxComponentCount = 3;
+ const size_t alignedRowsCount = (rowCount == 3) ? 4 : rowCount;
+
+ DE_ASSERT(de::inRange(rowCount, minComponentCount + 1, maxComponentCount + 1));
+ DE_ASSERT(de::inRange(col, minComponentCount, maxComponentCount));
+ DE_ASSERT(de::inBounds(row, minComponentCount, rowCount));
+ DE_UNREF(minComponentCount);
+ DE_UNREF(maxComponentCount);
+
+ return col * alignedRowsCount + row;
+ }
+
+ deUint32 getComponentMatrixValidityMask (size_t cols, size_t rows)
+ {
+ deUint32 result = 0u;
+
+ for (size_t rowNdx = 0; rowNdx < rows; ++rowNdx)
+ for (size_t colNdx = 0; colNdx < cols; ++colNdx)
+ {
+ const size_t bitNdx = getNdx(rows, colNdx, rowNdx);
+
+ DE_ASSERT(bitNdx < sizeof(result) * 8);
+
+ result |= (1<<bitNdx);
+ }
+
+ return result;
+ }
+};
+
+template<size_t cols, size_t rows>
+struct fp16Transpose : public fp16MatrixBase
+{
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 1.0;
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return getComponentMatrixValidityMask(rows, cols);
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 1);
+
+ const size_t alignedCols = (cols == 3) ? 4 : cols;
+ const size_t alignedRows = (rows == 3) ? 4 : rows;
+ vector<deFloat16> output (alignedCols * alignedRows, 0);
+
+ DE_ASSERT(output.size() == alignedCols * alignedRows);
+
+ for (size_t rowNdx = 0; rowNdx < rows; ++rowNdx)
+ for (size_t colNdx = 0; colNdx < cols; ++colNdx)
+ output[rowNdx * alignedCols + colNdx] = in[0][colNdx * alignedRows + rowNdx];
+
+ deMemcpy(out, &output[0], sizeof(deFloat16) * output.size());
+ deMemcpy(min, &output[0], sizeof(deFloat16) * output.size());
+ deMemcpy(max, &output[0], sizeof(deFloat16) * output.size());
+
+ return true;
+ }
+};
+
+template<size_t cols, size_t rows>
+struct fp16MatrixTimesScalar : public fp16MatrixBase
+{
+ virtual double getULPs(vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 4.0;
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return getComponentMatrixValidityMask(cols, rows);
+ }
+
+ template<class fp16type>
+ bool calc(vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 2);
+ DE_ASSERT(getArgCompCount(1) == 1);
+
+ const fp16type y (in[1][0]);
+ const float scalar (y.asFloat());
+ const size_t alignedCols = (cols == 3) ? 4 : cols;
+ const size_t alignedRows = (rows == 3) ? 4 : rows;
+
+ DE_ASSERT(getArgCompCount(0) == alignedCols * alignedRows);
+ DE_ASSERT(getOutCompCount() == alignedCols * alignedRows);
+ DE_UNREF(alignedCols);
+
+ for (size_t rowNdx = 0; rowNdx < rows; ++rowNdx)
+ for (size_t colNdx = 0; colNdx < cols; ++colNdx)
+ {
+ const size_t ndx (colNdx * alignedRows + rowNdx);
+ const fp16type x (in[0][ndx]);
+ const double result (scalar * x.asFloat());
+
+ out[ndx] = fp16type(result).bits();
+ min[ndx] = getMin(result, getULPs(in));
+ max[ndx] = getMax(result, getULPs(in));
+ }
+
+ return true;
+ }
+};
+
+template<size_t cols, size_t rows>
+struct fp16VectorTimesMatrix : public fp16MatrixBase
+{
+ fp16VectorTimesMatrix() : fp16MatrixBase()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("FloatCalc");
+ }
+
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return (8.0 * cols);
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return getComponentMatrixValidityMask(cols, 1);
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 2);
+
+ const size_t alignedCols = (cols == 3) ? 4 : cols;
+ const size_t alignedRows = (rows == 3) ? 4 : rows;
+
+ DE_ASSERT(getOutCompCount() == cols);
+ DE_ASSERT(getArgCompCount(0) == rows);
+ DE_ASSERT(getArgCompCount(1) == alignedCols * alignedRows);
+ DE_UNREF(alignedCols);
+
+ if (getFlavor() == 0)
+ {
+ for (size_t colNdx = 0; colNdx < cols; ++colNdx)
+ {
+ fp16type s (fp16type::zero(1));
+
+ for (size_t rowNdx = 0; rowNdx < rows; ++rowNdx)
+ {
+ const fp16type v (in[0][rowNdx]);
+ const float vf (v.asFloat());
+ const size_t ndx (colNdx * alignedRows + rowNdx);
+ const fp16type x (in[1][ndx]);
+ const float xf (x.asFloat());
+ const fp16type m (vf * xf);
+
+ s = fp16type(s.asFloat() + m.asFloat());
+ }
+
+ out[colNdx] = s.bits();
+ min[colNdx] = getMin(s.asDouble(), getULPs(in));
+ max[colNdx] = getMax(s.asDouble(), getULPs(in));
+ }
+ }
+ else if (getFlavor() == 1)
+ {
+ for (size_t colNdx = 0; colNdx < cols; ++colNdx)
+ {
+ float s (0.0f);
+
+ for (size_t rowNdx = 0; rowNdx < rows; ++rowNdx)
+ {
+ const fp16type v (in[0][rowNdx]);
+ const float vf (v.asFloat());
+ const size_t ndx (colNdx * alignedRows + rowNdx);
+ const fp16type x (in[1][ndx]);
+ const float xf (x.asFloat());
+ const float m (vf * xf);
+
+ s += m;
+ }
+
+ out[colNdx] = fp16type(s).bits();
+ min[colNdx] = getMin(static_cast<double>(s), getULPs(in));
+ max[colNdx] = getMax(static_cast<double>(s), getULPs(in));
+ }
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ return true;
+ }
+};
+
+template<size_t cols, size_t rows>
+struct fp16MatrixTimesVector : public fp16MatrixBase
+{
+ fp16MatrixTimesVector() : fp16MatrixBase()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("FloatCalc");
+ }
+
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return (8.0 * rows);
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return getComponentMatrixValidityMask(rows, 1);
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 2);
+
+ const size_t alignedCols = (cols == 3) ? 4 : cols;
+ const size_t alignedRows = (rows == 3) ? 4 : rows;
+
+ DE_ASSERT(getOutCompCount() == rows);
+ DE_ASSERT(getArgCompCount(0) == alignedCols * alignedRows);
+ DE_ASSERT(getArgCompCount(1) == cols);
+ DE_UNREF(alignedCols);
+
+ if (getFlavor() == 0)
+ {
+ for (size_t rowNdx = 0; rowNdx < rows; ++rowNdx)
+ {
+ fp16type s (fp16type::zero(1));
+
+ for (size_t colNdx = 0; colNdx < cols; ++colNdx)
+ {
+ const size_t ndx (colNdx * alignedRows + rowNdx);
+ const fp16type x (in[0][ndx]);
+ const float xf (x.asFloat());
+ const fp16type v (in[1][colNdx]);
+ const float vf (v.asFloat());
+ const fp16type m (vf * xf);
+
+ s = fp16type(s.asFloat() + m.asFloat());
+ }
+
+ out[rowNdx] = s.bits();
+ min[rowNdx] = getMin(s.asDouble(), getULPs(in));
+ max[rowNdx] = getMax(s.asDouble(), getULPs(in));
+ }
+ }
+ else if (getFlavor() == 1)
+ {
+ for (size_t rowNdx = 0; rowNdx < rows; ++rowNdx)
+ {
+ float s (0.0f);
+
+ for (size_t colNdx = 0; colNdx < cols; ++colNdx)
+ {
+ const size_t ndx (colNdx * alignedRows + rowNdx);
+ const fp16type x (in[0][ndx]);
+ const float xf (x.asFloat());
+ const fp16type v (in[1][colNdx]);
+ const float vf (v.asFloat());
+ const float m (vf * xf);
+
+ s += m;
+ }
+
+ out[rowNdx] = fp16type(s).bits();
+ min[rowNdx] = getMin(static_cast<double>(s), getULPs(in));
+ max[rowNdx] = getMax(static_cast<double>(s), getULPs(in));
+ }
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ return true;
+ }
+};
+
+template<size_t colsL, size_t rowsL, size_t colsR, size_t rowsR>
+struct fp16MatrixTimesMatrix : public fp16MatrixBase
+{
+ fp16MatrixTimesMatrix() : fp16MatrixBase()
+ {
+ flavorNames.push_back("EmulatingFP16");
+ flavorNames.push_back("FloatCalc");
+ }
+
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 32.0;
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return getComponentMatrixValidityMask(colsR, rowsL);
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_STATIC_ASSERT(colsL == rowsR);
+
+ DE_ASSERT(in.size() == 2);
+
+ const size_t alignedColsL = (colsL == 3) ? 4 : colsL;
+ const size_t alignedRowsL = (rowsL == 3) ? 4 : rowsL;
+ const size_t alignedColsR = (colsR == 3) ? 4 : colsR;
+ const size_t alignedRowsR = (rowsR == 3) ? 4 : rowsR;
+
+ DE_ASSERT(getOutCompCount() == alignedColsR * alignedRowsL);
+ DE_ASSERT(getArgCompCount(0) == alignedColsL * alignedRowsL);
+ DE_ASSERT(getArgCompCount(1) == alignedColsR * alignedRowsR);
+ DE_UNREF(alignedColsL);
+ DE_UNREF(alignedColsR);
+
+ if (getFlavor() == 0)
+ {
+ for (size_t rowNdx = 0; rowNdx < rowsL; ++rowNdx)
+ {
+ for (size_t colNdx = 0; colNdx < colsR; ++colNdx)
+ {
+ const size_t ndx (colNdx * alignedRowsL + rowNdx);
+ fp16type s (fp16type::zero(1));
+
+ for (size_t commonNdx = 0; commonNdx < colsL; ++commonNdx)
+ {
+ const size_t ndxl (commonNdx * alignedRowsL + rowNdx);
+ const fp16type l (in[0][ndxl]);
+ const float lf (l.asFloat());
+ const size_t ndxr (colNdx * alignedRowsR + commonNdx);
+ const fp16type r (in[1][ndxr]);
+ const float rf (r.asFloat());
+ const fp16type m (lf * rf);
+
+ s = fp16type(s.asFloat() + m.asFloat());
+ }
+
+ out[ndx] = s.bits();
+ min[ndx] = getMin(s.asDouble(), getULPs(in));
+ max[ndx] = getMax(s.asDouble(), getULPs(in));
+ }
+ }
+ }
+ else if (getFlavor() == 1)
+ {
+ for (size_t rowNdx = 0; rowNdx < rowsL; ++rowNdx)
+ {
+ for (size_t colNdx = 0; colNdx < colsR; ++colNdx)
+ {
+ const size_t ndx (colNdx * alignedRowsL + rowNdx);
+ float s (0.0f);
+
+ for (size_t commonNdx = 0; commonNdx < colsL; ++commonNdx)
+ {
+ const size_t ndxl (commonNdx * alignedRowsL + rowNdx);
+ const fp16type l (in[0][ndxl]);
+ const float lf (l.asFloat());
+ const size_t ndxr (colNdx * alignedRowsR + commonNdx);
+ const fp16type r (in[1][ndxr]);
+ const float rf (r.asFloat());
+ const float m (lf * rf);
+
+ s += m;
+ }
+
+ out[ndx] = fp16type(s).bits();
+ min[ndx] = getMin(static_cast<double>(s), getULPs(in));
+ max[ndx] = getMax(static_cast<double>(s), getULPs(in));
+ }
+ }
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Unknown flavor");
+ }
+
+ return true;
+ }
+};
+
+template<size_t cols, size_t rows>
+struct fp16OuterProduct : public fp16MatrixBase
+{
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 2.0;
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return getComponentMatrixValidityMask(cols, rows);
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ DE_ASSERT(in.size() == 2);
+
+ const size_t alignedCols = (cols == 3) ? 4 : cols;
+ const size_t alignedRows = (rows == 3) ? 4 : rows;
+
+ DE_ASSERT(getArgCompCount(0) == rows);
+ DE_ASSERT(getArgCompCount(1) == cols);
+ DE_ASSERT(getOutCompCount() == alignedCols * alignedRows);
+ DE_UNREF(alignedCols);
+
+ for (size_t rowNdx = 0; rowNdx < rows; ++rowNdx)
+ {
+ for (size_t colNdx = 0; colNdx < cols; ++colNdx)
+ {
+ const size_t ndx (colNdx * alignedRows + rowNdx);
+ const fp16type x (in[0][rowNdx]);
+ const float xf (x.asFloat());
+ const fp16type y (in[1][colNdx]);
+ const float yf (y.asFloat());
+ const fp16type m (xf * yf);
+
+ out[ndx] = m.bits();
+ min[ndx] = getMin(m.asDouble(), getULPs(in));
+ max[ndx] = getMax(m.asDouble(), getULPs(in));
+ }
+ }
+
+ return true;
+ }
+};
+
+template<size_t size>
+struct fp16Determinant;
+
+template<>
+struct fp16Determinant<2> : public fp16MatrixBase
+{
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 128.0; // This is not a precision test. Value is not from spec
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return 1;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const size_t cols = 2;
+ const size_t rows = 2;
+ const size_t alignedCols = (cols == 3) ? 4 : cols;
+ const size_t alignedRows = (rows == 3) ? 4 : rows;
+
+ DE_ASSERT(in.size() == 1);
+ DE_ASSERT(getOutCompCount() == 1);
+ DE_ASSERT(getArgCompCount(0) == alignedRows * alignedCols);
+ DE_UNREF(alignedCols);
+ DE_UNREF(alignedRows);
+
+ // [ a b ]
+ // [ c d ]
+ const float a (fp16type(in[0][getNdx(rows, 0, 0)]).asFloat());
+ const float b (fp16type(in[0][getNdx(rows, 1, 0)]).asFloat());
+ const float c (fp16type(in[0][getNdx(rows, 0, 1)]).asFloat());
+ const float d (fp16type(in[0][getNdx(rows, 1, 1)]).asFloat());
+ const float ad (a * d);
+ const fp16type adf16 (ad);
+ const float bc (b * c);
+ const fp16type bcf16 (bc);
+ const float r (adf16.asFloat() - bcf16.asFloat());
+ const fp16type rf16 (r);
+
+ out[0] = rf16.bits();
+ min[0] = getMin(r, getULPs(in));
+ max[0] = getMax(r, getULPs(in));
+
+ return true;
+ }
+};
+
+template<>
+struct fp16Determinant<3> : public fp16MatrixBase
+{
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 128.0; // This is not a precision test. Value is not from spec
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return 1;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const size_t cols = 3;
+ const size_t rows = 3;
+ const size_t alignedCols = (cols == 3) ? 4 : cols;
+ const size_t alignedRows = (rows == 3) ? 4 : rows;
+
+ DE_ASSERT(in.size() == 1);
+ DE_ASSERT(getOutCompCount() == 1);
+ DE_ASSERT(getArgCompCount(0) == alignedRows * alignedCols);
+ DE_UNREF(alignedCols);
+ DE_UNREF(alignedRows);
+
+ // [ a b c ]
+ // [ d e f ]
+ // [ g h i ]
+ const float a (fp16type(in[0][getNdx(rows, 0, 0)]).asFloat());
+ const float b (fp16type(in[0][getNdx(rows, 1, 0)]).asFloat());
+ const float c (fp16type(in[0][getNdx(rows, 2, 0)]).asFloat());
+ const float d (fp16type(in[0][getNdx(rows, 0, 1)]).asFloat());
+ const float e (fp16type(in[0][getNdx(rows, 1, 1)]).asFloat());
+ const float f (fp16type(in[0][getNdx(rows, 2, 1)]).asFloat());
+ const float g (fp16type(in[0][getNdx(rows, 0, 2)]).asFloat());
+ const float h (fp16type(in[0][getNdx(rows, 1, 2)]).asFloat());
+ const float i (fp16type(in[0][getNdx(rows, 2, 2)]).asFloat());
+ const fp16type aei (a * e * i);
+ const fp16type bfg (b * f * g);
+ const fp16type cdh (c * d * h);
+ const fp16type ceg (c * e * g);
+ const fp16type bdi (b * d * i);
+ const fp16type afh (a * f * h);
+ const float r (aei.asFloat() + bfg.asFloat() + cdh.asFloat() - ceg.asFloat() - bdi.asFloat() - afh.asFloat());
+ const fp16type rf16 (r);
+
+ out[0] = rf16.bits();
+ min[0] = getMin(r, getULPs(in));
+ max[0] = getMax(r, getULPs(in));
+
+ return true;
+ }
+};
+
+template<>
+struct fp16Determinant<4> : public fp16MatrixBase
+{
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 128.0; // This is not a precision test. Value is not from spec
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return 1;
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const size_t rows = 4;
+ const size_t cols = 4;
+ const size_t alignedCols = (cols == 3) ? 4 : cols;
+ const size_t alignedRows = (rows == 3) ? 4 : rows;
+
+ DE_ASSERT(in.size() == 1);
+ DE_ASSERT(getOutCompCount() == 1);
+ DE_ASSERT(getArgCompCount(0) == alignedRows * alignedCols);
+ DE_UNREF(alignedCols);
+ DE_UNREF(alignedRows);
+
+ // [ a b c d ]
+ // [ e f g h ]
+ // [ i j k l ]
+ // [ m n o p ]
+ const float a (fp16type(in[0][getNdx(rows, 0, 0)]).asFloat());
+ const float b (fp16type(in[0][getNdx(rows, 1, 0)]).asFloat());
+ const float c (fp16type(in[0][getNdx(rows, 2, 0)]).asFloat());
+ const float d (fp16type(in[0][getNdx(rows, 3, 0)]).asFloat());
+ const float e (fp16type(in[0][getNdx(rows, 0, 1)]).asFloat());
+ const float f (fp16type(in[0][getNdx(rows, 1, 1)]).asFloat());
+ const float g (fp16type(in[0][getNdx(rows, 2, 1)]).asFloat());
+ const float h (fp16type(in[0][getNdx(rows, 3, 1)]).asFloat());
+ const float i (fp16type(in[0][getNdx(rows, 0, 2)]).asFloat());
+ const float j (fp16type(in[0][getNdx(rows, 1, 2)]).asFloat());
+ const float k (fp16type(in[0][getNdx(rows, 2, 2)]).asFloat());
+ const float l (fp16type(in[0][getNdx(rows, 3, 2)]).asFloat());
+ const float m (fp16type(in[0][getNdx(rows, 0, 3)]).asFloat());
+ const float n (fp16type(in[0][getNdx(rows, 1, 3)]).asFloat());
+ const float o (fp16type(in[0][getNdx(rows, 2, 3)]).asFloat());
+ const float p (fp16type(in[0][getNdx(rows, 3, 3)]).asFloat());
+
+ // [ f g h ]
+ // [ j k l ]
+ // [ n o p ]
+ const fp16type fkp (f * k * p);
+ const fp16type gln (g * l * n);
+ const fp16type hjo (h * j * o);
+ const fp16type hkn (h * k * n);
+ const fp16type gjp (g * j * p);
+ const fp16type flo (f * l * o);
+ const fp16type detA (a * (fkp.asFloat() + gln.asFloat() + hjo.asFloat() - hkn.asFloat() - gjp.asFloat() - flo.asFloat()));
+
+ // [ e g h ]
+ // [ i k l ]
+ // [ m o p ]
+ const fp16type ekp (e * k * p);
+ const fp16type glm (g * l * m);
+ const fp16type hio (h * i * o);
+ const fp16type hkm (h * k * m);
+ const fp16type gip (g * i * p);
+ const fp16type elo (e * l * o);
+ const fp16type detB (b * (ekp.asFloat() + glm.asFloat() + hio.asFloat() - hkm.asFloat() - gip.asFloat() - elo.asFloat()));
+
+ // [ e f h ]
+ // [ i j l ]
+ // [ m n p ]
+ const fp16type ejp (e * j * p);
+ const fp16type flm (f * l * m);
+ const fp16type hin (h * i * n);
+ const fp16type hjm (h * j * m);
+ const fp16type fip (f * i * p);
+ const fp16type eln (e * l * n);
+ const fp16type detC (c * (ejp.asFloat() + flm.asFloat() + hin.asFloat() - hjm.asFloat() - fip.asFloat() - eln.asFloat()));
+
+ // [ e f g ]
+ // [ i j k ]
+ // [ m n o ]
+ const fp16type ejo (e * j * o);
+ const fp16type fkm (f * k * m);
+ const fp16type gin (g * i * n);
+ const fp16type gjm (g * j * m);
+ const fp16type fio (f * i * o);
+ const fp16type ekn (e * k * n);
+ const fp16type detD (d * (ejo.asFloat() + fkm.asFloat() + gin.asFloat() - gjm.asFloat() - fio.asFloat() - ekn.asFloat()));
+
+ const float r (detA.asFloat() - detB.asFloat() + detC.asFloat() - detD.asFloat());
+ const fp16type rf16 (r);
+
+ out[0] = rf16.bits();
+ min[0] = getMin(r, getULPs(in));
+ max[0] = getMax(r, getULPs(in));
+
+ return true;
+ }
+};
+
+template<size_t size>
+struct fp16Inverse;
+
+template<>
+struct fp16Inverse<2> : public fp16MatrixBase
+{
+ virtual double getULPs (vector<const deFloat16*>& in)
+ {
+ DE_UNREF(in);
+
+ return 128.0; // This is not a precision test. Value is not from spec
+ }
+
+ deUint32 getComponentValidity ()
+ {
+ return getComponentMatrixValidityMask(2, 2);
+ }
+
+ template<class fp16type>
+ bool calc (vector<const deFloat16*>& in, deFloat16* out, double* min, double* max)
+ {
+ const size_t cols = 2;
+ const size_t rows = 2;
+ const size_t alignedCols = (cols == 3) ? 4 : cols;
+ const size_t alignedRows = (rows == 3) ? 4 : rows;
+
+ DE_ASSERT(in.size() == 1);
+ DE_ASSERT(getOutCompCount() == alignedRows * alignedCols);
+ DE_ASSERT(getArgCompCount(0) == alignedRows * alignedCols);
+ DE_UNREF(alignedCols);
+
+ // [ a b ]
+ // [ c d ]
+ const float a (fp16type(in[0][getNdx(rows, 0, 0)]).asFloat());
+ const float b (fp16type(in[0][getNdx(rows, 1, 0)]).asFloat());
+ const float c (fp16type(in[0][getNdx(rows, 0, 1)]).asFloat());
+ const float d (fp16type(in[0][getNdx(rows, 1, 1)]).asFloat());
+ const float ad (a * d);
+ const fp16type adf16 (ad);
+ const float bc (b * c);
+ const fp16type bcf16 (bc);
+ const float det (adf16.asFloat() - bcf16.asFloat());
+ const fp16type det16 (det);
+
+ out[0] = fp16type( d / det16.asFloat()).bits();
+ out[1] = fp16type(-c / det16.asFloat()).bits();
+ out[2] = fp16type(-b / det16.asFloat()).bits();
+ out[3] = fp16type( a / det16.asFloat()).bits();
+
+ for (size_t rowNdx = 0; rowNdx < rows; ++rowNdx)
+ for (size_t colNdx = 0; colNdx < cols; ++colNdx)
+ {
+ const size_t ndx (colNdx * alignedRows + rowNdx);
+ const fp16type s (out[ndx]);
+
+ min[ndx] = getMin(s.asDouble(), getULPs(in));
+ max[ndx] = getMax(s.asDouble(), getULPs(in));
+ }
+
+ return true;
+ }
+};
+
+inline std::string fp16ToString(deFloat16 val)
+{
+ return tcu::toHex<4>(val).toString() + " (" + de::floatToString(tcu::Float16(val).asFloat(), 10) + ")";
+}
+
+template <size_t RES_COMPONENTS, size_t ARG0_COMPONENTS, size_t ARG1_COMPONENTS, size_t ARG2_COMPONENTS, class TestedArithmeticFunction>
+bool compareFP16ArithmeticFunc (const std::vector<Resource>& inputs, const vector<AllocationSp>& outputAllocs, const std::vector<Resource>& expectedOutputs, TestLog& log)
+{
+ if (inputs.size() < 1 || inputs.size() > 3 || outputAllocs.size() != 1 || expectedOutputs.size() != 1)
+ return false;
+
+ const size_t resultStep = (RES_COMPONENTS == 3) ? 4 : RES_COMPONENTS;
+ const size_t iterationsCount = expectedOutputs[0].getByteSize() / (sizeof(deFloat16) * resultStep);
+ const size_t inputsSteps[3] =
+ {
+ (ARG0_COMPONENTS == 3) ? 4 : ARG0_COMPONENTS,
+ (ARG1_COMPONENTS == 3) ? 4 : ARG1_COMPONENTS,
+ (ARG2_COMPONENTS == 3) ? 4 : ARG2_COMPONENTS,
+ };
+
+ DE_ASSERT(expectedOutputs[0].getByteSize() > 0);
+ DE_ASSERT(expectedOutputs[0].getByteSize() == sizeof(deFloat16) * iterationsCount * resultStep);
+
+ for (size_t inputNdx = 0; inputNdx < inputs.size(); ++inputNdx)
+ {
+ DE_ASSERT(inputs[inputNdx].getByteSize() > 0);
+ DE_ASSERT(inputs[inputNdx].getByteSize() == sizeof(deFloat16) * iterationsCount * inputsSteps[inputNdx]);
+ }
+
+ const deFloat16* const outputAsFP16 = (const deFloat16*)outputAllocs[0]->getHostPtr();
+ TestedArithmeticFunction func;
+ const bool callOncePerComponent = func.callOncePerComponent();
+ const deUint32 componentValidityMask = func.getComponentValidity();
+ const size_t denormModesCount = 2;
+ const char* denormModes[denormModesCount] = { "keep denormal numbers", "flush to zero" };
+ const size_t successfulRunsPerComponent = denormModesCount * func.getFlavorCount();
+ bool success = true;
+ size_t validatedCount = 0;
+
+ func.setOutCompCount(RES_COMPONENTS);
+ func.setArgCompCount(0, ARG0_COMPONENTS);
+ func.setArgCompCount(1, ARG1_COMPONENTS);
+ func.setArgCompCount(2, ARG2_COMPONENTS);
+
+ vector<deUint8> inputBytes[3];
+
+ for (size_t inputNdx = 0; inputNdx < inputs.size(); ++inputNdx)
+ inputs[inputNdx].getBytes(inputBytes[inputNdx]);
+
+ const deFloat16* const inputsAsFP16[3] =
+ {
+ inputs.size() >= 1 ? (const deFloat16*)&inputBytes[0][0] : DE_NULL,
+ inputs.size() >= 2 ? (const deFloat16*)&inputBytes[1][0] : DE_NULL,
+ inputs.size() >= 3 ? (const deFloat16*)&inputBytes[2][0] : DE_NULL,
+ };
+
+ for (size_t idx = 0; idx < iterationsCount; ++idx)
+ {
+ std::vector<size_t> successfulRuns (RES_COMPONENTS, successfulRunsPerComponent);
+ std::vector<std::string> errors (RES_COMPONENTS);
+ bool iterationValidated (true);
+
+ for (size_t denormNdx = 0; denormNdx < 2; ++denormNdx)
+ {
+ for (size_t flavorNdx = 0; flavorNdx < func.getFlavorCount(); ++flavorNdx)
+ {
+ func.setFlavor(flavorNdx);
+
+ const deFloat16* iterationOutputFP16 = &outputAsFP16[idx * resultStep];
+ vector<deFloat16> iterationCalculatedFP16 (resultStep, 0);
+ vector<double> iterationEdgeMin (resultStep, 0.0);
+ vector<double> iterationEdgeMax (resultStep, 0.0);
+ vector<const deFloat16*> arguments;
+
+ for (size_t componentNdx = 0; componentNdx < RES_COMPONENTS; ++componentNdx)
+ {
+ std::string error;
+ bool reportError = false;
+
+ if (callOncePerComponent || componentNdx == 0)
+ {
+ bool funcCallResult;
+
+ arguments.clear();
+
+ for (size_t inputNdx = 0; inputNdx < inputs.size(); ++inputNdx)
+ arguments.push_back(&inputsAsFP16[inputNdx][idx * inputsSteps[inputNdx] + componentNdx]);
+
+ if (denormNdx == 0)
+ funcCallResult = func.template calc<tcu::Float16>(arguments, &iterationCalculatedFP16[componentNdx], &iterationEdgeMin[componentNdx], &iterationEdgeMax[componentNdx]);
+ else
+ funcCallResult = func.template calc<tcu::Float16Denormless>(arguments, &iterationCalculatedFP16[componentNdx], &iterationEdgeMin[componentNdx], &iterationEdgeMax[componentNdx]);
+
+ if (!funcCallResult)
+ {
+ iterationValidated = false;
+
+ if (callOncePerComponent)
+ continue;
+ else
+ break;
+ }
+ }
+
+ if ((componentValidityMask != 0) && (componentValidityMask & (1<<componentNdx)) == 0)
+ continue;
+
+ reportError = !compare16BitFloat(iterationCalculatedFP16[componentNdx], iterationOutputFP16[componentNdx], error);
+
+ if (reportError)
+ {
+ tcu::Float16 expected (iterationCalculatedFP16[componentNdx]);
+ tcu::Float16 outputted (iterationOutputFP16[componentNdx]);
+
+ if (reportError && expected.isNaN())
+ reportError = false;
+
+ if (reportError && !expected.isNaN() && !outputted.isNaN())
+ {
+ if (reportError && !expected.isInf() && !outputted.isInf())
+ {
+ // Ignore rounding
+ if (expected.bits() == outputted.bits() + 1 || expected.bits() + 1 == outputted.bits())
+ reportError = false;
+ }
+
+ if (reportError)
+ {
+ const double outputtedDouble = outputted.asDouble();
+
+ DE_ASSERT(iterationEdgeMin[componentNdx] <= iterationEdgeMax[componentNdx]);
+
+ if (de::inRange(outputtedDouble, iterationEdgeMin[componentNdx], iterationEdgeMax[componentNdx]))
+ reportError = false;
+ }
+ }
+
+ if (reportError)
+ {
+ const size_t inputsComps[3] =
+ {
+ ARG0_COMPONENTS,
+ ARG1_COMPONENTS,
+ ARG2_COMPONENTS,
+ };
+ string inputsValues ("Inputs:");
+ string flavorName (func.getFlavorCount() == 1 ? "" : string(" flavor ") + de::toString(flavorNdx) + " (" + func.getCurrentFlavorName() + ")");
+ std::stringstream errStream;
+
+ for (size_t inputNdx = 0; inputNdx < inputs.size(); ++inputNdx)
+ {
+ const size_t inputCompsCount = inputsComps[inputNdx];
+
+ inputsValues += " [" + de::toString(inputNdx) + "]=(";
+
+ for (size_t compNdx = 0; compNdx < inputCompsCount; ++compNdx)
+ {
+ const deFloat16 inputComponentValue = inputsAsFP16[inputNdx][idx * inputsSteps[inputNdx] + compNdx];
+
+ inputsValues += fp16ToString(inputComponentValue) + ((compNdx + 1 == inputCompsCount) ? ")": ", ");
+ }
+ }
+
+ errStream << "At"
+ << " iteration " << de::toString(idx)
+ << " component " << de::toString(componentNdx)
+ << " denormMode " << de::toString(denormNdx)
+ << " (" << denormModes[denormNdx] << ")"
+ << " " << flavorName
+ << " " << inputsValues
+ << " outputted:" + fp16ToString(iterationOutputFP16[componentNdx])
+ << " expected:" + fp16ToString(iterationCalculatedFP16[componentNdx])
+ << " or in range: [" << iterationEdgeMin[componentNdx] << ", " << iterationEdgeMax[componentNdx] << "]."
+ << " " << error << "."
+ << std::endl;
+
+ errors[componentNdx] += errStream.str();
+
+ successfulRuns[componentNdx]--;
+ }
+ }
+ }
+ }
+ }
+
+ for (size_t componentNdx = 0; componentNdx < RES_COMPONENTS; ++componentNdx)
+ {
+ // Check if any component has total failure
+ if (successfulRuns[componentNdx] == 0)
+ {
+ // Test failed in all denorm modes and all flavors for certain component: dump errors
+ log << TestLog::Message << errors[componentNdx] << TestLog::EndMessage;
+
+ success = false;
+ }
+ }
+
+ if (iterationValidated)
+ validatedCount++;
+ }
+
+ if (validatedCount < 16)
+ TCU_THROW(InternalError, "Too few samples has been validated.");
+
+ return success;
+}
+
+// IEEE-754 floating point numbers:
+// +--------+------+----------+-------------+
+// | binary | sign | exponent | significand |
+// +--------+------+----------+-------------+
+// | 16-bit | 1 | 5 | 10 |
+// +--------+------+----------+-------------+
+// | 32-bit | 1 | 8 | 23 |
+// +--------+------+----------+-------------+
+//
+// 16-bit floats:
+//
+// 0 000 00 00 0000 0001 (0x0001: 2e-24: minimum positive denormalized)
+// 0 000 00 11 1111 1111 (0x03ff: 2e-14 - 2e-24: maximum positive denormalized)
+// 0 000 01 00 0000 0000 (0x0400: 2e-14: minimum positive normalized)
+// 0 111 10 11 1111 1111 (0x7bff: 65504: maximum positive normalized)
+//
+// 0 000 00 00 0000 0000 (0x0000: +0)
+// 0 111 11 00 0000 0000 (0x7c00: +Inf)
+// 0 000 00 11 1111 0000 (0x03f0: +Denorm)
+// 0 000 01 00 0000 0001 (0x0401: +Norm)
+// 0 111 11 00 0000 1111 (0x7c0f: +SNaN)
+// 0 111 11 11 1111 0000 (0x7ff0: +QNaN)
+// Generate and return 16-bit floats and their corresponding 32-bit values.
+//
+// The first 14 number pairs are manually picked, while the rest are randomly generated.
+// Expected count to be at least 14 (numPicks).
+vector<deFloat16> getFloat16a (de::Random& rnd, deUint32 count)
+{
+ vector<deFloat16> float16;
+
+ float16.reserve(count);
+
+ // Zero
+ float16.push_back(deUint16(0x0000));
+ float16.push_back(deUint16(0x8000));
+ // Infinity
+ float16.push_back(deUint16(0x7c00));
+ float16.push_back(deUint16(0xfc00));
+ // Normalized
+ float16.push_back(deUint16(0x0401));
+ float16.push_back(deUint16(0x8401));
+ // Some normal number
+ float16.push_back(deUint16(0x14cb));
+ float16.push_back(deUint16(0x94cb));
+ // Min/max positive normal
+ float16.push_back(deUint16(0x0400));
+ float16.push_back(deUint16(0x7bff));
+ // Min/max negative normal
+ float16.push_back(deUint16(0x8400));
+ float16.push_back(deUint16(0xfbff));
+ // PI
+ float16.push_back(deUint16(0x4248)); // 3.140625
+ float16.push_back(deUint16(0xb248)); // -3.140625
+ // PI/2
+ float16.push_back(deUint16(0x3e48)); // 1.5703125
+ float16.push_back(deUint16(0xbe48)); // -1.5703125
+ float16.push_back(deUint16(0x3c00)); // 1.0
+ float16.push_back(deUint16(0x3800)); // 0.5
+ // Some useful constants
+ float16.push_back(tcu::Float16(-2.5f).bits());
+ float16.push_back(tcu::Float16(-1.0f).bits());
+ float16.push_back(tcu::Float16( 0.4f).bits());
+ float16.push_back(tcu::Float16( 2.5f).bits());
+
+ const deUint32 numPicks = static_cast<deUint32>(float16.size());
+
+ DE_ASSERT(count >= numPicks);
+ count -= numPicks;
+
+ for (deUint32 numIdx = 0; numIdx < count; ++numIdx)
+ {
+ int sign = (rnd.getUint16() % 2 == 0) ? +1 : -1;
+ int exponent = (rnd.getUint16() % 29) - 14 + 1;
+ deUint16 mantissa = static_cast<deUint16>(2 * (rnd.getUint16() % 512));
+
+ // Exclude power of -14 to avoid denorms
+ DE_ASSERT(de::inRange(exponent, -13, 15));
+
+ float16.push_back(tcu::Float16::constructBits(sign, exponent, mantissa).bits());
+ }
+
+ return float16;
+}
+
+static inline vector<deFloat16> getInputData1 (deUint32 seed, size_t count, size_t argNo)
+{
+ DE_UNREF(argNo);
+
+ de::Random rnd(seed);
+
+ return getFloat16a(rnd, static_cast<deUint32>(count));
+}
+
+static inline vector<deFloat16> getInputData2 (deUint32 seed, size_t count, size_t argNo)
+{
+ de::Random rnd (seed);
+ size_t newCount = static_cast<size_t>(deSqrt(double(count)));
+
+ DE_ASSERT(newCount * newCount == count);
+
+ vector<deFloat16> float16 = getFloat16a(rnd, static_cast<deUint32>(newCount));
+
+ return squarize(float16, static_cast<deUint32>(argNo));
+}
+
+static inline vector<deFloat16> getInputData3 (deUint32 seed, size_t count, size_t argNo)
+{
+ if (argNo == 0 || argNo == 1)
+ return getInputData2(seed, count, argNo);
+ else
+ return getInputData1(seed<<argNo, count, argNo);
+}
+
+vector<deFloat16> getInputData (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ DE_UNREF(stride);
+
+ vector<deFloat16> result;
+
+ switch (argCount)
+ {
+ case 1:result = getInputData1(seed, count, argNo); break;
+ case 2:result = getInputData2(seed, count, argNo); break;
+ case 3:result = getInputData3(seed, count, argNo); break;
+ default: TCU_THROW(InternalError, "Invalid argument count specified");
+ }
+
+ if (compCount == 3)
+ {
+ const size_t newCount = (3 * count) / 4;
+ vector<deFloat16> newResult;
+
+ newResult.reserve(result.size());
+
+ for (size_t ndx = 0; ndx < newCount; ++ndx)
+ {
+ newResult.push_back(result[ndx]);
+
+ if (ndx % 3 == 2)
+ newResult.push_back(0);
+ }
+
+ result = newResult;
+ }
+
+ DE_ASSERT(result.size() == count);
+
+ return result;
+}
+
+// Generator for functions requiring data in range [1, inf]
+vector<deFloat16> getInputDataAC (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ vector<deFloat16> result;
+
+ result = getInputData(seed, count, compCount, stride, argCount, argNo);
+
+ // Filter out values below 1.0 from upper half of numbers
+ for (size_t idx = result.size() / 2; idx < result.size(); ++idx)
+ {
+ const float f = tcu::Float16(result[idx]).asFloat();
+
+ if (f < 1.0f)
+ result[idx] = tcu::Float16(1.0f - f).bits();
+ }
+
+ return result;
+}
+
+// Generator for functions requiring data in range [-1, 1]
+vector<deFloat16> getInputDataA (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ vector<deFloat16> result;
+
+ result = getInputData(seed, count, compCount, stride, argCount, argNo);
+
+ for (size_t idx = result.size() / 2; idx < result.size(); ++idx)
+ {
+ const float f = tcu::Float16(result[idx]).asFloat();
+
+ if (!de::inRange(f, -1.0f, 1.0f))
+ result[idx] = tcu::Float16(deFloatFrac(f)).bits();
+ }
+
+ return result;
+}
+
+// Generator for functions requiring data in range [-pi, pi]
+vector<deFloat16> getInputDataPI (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ vector<deFloat16> result;
+
+ result = getInputData(seed, count, compCount, stride, argCount, argNo);
+
+ for (size_t idx = result.size() / 2; idx < result.size(); ++idx)
+ {
+ const float f = tcu::Float16(result[idx]).asFloat();
+
+ if (!de::inRange(f, -DE_PI, DE_PI))
+ result[idx] = tcu::Float16(fmodf(f, DE_PI)).bits();
+ }
+
+ return result;
+}
+
+// Generator for functions requiring data in range [0, inf]
+vector<deFloat16> getInputDataP (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ vector<deFloat16> result;
+
+ result = getInputData(seed, count, compCount, stride, argCount, argNo);
+
+ if (argNo == 0)
+ {
+ for (size_t idx = result.size() / 2; idx < result.size(); ++idx)
+ result[idx] &= static_cast<deFloat16>(~0x8000);
+ }
+
+ return result;
+}
+
+vector<deFloat16> getInputDataV (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ DE_UNREF(stride);
+ DE_UNREF(argCount);
+
+ vector<deFloat16> result;
+
+ if (argNo == 0)
+ result = getInputData2(seed, count, argNo);
+ else
+ {
+ const size_t alignedCount = (compCount == 3) ? 4 : compCount;
+ const size_t newCountX = static_cast<size_t>(deSqrt(double(count * alignedCount)));
+ const size_t newCountY = count / newCountX;
+ de::Random rnd (seed);
+ vector<deFloat16> float16 = getFloat16a(rnd, static_cast<deUint32>(newCountX));
+
+ DE_ASSERT(newCountX * newCountX == alignedCount * count);
+
+ for (size_t numIdx = 0; numIdx < newCountX; ++numIdx)
+ {
+ const vector<deFloat16> tmp(newCountY, float16[numIdx]);
+
+ result.insert(result.end(), tmp.begin(), tmp.end());
+ }
+ }
+
+ DE_ASSERT(result.size() == count);
+
+ return result;
+}
+
+vector<deFloat16> getInputDataM (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ DE_UNREF(compCount);
+ DE_UNREF(stride);
+ DE_UNREF(argCount);
+
+ de::Random rnd (seed << argNo);
+ vector<deFloat16> result;
+
+ result = getFloat16a(rnd, static_cast<deUint32>(count));
+
+ DE_ASSERT(result.size() == count);
+
+ return result;
+}
+
+vector<deFloat16> getInputDataD (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ DE_UNREF(compCount);
+ DE_UNREF(argCount);
+
+ de::Random rnd (seed << argNo);
+ vector<deFloat16> result;
+
+ for (deUint32 numIdx = 0; numIdx < count; ++numIdx)
+ {
+ int num = (rnd.getUint16() % 16) - 8;
+
+ result.push_back(tcu::Float16(float(num)).bits());
+ }
+
+ result[0 * stride] = deUint16(0x7c00); // +Inf
+ result[1 * stride] = deUint16(0xfc00); // -Inf
+
+ DE_ASSERT(result.size() == count);
+
+ return result;
+}
+
+// Generator for smoothstep function
+vector<deFloat16> getInputDataSS (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ vector<deFloat16> result;
+
+ result = getInputDataD(seed, count, compCount, stride, argCount, argNo);
+
+ if (argNo == 0)
+ {
+ for (size_t idx = result.size() / 2; idx < result.size(); ++idx)
+ {
+ const float f = tcu::Float16(result[idx]).asFloat();
+
+ if (f > 4.0f)
+ result[idx] = tcu::Float16(-f).bits();
+ }
+ }
+
+ if (argNo == 1)
+ {
+ for (size_t idx = result.size() / 2; idx < result.size(); ++idx)
+ {
+ const float f = tcu::Float16(result[idx]).asFloat();
+
+ if (f < 4.0f)
+ result[idx] = tcu::Float16(-f).bits();
+ }
+ }
+
+ return result;
+}
+
+// Generates normalized vectors for arguments 0 and 1
+vector<deFloat16> getInputDataN (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ DE_UNREF(compCount);
+ DE_UNREF(argCount);
+
+ de::Random rnd (seed << argNo);
+ vector<deFloat16> result;
+
+ if (argNo == 0 || argNo == 1)
+ {
+ // The input parameters for the incident vector I and the surface normal N must already be normalized
+ for (size_t numIdx = 0; numIdx < count; numIdx += stride)
+ {
+ vector <float> unnormolized;
+ float sum = 0;
- // Maximum int8 value
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_8, 0x42FE0000, true, 127, "max"));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_8, 0x405FC00000000000ull, true, 127, "max"));
+ for (size_t compIdx = 0; compIdx < compCount; ++compIdx)
+ unnormolized.push_back(float((rnd.getUint16() % 16) - 8));
- // +0
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_8, 0x00000000, true, 0, "p0"));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_8, 0x0000000000000000ull, true, 0, "p0"));
+ for (size_t compIdx = 0; compIdx < compCount; ++compIdx)
+ sum += unnormolized[compIdx] * unnormolized[compIdx];
- // -0
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_8, 0x80000000, true, 0, "m0"));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_8, 0x8000000000000000ull, true, 0, "m0"));
+ sum = deFloatSqrt(sum);
+ if (sum == 0.0f)
+ unnormolized[0] = sum = 1.0f;
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_16, 0xc49a4000, true, -1234));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_32, 0xc49a4000, true, -1234));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_32, DATA_TYPE_SIGNED_64, 0xc49a4000, true, -1234));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_16, 0xc093480000000000, true, -1234));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_32, 0xc093480000000000, true, -1234));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_FLOAT_64, DATA_TYPE_SIGNED_64, 0xc093480000000000, true, -1234));
+ for (size_t compIdx = 0; compIdx < compCount; ++compIdx)
+ result.push_back(tcu::Float16(unnormolized[compIdx] / sum).bits());
+
+ for (size_t compIdx = compCount; compIdx < stride; ++compIdx)
+ result.push_back(0);
+ }
}
- else if (instruction == "OpConvertSToF")
+ else
{
- // Normal numbers from int8 range
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_32, -21, true, 0xC1A80000, "m21"));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_64, -99, true, 0xC058C00000000000ull, "m99"));
+ // Input parameter eta
+ for (deUint32 numIdx = 0; numIdx < count; ++numIdx)
+ {
+ int num = (rnd.getUint16() % 16) - 8;
- // Minimum int8 value
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_32, -128, true, 0xC3000000, "min"));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_64, -128, true, 0xC060000000000000ull, "min"));
+ result.push_back(tcu::Float16(float(num)).bits());
+ }
+ }
- // Maximum int8 value
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_32, 127, true, 0x42FE0000, "max"));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_8, DATA_TYPE_FLOAT_64, 127, true, 0x405FC00000000000ull, "max"));
+ DE_ASSERT(result.size() == count);
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_16, DATA_TYPE_FLOAT_32, -1234, true, 0xc49a4000));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_16, DATA_TYPE_FLOAT_64, -1234, true, 0xc093480000000000));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_32, DATA_TYPE_FLOAT_32, -1234, true, 0xc49a4000));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_32, DATA_TYPE_FLOAT_64, -1234, true, 0xc093480000000000));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_64, DATA_TYPE_FLOAT_32, -1234, true, 0xc49a4000));
- testCases.push_back(ConvertCase(instruction, DATA_TYPE_SIGNED_64, DATA_TYPE_FLOAT_64, -1234, true, 0xc093480000000000));
+ return result;
+}
+
+// Data generator for complex matrix functions like determinant and inverse
+vector<deFloat16> getInputDataC (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo)
+{
+ DE_UNREF(compCount);
+ DE_UNREF(stride);
+ DE_UNREF(argCount);
+
+ de::Random rnd (seed << argNo);
+ vector<deFloat16> result;
+
+ for (deUint32 numIdx = 0; numIdx < count; ++numIdx)
+ {
+ int num = (rnd.getUint16() % 16) - 8;
+
+ result.push_back(tcu::Float16(float(num)).bits());
}
- else
- DE_FATAL("Unknown instruction");
+
+ DE_ASSERT(result.size() == count);
+
+ return result;
}
-const map<string, string> getConvertCaseFragments (string instruction, const ConvertCase& convertCase)
+struct Math16TestType
{
- map<string, string> params = convertCase.m_asmTypes;
- map<string, string> fragments;
+ const char* typePrefix;
+ const size_t typeComponents;
+ const size_t typeArrayStride;
+ const size_t typeStructStride;
+};
- params["instruction"] = instruction;
- params["inDecorator"] = getByteWidthStr(convertCase.m_fromType);
+enum Math16DataTypes
+{
+ NONE = 0,
+ SCALAR = 1,
+ VEC2 = 2,
+ VEC3 = 3,
+ VEC4 = 4,
+ MAT2X2,
+ MAT2X3,
+ MAT2X4,
+ MAT3X2,
+ MAT3X3,
+ MAT3X4,
+ MAT4X2,
+ MAT4X3,
+ MAT4X4,
+ MATH16_TYPE_LAST
+};
- const StringTemplate decoration (
- " OpDecorate %SSBOi DescriptorSet 0\n"
- " OpDecorate %SSBOo DescriptorSet 0\n"
- " OpDecorate %SSBOi Binding 0\n"
- " OpDecorate %SSBOo Binding 1\n"
- " OpDecorate %s_SSBOi Block\n"
- " OpDecorate %s_SSBOo Block\n"
- "OpMemberDecorate %s_SSBOi 0 Offset 0\n"
- "OpMemberDecorate %s_SSBOo 0 Offset 0\n");
+struct Math16ArgFragments
+{
+ const char* bodies;
+ const char* variables;
+ const char* decorations;
+ const char* funcVariables;
+};
- const StringTemplate pre_main (
- "${datatype_additional_decl:opt}"
- " %ptr_in = OpTypePointer StorageBuffer %${inputType}\n"
- " %ptr_out = OpTypePointer StorageBuffer %${outputType}\n"
- " %s_SSBOi = OpTypeStruct %${inputType}\n"
- " %s_SSBOo = OpTypeStruct %${outputType}\n"
- " %ptr_SSBOi = OpTypePointer StorageBuffer %s_SSBOi\n"
- " %ptr_SSBOo = OpTypePointer StorageBuffer %s_SSBOo\n"
- " %SSBOi = OpVariable %ptr_SSBOi StorageBuffer\n"
- " %SSBOo = OpVariable %ptr_SSBOo StorageBuffer\n");
+typedef vector<deFloat16> Math16GetInputData (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo);
- const StringTemplate testfun (
+struct Math16TestFunc
+{
+ const char* funcName;
+ const char* funcSuffix;
+ size_t funcArgsCount;
+ size_t typeResult;
+ size_t typeArg0;
+ size_t typeArg1;
+ size_t typeArg2;
+ Math16GetInputData* getInputDataFunc;
+ VerifyIOFunc verifyFunc;
+};
+
+template<class SpecResource>
+void createFloat16ArithmeticFuncTest (tcu::TestContext& testCtx, tcu::TestCaseGroup& testGroup, const size_t testTypeIdx, const Math16TestFunc& testFunc)
+{
+ const int testSpecificSeed = deStringHash(testGroup.getName());
+ const int seed = testCtx.getCommandLine().getBaseSeed() ^ testSpecificSeed;
+ const size_t numDataPointsByAxis = 32;
+ const size_t numDataPoints = numDataPointsByAxis * numDataPointsByAxis;
+ const char* componentType = "f16";
+ const Math16TestType testTypes[MATH16_TYPE_LAST] =
+ {
+ { "", 0, 0, 0, },
+ { "", 1, 1 * sizeof(deFloat16), 2 * sizeof(deFloat16) },
+ { "v2", 2, 2 * sizeof(deFloat16), 2 * sizeof(deFloat16) },
+ { "v3", 3, 4 * sizeof(deFloat16), 4 * sizeof(deFloat16) },
+ { "v4", 4, 4 * sizeof(deFloat16), 4 * sizeof(deFloat16) },
+ { "m2x2", 0, 4 * sizeof(deFloat16), 4 * sizeof(deFloat16) },
+ { "m2x3", 0, 8 * sizeof(deFloat16), 8 * sizeof(deFloat16) },
+ { "m2x4", 0, 8 * sizeof(deFloat16), 8 * sizeof(deFloat16) },
+ { "m3x2", 0, 8 * sizeof(deFloat16), 8 * sizeof(deFloat16) },
+ { "m3x3", 0, 16 * sizeof(deFloat16), 16 * sizeof(deFloat16) },
+ { "m3x4", 0, 16 * sizeof(deFloat16), 16 * sizeof(deFloat16) },
+ { "m4x2", 0, 8 * sizeof(deFloat16), 8 * sizeof(deFloat16) },
+ { "m4x3", 0, 16 * sizeof(deFloat16), 16 * sizeof(deFloat16) },
+ { "m4x4", 0, 16 * sizeof(deFloat16), 16 * sizeof(deFloat16) },
+ };
+
+ DE_ASSERT(testTypeIdx == testTypes[testTypeIdx].typeComponents);
+
+
+ const StringTemplate preMain
+ (
+ " %c_i32_ndp = OpConstant %i32 ${num_data_points}\n"
+
+ " %f16 = OpTypeFloat 16\n"
+ " %v2f16 = OpTypeVector %f16 2\n"
+ " %v3f16 = OpTypeVector %f16 3\n"
+ " %v4f16 = OpTypeVector %f16 4\n"
+ " %m2x2f16 = OpTypeMatrix %v2f16 2\n"
+ " %m2x3f16 = OpTypeMatrix %v3f16 2\n"
+ " %m2x4f16 = OpTypeMatrix %v4f16 2\n"
+ " %m3x2f16 = OpTypeMatrix %v2f16 3\n"
+ " %m3x3f16 = OpTypeMatrix %v3f16 3\n"
+ " %m3x4f16 = OpTypeMatrix %v4f16 3\n"
+ " %m4x2f16 = OpTypeMatrix %v2f16 4\n"
+ " %m4x3f16 = OpTypeMatrix %v3f16 4\n"
+ " %m4x4f16 = OpTypeMatrix %v4f16 4\n"
+
+ " %up_f16 = OpTypePointer Uniform %f16 \n"
+ " %up_v2f16 = OpTypePointer Uniform %v2f16 \n"
+ " %up_v3f16 = OpTypePointer Uniform %v3f16 \n"
+ " %up_v4f16 = OpTypePointer Uniform %v4f16 \n"
+ " %up_m2x2f16 = OpTypePointer Uniform %m2x2f16\n"
+ " %up_m2x3f16 = OpTypePointer Uniform %m2x3f16\n"
+ " %up_m2x4f16 = OpTypePointer Uniform %m2x4f16\n"
+ " %up_m3x2f16 = OpTypePointer Uniform %m3x2f16\n"
+ " %up_m3x3f16 = OpTypePointer Uniform %m3x3f16\n"
+ " %up_m3x4f16 = OpTypePointer Uniform %m3x4f16\n"
+ " %up_m4x2f16 = OpTypePointer Uniform %m4x2f16\n"
+ " %up_m4x3f16 = OpTypePointer Uniform %m4x3f16\n"
+ " %up_m4x4f16 = OpTypePointer Uniform %m4x4f16\n"
+
+ " %ra_f16 = OpTypeArray %f16 %c_i32_ndp\n"
+ " %ra_v2f16 = OpTypeArray %v2f16 %c_i32_ndp\n"
+ " %ra_v3f16 = OpTypeArray %v3f16 %c_i32_ndp\n"
+ " %ra_v4f16 = OpTypeArray %v4f16 %c_i32_ndp\n"
+ " %ra_m2x2f16 = OpTypeArray %m2x2f16 %c_i32_ndp\n"
+ " %ra_m2x3f16 = OpTypeArray %m2x3f16 %c_i32_ndp\n"
+ " %ra_m2x4f16 = OpTypeArray %m2x4f16 %c_i32_ndp\n"
+ " %ra_m3x2f16 = OpTypeArray %m3x2f16 %c_i32_ndp\n"
+ " %ra_m3x3f16 = OpTypeArray %m3x3f16 %c_i32_ndp\n"
+ " %ra_m3x4f16 = OpTypeArray %m3x4f16 %c_i32_ndp\n"
+ " %ra_m4x2f16 = OpTypeArray %m4x2f16 %c_i32_ndp\n"
+ " %ra_m4x3f16 = OpTypeArray %m4x3f16 %c_i32_ndp\n"
+ " %ra_m4x4f16 = OpTypeArray %m4x4f16 %c_i32_ndp\n"
+
+ " %SSBO_f16 = OpTypeStruct %ra_f16 \n"
+ " %SSBO_v2f16 = OpTypeStruct %ra_v2f16 \n"
+ " %SSBO_v3f16 = OpTypeStruct %ra_v3f16 \n"
+ " %SSBO_v4f16 = OpTypeStruct %ra_v4f16 \n"
+ " %SSBO_m2x2f16 = OpTypeStruct %ra_m2x2f16\n"
+ " %SSBO_m2x3f16 = OpTypeStruct %ra_m2x3f16\n"
+ " %SSBO_m2x4f16 = OpTypeStruct %ra_m2x4f16\n"
+ " %SSBO_m3x2f16 = OpTypeStruct %ra_m3x2f16\n"
+ " %SSBO_m3x3f16 = OpTypeStruct %ra_m3x3f16\n"
+ " %SSBO_m3x4f16 = OpTypeStruct %ra_m3x4f16\n"
+ " %SSBO_m4x2f16 = OpTypeStruct %ra_m4x2f16\n"
+ " %SSBO_m4x3f16 = OpTypeStruct %ra_m4x3f16\n"
+ " %SSBO_m4x4f16 = OpTypeStruct %ra_m4x4f16\n"
+
+ "%up_SSBO_f16 = OpTypePointer Uniform %SSBO_f16 \n"
+ "%up_SSBO_v2f16 = OpTypePointer Uniform %SSBO_v2f16 \n"
+ "%up_SSBO_v3f16 = OpTypePointer Uniform %SSBO_v3f16 \n"
+ "%up_SSBO_v4f16 = OpTypePointer Uniform %SSBO_v4f16 \n"
+ "%up_SSBO_m2x2f16 = OpTypePointer Uniform %SSBO_m2x2f16\n"
+ "%up_SSBO_m2x3f16 = OpTypePointer Uniform %SSBO_m2x3f16\n"
+ "%up_SSBO_m2x4f16 = OpTypePointer Uniform %SSBO_m2x4f16\n"
+ "%up_SSBO_m3x2f16 = OpTypePointer Uniform %SSBO_m3x2f16\n"
+ "%up_SSBO_m3x3f16 = OpTypePointer Uniform %SSBO_m3x3f16\n"
+ "%up_SSBO_m3x4f16 = OpTypePointer Uniform %SSBO_m3x4f16\n"
+ "%up_SSBO_m4x2f16 = OpTypePointer Uniform %SSBO_m4x2f16\n"
+ "%up_SSBO_m4x3f16 = OpTypePointer Uniform %SSBO_m4x3f16\n"
+ "%up_SSBO_m4x4f16 = OpTypePointer Uniform %SSBO_m4x4f16\n"
+
+ " %fp_v2i32 = OpTypePointer Function %v2i32\n"
+ " %fp_v3i32 = OpTypePointer Function %v3i32\n"
+ " %fp_v4i32 = OpTypePointer Function %v4i32\n"
+ "${arg_vars}"
+ );
+
+ const StringTemplate decoration
+ (
+ "OpDecorate %ra_f16 ArrayStride 2 \n"
+ "OpDecorate %ra_v2f16 ArrayStride 4 \n"
+ "OpDecorate %ra_v3f16 ArrayStride 8 \n"
+ "OpDecorate %ra_v4f16 ArrayStride 8 \n"
+ "OpDecorate %ra_m2x2f16 ArrayStride 8 \n"
+ "OpDecorate %ra_m2x3f16 ArrayStride 16\n"
+ "OpDecorate %ra_m2x4f16 ArrayStride 16\n"
+ "OpDecorate %ra_m3x2f16 ArrayStride 16\n"
+ "OpDecorate %ra_m3x3f16 ArrayStride 32\n"
+ "OpDecorate %ra_m3x4f16 ArrayStride 32\n"
+ "OpDecorate %ra_m4x2f16 ArrayStride 16\n"
+ "OpDecorate %ra_m4x3f16 ArrayStride 32\n"
+ "OpDecorate %ra_m4x4f16 ArrayStride 32\n"
+
+ "OpMemberDecorate %SSBO_f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_v2f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_v3f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_v4f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_m2x2f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_m2x3f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_m2x4f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_m3x2f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_m3x3f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_m3x4f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_m4x2f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_m4x3f16 0 Offset 0\n"
+ "OpMemberDecorate %SSBO_m4x4f16 0 Offset 0\n"
+
+ "OpDecorate %SSBO_f16 BufferBlock\n"
+ "OpDecorate %SSBO_v2f16 BufferBlock\n"
+ "OpDecorate %SSBO_v3f16 BufferBlock\n"
+ "OpDecorate %SSBO_v4f16 BufferBlock\n"
+ "OpDecorate %SSBO_m2x2f16 BufferBlock\n"
+ "OpDecorate %SSBO_m2x3f16 BufferBlock\n"
+ "OpDecorate %SSBO_m2x4f16 BufferBlock\n"
+ "OpDecorate %SSBO_m3x2f16 BufferBlock\n"
+ "OpDecorate %SSBO_m3x3f16 BufferBlock\n"
+ "OpDecorate %SSBO_m3x4f16 BufferBlock\n"
+ "OpDecorate %SSBO_m4x2f16 BufferBlock\n"
+ "OpDecorate %SSBO_m4x3f16 BufferBlock\n"
+ "OpDecorate %SSBO_m4x4f16 BufferBlock\n"
+
+ "OpMemberDecorate %SSBO_m2x2f16 0 ColMajor\n"
+ "OpMemberDecorate %SSBO_m2x3f16 0 ColMajor\n"
+ "OpMemberDecorate %SSBO_m2x4f16 0 ColMajor\n"
+ "OpMemberDecorate %SSBO_m3x2f16 0 ColMajor\n"
+ "OpMemberDecorate %SSBO_m3x3f16 0 ColMajor\n"
+ "OpMemberDecorate %SSBO_m3x4f16 0 ColMajor\n"
+ "OpMemberDecorate %SSBO_m4x2f16 0 ColMajor\n"
+ "OpMemberDecorate %SSBO_m4x3f16 0 ColMajor\n"
+ "OpMemberDecorate %SSBO_m4x4f16 0 ColMajor\n"
+
+ "OpMemberDecorate %SSBO_m2x2f16 0 MatrixStride 4\n"
+ "OpMemberDecorate %SSBO_m2x3f16 0 MatrixStride 8\n"
+ "OpMemberDecorate %SSBO_m2x4f16 0 MatrixStride 8\n"
+ "OpMemberDecorate %SSBO_m3x2f16 0 MatrixStride 4\n"
+ "OpMemberDecorate %SSBO_m3x3f16 0 MatrixStride 8\n"
+ "OpMemberDecorate %SSBO_m3x4f16 0 MatrixStride 8\n"
+ "OpMemberDecorate %SSBO_m4x2f16 0 MatrixStride 4\n"
+ "OpMemberDecorate %SSBO_m4x3f16 0 MatrixStride 8\n"
+ "OpMemberDecorate %SSBO_m4x4f16 0 MatrixStride 8\n"
+
+ "${arg_decorations}"
+ );
+
+ const StringTemplate testFun
+ (
"%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
- "%param = OpFunctionParameter %v4f32\n"
- "%label = OpLabel\n"
- "%iLoc = OpAccessChain %ptr_in %SSBOi %c_u32_0\n"
- "%oLoc = OpAccessChain %ptr_out %SSBOo %c_u32_0\n"
- "%valIn = OpLoad %${inputType} %iLoc\n"
- "%valOut = ${instruction} %${outputType} %valIn\n"
- " OpStore %oLoc %valOut\n"
+ " %param = OpFunctionParameter %v4f32\n"
+ " %entry = OpLabel\n"
+
+ " %i = OpVariable %fp_i32 Function\n"
+ "${arg_infunc_vars}"
+ " OpStore %i %c_i32_0\n"
+ " OpBranch %loop\n"
+
+ " %loop = OpLabel\n"
+ " %i_cmp = OpLoad %i32 %i\n"
+ " %lt = OpSLessThan %bool %i_cmp %c_i32_ndp\n"
+ " OpLoopMerge %merge %next None\n"
+ " OpBranchConditional %lt %write %merge\n"
+
+ " %write = OpLabel\n"
+ " %ndx = OpLoad %i32 %i\n"
+
+ "${arg_func_call}"
+
+ " OpBranch %next\n"
+
+ " %next = OpLabel\n"
+ " %i_cur = OpLoad %i32 %i\n"
+ " %i_new = OpIAdd %i32 %i_cur %c_i32_1\n"
+ " OpStore %i %i_new\n"
+ " OpBranch %loop\n"
+
+ " %merge = OpLabel\n"
" OpReturnValue %param\n"
- " OpFunctionEnd\n");
+ " OpFunctionEnd\n"
+ );
- params["datatype_extensions"] =
- params["datatype_extensions"] +
- "OpExtension \"SPV_KHR_storage_buffer_storage_class\"\n";
+ const Math16ArgFragments argFragment1 =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %val_dst = ${op} %${tr} ${ext_inst} %val_src0\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
+ "",
+ "",
+ "",
+ };
- fragments["capability"] = params["datatype_capabilities"];
- fragments["extension"] = params["datatype_extensions"];
- fragments["decoration"] = decoration.specialize(params);
- fragments["pre_main"] = pre_main.specialize(params);
- fragments["testfun"] = testfun.specialize(params);
+ const Math16ArgFragments argFragment2 =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %src1 = OpAccessChain %up_${t1} %ssbo_src1 %c_i32_0 %ndx\n"
+ " %val_src1 = OpLoad %${t1} %src1\n"
+ " %val_dst = ${op} %${tr} ${ext_inst} %val_src0 %val_src1\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
+ "",
+ "",
+ "",
+ };
- return fragments;
-}
+ const Math16ArgFragments argFragment3 =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %src1 = OpAccessChain %up_${t1} %ssbo_src1 %c_i32_0 %ndx\n"
+ " %val_src1 = OpLoad %${t1} %src1\n"
+ " %src2 = OpAccessChain %up_${t2} %ssbo_src2 %c_i32_0 %ndx\n"
+ " %val_src2 = OpLoad %${t2} %src2\n"
+ " %val_dst = ${op} %${tr} ${ext_inst} %val_src0 %val_src1 %val_src2\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
+ "",
+ "",
+ "",
+ };
-// Test for OpSConvert, OpUConvert, OpFConvert and OpConvert* in compute shaders
-tcu::TestCaseGroup* createConvertComputeTests (tcu::TestContext& testCtx, const string& instruction, const string& name)
-{
- de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, name.c_str(), instruction.c_str()));
- vector<ConvertCase> testCases;
+ const Math16ArgFragments argFragmentLdExp =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %src1 = OpAccessChain %up_${t1} %ssbo_src1 %c_i32_0 %ndx\n"
+ " %val_src1 = OpLoad %${t1} %src1\n"
+ "%val_src1i = OpConvertFToS %${dr}i32 %val_src1\n"
+ " %val_dst = ${op} %${tr} ${ext_inst} %val_src0 %val_src1i\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
- createConvertCases(testCases, instruction);
+ "",
- for (vector<ConvertCase>::const_iterator test = testCases.begin(); test != testCases.end(); ++test)
+ "",
+
+ "",
+ };
+
+ const Math16ArgFragments argFragmentModfFrac =
{
- ComputeShaderSpec spec;
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %val_dst = ${op} %${tr} ${ext_inst} %val_src0 %tmp\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
- spec.assembly = getConvertCaseShaderStr(instruction, *test);
- spec.numWorkGroups = IVec3(1, 1, 1);
- spec.inputs.push_back (test->m_inputBuffer);
- spec.outputs.push_back (test->m_outputBuffer);
+ " %fp_tmp = OpTypePointer Function %${tr}\n",
- getVulkanFeaturesAndExtensions(test->m_fromType, test->m_toType, spec.requestedVulkanFeatures, spec.extensions);
+ "",
- group->addChild(new SpvAsmComputeShaderCase(testCtx, test->m_name.c_str(), "", spec));
+ " %tmp = OpVariable %fp_tmp Function\n",
+ };
+
+ const Math16ArgFragments argFragmentModfInt =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ "%val_dummy = ${op} %${tr} ${ext_inst} %val_src0 %tmp\n"
+ " %tmp0 = OpAccessChain %fp_tmp %tmp\n"
+ " %val_dst = OpLoad %${tr} %tmp0\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
+
+ " %fp_tmp = OpTypePointer Function %${tr}\n",
+
+ "",
+
+ " %tmp = OpVariable %fp_tmp Function\n",
+ };
+
+ const Math16ArgFragments argFragmentModfStruct =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %val_tmp = ${op} %st_tmp ${ext_inst} %val_src0\n"
+ "%tmp_ptr_s = OpAccessChain %fp_tmp %tmp\n"
+ " OpStore %tmp_ptr_s %val_tmp\n"
+ "%tmp_ptr_l = OpAccessChain %fp_${tr} %tmp %c_${struct_member}\n"
+ " %val_dst = OpLoad %${tr} %tmp_ptr_l\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
+
+ " %fp_${tr} = OpTypePointer Function %${tr}\n"
+ " %st_tmp = OpTypeStruct %${tr} %${tr}\n"
+ " %fp_tmp = OpTypePointer Function %st_tmp\n"
+ " %c_frac = OpConstant %i32 0\n"
+ " %c_int = OpConstant %i32 1\n",
+
+ "OpMemberDecorate %st_tmp 0 Offset 0\n"
+ "OpMemberDecorate %st_tmp 1 Offset ${struct_stride}\n",
+
+ " %tmp = OpVariable %fp_tmp Function\n",
+ };
+
+ const Math16ArgFragments argFragmentFrexpStructS =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %val_tmp = ${op} %st_tmp ${ext_inst} %val_src0\n"
+ "%tmp_ptr_s = OpAccessChain %fp_tmp %tmp\n"
+ " OpStore %tmp_ptr_s %val_tmp\n"
+ "%tmp_ptr_l = OpAccessChain %fp_${tr} %tmp %c_i32_0\n"
+ " %val_dst = OpLoad %${tr} %tmp_ptr_l\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
+
+ " %fp_${tr} = OpTypePointer Function %${tr}\n"
+ " %st_tmp = OpTypeStruct %${tr} %${dr}i32\n"
+ " %fp_tmp = OpTypePointer Function %st_tmp\n",
+
+ "OpMemberDecorate %st_tmp 0 Offset 0\n"
+ "OpMemberDecorate %st_tmp 1 Offset ${struct_stride}\n",
+
+ " %tmp = OpVariable %fp_tmp Function\n",
+ };
+
+ const Math16ArgFragments argFragmentFrexpStructE =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %val_tmp = ${op} %st_tmp ${ext_inst} %val_src0\n"
+ "%tmp_ptr_s = OpAccessChain %fp_tmp %tmp\n"
+ " OpStore %tmp_ptr_s %val_tmp\n"
+ "%tmp_ptr_l = OpAccessChain %fp_${dr}i32 %tmp %c_i32_1\n"
+ "%val_dst_i = OpLoad %${dr}i32 %tmp_ptr_l\n"
+ " %val_dst = OpConvertSToF %${tr} %val_dst_i\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
+
+ " %st_tmp = OpTypeStruct %${tr} %${dr}i32\n"
+ " %fp_tmp = OpTypePointer Function %st_tmp\n",
+
+ "OpMemberDecorate %st_tmp 0 Offset 0\n"
+ "OpMemberDecorate %st_tmp 1 Offset ${struct_stride}\n",
+
+ " %tmp = OpVariable %fp_tmp Function\n",
+ };
+
+ const Math16ArgFragments argFragmentFrexpS =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %out_exp = OpAccessChain %fp_${dr}i32 %tmp\n"
+ " %val_dst = ${op} %${tr} ${ext_inst} %val_src0 %out_exp\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
+
+ "",
+
+ "",
+
+ " %tmp = OpVariable %fp_${dr}i32 Function\n",
+ };
+
+ const Math16ArgFragments argFragmentFrexpE =
+ {
+ " %src0 = OpAccessChain %up_${t0} %ssbo_src0 %c_i32_0 %ndx\n"
+ " %val_src0 = OpLoad %${t0} %src0\n"
+ " %out_exp = OpAccessChain %fp_${dr}i32 %tmp\n"
+ "%val_dummy = ${op} %${tr} ${ext_inst} %val_src0 %out_exp\n"
+ "%val_dst_i = OpLoad %${dr}i32 %out_exp\n"
+ " %val_dst = OpConvertSToF %${tr} %val_dst_i\n"
+ " %dst = OpAccessChain %up_${tr} %ssbo_dst %c_i32_0 %ndx\n"
+ " OpStore %dst %val_dst\n",
+
+ "",
+
+ "",
+
+ " %tmp = OpVariable %fp_${dr}i32 Function\n",
+ };
+
+ const Math16TestType& testType = testTypes[testTypeIdx];
+ const string funcNameString = string(testFunc.funcName) + string(testFunc.funcSuffix);
+ const string testName = de::toLower(funcNameString);
+ const Math16ArgFragments* argFragments = DE_NULL;
+ const size_t typeStructStride = testType.typeStructStride;
+ const bool extInst = !(testFunc.funcName[0] == 'O' && testFunc.funcName[1] == 'p');
+ const size_t numFloatsPerArg0Type = testTypes[testFunc.typeArg0].typeArrayStride / sizeof(deFloat16);
+ const size_t iterations = numDataPoints / numFloatsPerArg0Type;
+ const size_t numFloatsPerResultType = testTypes[testFunc.typeResult].typeArrayStride / sizeof(deFloat16);
+ const vector<deFloat16> float16DummyOutput (iterations * numFloatsPerResultType, 0);
+ VulkanFeatures features;
+ SpecResource specResource;
+ map<string, string> specs;
+ map<string, string> fragments;
+ vector<string> extensions;
+ string funcCall;
+ string funcVariables;
+ string variables;
+ string declarations;
+ string decorations;
+
+ switch (testFunc.funcArgsCount)
+ {
+ case 1:
+ {
+ argFragments = &argFragment1;
+
+ if (funcNameString == "ModfFrac") argFragments = &argFragmentModfFrac;
+ if (funcNameString == "ModfInt") argFragments = &argFragmentModfInt;
+ if (funcNameString == "ModfStructFrac") argFragments = &argFragmentModfStruct;
+ if (funcNameString == "ModfStructInt") argFragments = &argFragmentModfStruct;
+ if (funcNameString == "FrexpS") argFragments = &argFragmentFrexpS;
+ if (funcNameString == "FrexpE") argFragments = &argFragmentFrexpE;
+ if (funcNameString == "FrexpStructS") argFragments = &argFragmentFrexpStructS;
+ if (funcNameString == "FrexpStructE") argFragments = &argFragmentFrexpStructE;
+
+ break;
+ }
+ case 2:
+ {
+ argFragments = &argFragment2;
+
+ if (funcNameString == "Ldexp") argFragments = &argFragmentLdExp;
+
+ break;
+ }
+ case 3:
+ {
+ argFragments = &argFragment3;
+
+ break;
+ }
+ default:
+ {
+ TCU_THROW(InternalError, "Invalid number of arguments");
+ }
}
- return group.release();
+
+ if (testFunc.funcArgsCount == 1)
+ {
+ variables +=
+ " %ssbo_src0 = OpVariable %up_SSBO_${t0} Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO_${tr} Uniform\n";
+
+ decorations +=
+ "OpDecorate %ssbo_src0 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src0 Binding 0\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 1\n";
+ }
+ else if (testFunc.funcArgsCount == 2)
+ {
+ variables +=
+ " %ssbo_src0 = OpVariable %up_SSBO_${t0} Uniform\n"
+ " %ssbo_src1 = OpVariable %up_SSBO_${t1} Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO_${tr} Uniform\n";
+
+ decorations +=
+ "OpDecorate %ssbo_src0 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src0 Binding 0\n"
+ "OpDecorate %ssbo_src1 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src1 Binding 1\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 2\n";
+ }
+ else if (testFunc.funcArgsCount == 3)
+ {
+ variables +=
+ " %ssbo_src0 = OpVariable %up_SSBO_${t0} Uniform\n"
+ " %ssbo_src1 = OpVariable %up_SSBO_${t1} Uniform\n"
+ " %ssbo_src2 = OpVariable %up_SSBO_${t2} Uniform\n"
+ " %ssbo_dst = OpVariable %up_SSBO_${tr} Uniform\n";
+
+ decorations +=
+ "OpDecorate %ssbo_src0 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src0 Binding 0\n"
+ "OpDecorate %ssbo_src1 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src1 Binding 1\n"
+ "OpDecorate %ssbo_src2 DescriptorSet 0\n"
+ "OpDecorate %ssbo_src2 Binding 2\n"
+ "OpDecorate %ssbo_dst DescriptorSet 0\n"
+ "OpDecorate %ssbo_dst Binding 3\n";
+ }
+ else
+ {
+ TCU_THROW(InternalError, "Invalid number of function arguments");
+ }
+
+ variables += argFragments->variables;
+ decorations += argFragments->decorations;
+
+ specs["dr"] = testTypes[testFunc.typeResult].typePrefix;
+ specs["d0"] = testTypes[testFunc.typeArg0].typePrefix;
+ specs["d1"] = testTypes[testFunc.typeArg1].typePrefix;
+ specs["d2"] = testTypes[testFunc.typeArg2].typePrefix;
+ specs["tr"] = string(testTypes[testFunc.typeResult].typePrefix) + componentType;
+ specs["t0"] = string(testTypes[testFunc.typeArg0].typePrefix) + componentType;
+ specs["t1"] = string(testTypes[testFunc.typeArg1].typePrefix) + componentType;
+ specs["t2"] = string(testTypes[testFunc.typeArg2].typePrefix) + componentType;
+ specs["struct_stride"] = de::toString(typeStructStride);
+ specs["op"] = extInst ? "OpExtInst" : testFunc.funcName;
+ specs["ext_inst"] = extInst ? string("%ext_import ") + testFunc.funcName : "";
+ specs["struct_member"] = de::toLower(testFunc.funcSuffix);
+
+ variables = StringTemplate(variables).specialize(specs);
+ decorations = StringTemplate(decorations).specialize(specs);
+ funcVariables = StringTemplate(argFragments->funcVariables).specialize(specs);
+ funcCall = StringTemplate(argFragments->bodies).specialize(specs);
+
+ specs["num_data_points"] = de::toString(iterations);
+ specs["arg_vars"] = variables;
+ specs["arg_decorations"] = decorations;
+ specs["arg_infunc_vars"] = funcVariables;
+ specs["arg_func_call"] = funcCall;
+
+ fragments["extension"] = "OpExtension \"SPV_KHR_16bit_storage\"\n%ext_import = OpExtInstImport \"GLSL.std.450\"";
+ fragments["capability"] = "OpCapability Matrix\nOpCapability StorageUniformBufferBlock16";
+ fragments["decoration"] = decoration.specialize(specs);
+ fragments["pre_main"] = preMain.specialize(specs);
+ fragments["testfun"] = testFun.specialize(specs);
+
+ for (size_t inputArgNdx = 0; inputArgNdx < testFunc.funcArgsCount; ++inputArgNdx)
+ {
+ const size_t numFloatsPerItem = (inputArgNdx == 0) ? testTypes[testFunc.typeArg0].typeArrayStride / sizeof(deFloat16)
+ : (inputArgNdx == 1) ? testTypes[testFunc.typeArg1].typeArrayStride / sizeof(deFloat16)
+ : (inputArgNdx == 2) ? testTypes[testFunc.typeArg2].typeArrayStride / sizeof(deFloat16)
+ : -1;
+ const vector<deFloat16> inputData = testFunc.getInputDataFunc(seed, numFloatsPerItem * iterations, testTypeIdx, numFloatsPerItem, testFunc.funcArgsCount, inputArgNdx);
+
+ specResource.inputs.push_back(Resource(BufferSp(new Float16Buffer(inputData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ }
+
+ specResource.outputs.push_back(Resource(BufferSp(new Float16Buffer(float16DummyOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+ specResource.verifyIO = testFunc.verifyFunc;
+
+ extensions.push_back("VK_KHR_16bit_storage");
+ extensions.push_back("VK_KHR_shader_float16_int8");
+
+ features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+ features.extFloat16Int8 = EXTFLOAT16INT8FEATURES_FLOAT16;
+
+ finalizeTestsCreation(specResource, fragments, testCtx, testGroup, testName, features, extensions, IVec3(1, 1, 1));
}
-// Test for OpSConvert, OpUConvert, OpFConvert and OpConvert* in graphics shaders
-tcu::TestCaseGroup* createConvertGraphicsTests (tcu::TestContext& testCtx, const string& instruction, const string& name)
+template<size_t C, class SpecResource>
+tcu::TestCaseGroup* createFloat16ArithmeticSet (tcu::TestContext& testCtx)
{
- de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, name.c_str(), instruction.c_str()));
- vector<ConvertCase> testCases;
+ DE_STATIC_ASSERT(C >= 1 && C <= 4);
- createConvertCases(testCases, instruction);
+ const std::string testGroupName (string("arithmetic_") + de::toString(C));
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, testGroupName.c_str(), "Float 16 arithmetic and related tests"));
+ const Math16TestFunc testFuncs[] =
+ {
+ { "OpFNegate", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16OpFNegate> },
+ { "Round", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Round> },
+ { "RoundEven", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16RoundEven> },
+ { "Trunc", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Trunc> },
+ { "FAbs", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16FAbs> },
+ { "FSign", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16FSign> },
+ { "Floor", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Floor> },
+ { "Ceil", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Ceil> },
+ { "Fract", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Fract> },
+ { "Radians", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Radians> },
+ { "Degrees", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Degrees> },
+ { "Sin", "", 1, C, C, 0, 0, &getInputDataPI, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Sin> },
+ { "Cos", "", 1, C, C, 0, 0, &getInputDataPI, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Cos> },
+ { "Tan", "", 1, C, C, 0, 0, &getInputDataPI, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Tan> },
+ { "Asin", "", 1, C, C, 0, 0, &getInputDataA, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Asin> },
+ { "Acos", "", 1, C, C, 0, 0, &getInputDataA, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Acos> },
+ { "Atan", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Atan> },
+ { "Sinh", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Sinh> },
+ { "Cosh", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Cosh> },
+ { "Tanh", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Tanh> },
+ { "Asinh", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Asinh> },
+ { "Acosh", "", 1, C, C, 0, 0, &getInputDataAC, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Acosh> },
+ { "Atanh", "", 1, C, C, 0, 0, &getInputDataA, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Atanh> },
+ { "Exp", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Exp> },
+ { "Log", "", 1, C, C, 0, 0, &getInputDataP, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Log> },
+ { "Exp2", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Exp2> },
+ { "Log2", "", 1, C, C, 0, 0, &getInputDataP, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Log2> },
+ { "Sqrt", "", 1, C, C, 0, 0, &getInputDataP, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Sqrt> },
+ { "InverseSqrt", "", 1, C, C, 0, 0, &getInputDataP, compareFP16ArithmeticFunc< C, C, 0, 0, fp16InverseSqrt> },
+ { "Modf", "Frac", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16ModfFrac> },
+ { "Modf", "Int", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16ModfInt> },
+ { "ModfStruct", "Frac", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16ModfFrac> },
+ { "ModfStruct", "Int", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16ModfInt> },
+ { "Frexp", "S", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16FrexpS> },
+ { "Frexp", "E", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16FrexpE> },
+ { "FrexpStruct", "S", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16FrexpS> },
+ { "FrexpStruct", "E", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16FrexpE> },
+ { "OpFAdd", "", 2, C, C, C, 0, &getInputData, compareFP16ArithmeticFunc< C, C, C, 0, fp16OpFAdd> },
+ { "OpFSub", "", 2, C, C, C, 0, &getInputData, compareFP16ArithmeticFunc< C, C, C, 0, fp16OpFSub> },
+ { "OpFMul", "", 2, C, C, C, 0, &getInputData, compareFP16ArithmeticFunc< C, C, C, 0, fp16OpFMul> },
+ { "OpFDiv", "", 2, C, C, C, 0, &getInputData, compareFP16ArithmeticFunc< C, C, C, 0, fp16OpFDiv> },
+ { "Atan2", "", 2, C, C, C, 0, &getInputData, compareFP16ArithmeticFunc< C, C, C, 0, fp16Atan2> },
+ { "Pow", "", 2, C, C, C, 0, &getInputDataP, compareFP16ArithmeticFunc< C, C, C, 0, fp16Pow> },
+ { "FMin", "", 2, C, C, C, 0, &getInputData, compareFP16ArithmeticFunc< C, C, C, 0, fp16FMin> },
+ { "FMax", "", 2, C, C, C, 0, &getInputData, compareFP16ArithmeticFunc< C, C, C, 0, fp16FMax> },
+ { "Step", "", 2, C, C, C, 0, &getInputData, compareFP16ArithmeticFunc< C, C, C, 0, fp16Step> },
+ { "Ldexp", "", 2, C, C, C, 0, &getInputData, compareFP16ArithmeticFunc< C, C, C, 0, fp16Ldexp> },
+ { "FClamp", "", 3, C, C, C, C, &getInputData, compareFP16ArithmeticFunc< C, C, C, C, fp16FClamp> },
+ { "FMix", "", 3, C, C, C, C, &getInputDataD, compareFP16ArithmeticFunc< C, C, C, C, fp16FMix> },
+ { "SmoothStep", "", 3, C, C, C, C, &getInputDataSS, compareFP16ArithmeticFunc< C, C, C, C, fp16SmoothStep> },
+ { "Fma", "", 3, C, C, C, C, &getInputData, compareFP16ArithmeticFunc< C, C, C, C, fp16Fma> },
+ { "Length", "", 1, 1, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< 1, C, 0, 0, fp16Length> },
+ { "Distance", "", 2, 1, C, C, 0, &getInputData, compareFP16ArithmeticFunc< 1, C, C, 0, fp16Distance> },
+ { "Cross", "", 2, C, C, C, 0, &getInputDataD, compareFP16ArithmeticFunc< C, C, C, 0, fp16Cross> },
+ { "Normalize", "", 1, C, C, 0, 0, &getInputData, compareFP16ArithmeticFunc< C, C, 0, 0, fp16Normalize> },
+ { "FaceForward", "", 3, C, C, C, C, &getInputDataD, compareFP16ArithmeticFunc< C, C, C, C, fp16FaceForward> },
+ { "Reflect", "", 2, C, C, C, 0, &getInputDataD, compareFP16ArithmeticFunc< C, C, C, 0, fp16Reflect> },
+ { "Refract", "", 3, C, C, C, 1, &getInputDataN, compareFP16ArithmeticFunc< C, C, C, 1, fp16Refract> },
+ { "OpDot", "", 2, 1, C, C, 0, &getInputDataD, compareFP16ArithmeticFunc< 1, C, C, 0, fp16Dot> },
+ { "OpVectorTimesScalar", "", 2, C, C, 1, 0, &getInputDataV, compareFP16ArithmeticFunc< C, C, 1, 0, fp16VectorTimesScalar> },
+ };
- for (vector<ConvertCase>::const_iterator test = testCases.begin(); test != testCases.end(); ++test)
+ for (deUint32 testFuncIdx = 0; testFuncIdx < DE_LENGTH_OF_ARRAY(testFuncs); ++testFuncIdx)
{
- map<string, string> fragments = getConvertCaseFragments(instruction, *test);
- VulkanFeatures vulkanFeatures;
- vector<string> features;
- GraphicsResources resources;
- vector<string> extensions;
- SpecConstants noSpecConstants;
- PushConstants noPushConstants;
- GraphicsInterfaces noInterfaces;
- tcu::RGBA defaultColors[4];
+ const Math16TestFunc& testFunc = testFuncs[testFuncIdx];
+ const string funcNameString = testFunc.funcName;
- getDefaultColors (defaultColors);
- resources.inputs.push_back (Resource(test->m_inputBuffer, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
- resources.outputs.push_back (Resource(test->m_outputBuffer, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
- extensions.push_back ("VK_KHR_storage_buffer_storage_class");
+ if ((C != 3) && funcNameString == "Cross")
+ continue;
- getVulkanFeaturesAndExtensions(test->m_fromType, test->m_toType, vulkanFeatures, extensions);
+ if ((C < 2) && funcNameString == "OpDot")
+ continue;
- createTestsForAllStages(
- test->m_name, defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, extensions, features, vulkanFeatures, group.get());
+ if ((C < 2) && funcNameString == "OpVectorTimesScalar")
+ continue;
+
+ createFloat16ArithmeticFuncTest<SpecResource>(testCtx, *testGroup.get(), C, testFunc);
}
- return group.release();
+
+ return testGroup.release();
+}
+
+template<class SpecResource>
+tcu::TestCaseGroup* createFloat16ArithmeticSet (tcu::TestContext& testCtx)
+{
+ const std::string testGroupName ("arithmetic");
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, testGroupName.c_str(), "Float 16 arithmetic and related tests"));
+ const Math16TestFunc testFuncs[] =
+ {
+ { "OpTranspose", "2x2", 1, MAT2X2, MAT2X2, 0, 0, &getInputDataM, compareFP16ArithmeticFunc< 4, 4, 0, 0, fp16Transpose<2,2> > },
+ { "OpTranspose", "3x2", 1, MAT2X3, MAT3X2, 0, 0, &getInputDataM, compareFP16ArithmeticFunc< 8, 8, 0, 0, fp16Transpose<3,2> > },
+ { "OpTranspose", "4x2", 1, MAT2X4, MAT4X2, 0, 0, &getInputDataM, compareFP16ArithmeticFunc< 8, 8, 0, 0, fp16Transpose<4,2> > },
+ { "OpTranspose", "2x3", 1, MAT3X2, MAT2X3, 0, 0, &getInputDataM, compareFP16ArithmeticFunc< 8, 8, 0, 0, fp16Transpose<2,3> > },
+ { "OpTranspose", "3x3", 1, MAT3X3, MAT3X3, 0, 0, &getInputDataM, compareFP16ArithmeticFunc< 16, 16, 0, 0, fp16Transpose<3,3> > },
+ { "OpTranspose", "4x3", 1, MAT3X4, MAT4X3, 0, 0, &getInputDataM, compareFP16ArithmeticFunc< 16, 16, 0, 0, fp16Transpose<4,3> > },
+ { "OpTranspose", "2x4", 1, MAT4X2, MAT2X4, 0, 0, &getInputDataM, compareFP16ArithmeticFunc< 8, 8, 0, 0, fp16Transpose<2,4> > },
+ { "OpTranspose", "3x4", 1, MAT4X3, MAT3X4, 0, 0, &getInputDataM, compareFP16ArithmeticFunc< 16, 16, 0, 0, fp16Transpose<3,4> > },
+ { "OpTranspose", "4x4", 1, MAT4X4, MAT4X4, 0, 0, &getInputDataM, compareFP16ArithmeticFunc< 16, 16, 0, 0, fp16Transpose<4,4> > },
+ { "OpMatrixTimesScalar", "2x2", 2, MAT2X2, MAT2X2, 1, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 4, 1, 0, fp16MatrixTimesScalar<2,2> > },
+ { "OpMatrixTimesScalar", "2x3", 2, MAT2X3, MAT2X3, 1, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 1, 0, fp16MatrixTimesScalar<2,3> > },
+ { "OpMatrixTimesScalar", "2x4", 2, MAT2X4, MAT2X4, 1, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 1, 0, fp16MatrixTimesScalar<2,4> > },
+ { "OpMatrixTimesScalar", "3x2", 2, MAT3X2, MAT3X2, 1, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 1, 0, fp16MatrixTimesScalar<3,2> > },
+ { "OpMatrixTimesScalar", "3x3", 2, MAT3X3, MAT3X3, 1, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 1, 0, fp16MatrixTimesScalar<3,3> > },
+ { "OpMatrixTimesScalar", "3x4", 2, MAT3X4, MAT3X4, 1, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 1, 0, fp16MatrixTimesScalar<3,4> > },
+ { "OpMatrixTimesScalar", "4x2", 2, MAT4X2, MAT4X2, 1, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 1, 0, fp16MatrixTimesScalar<4,2> > },
+ { "OpMatrixTimesScalar", "4x3", 2, MAT4X3, MAT4X3, 1, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 1, 0, fp16MatrixTimesScalar<4,3> > },
+ { "OpMatrixTimesScalar", "4x4", 2, MAT4X4, MAT4X4, 1, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 1, 0, fp16MatrixTimesScalar<4,4> > },
+ { "OpVectorTimesMatrix", "2x2", 2, VEC2, VEC2, MAT2X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 2, 2, 4, 0, fp16VectorTimesMatrix<2,2> > },
+ { "OpVectorTimesMatrix", "2x3", 2, VEC2, VEC3, MAT2X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 2, 3, 8, 0, fp16VectorTimesMatrix<2,3> > },
+ { "OpVectorTimesMatrix", "2x4", 2, VEC2, VEC4, MAT2X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 2, 4, 8, 0, fp16VectorTimesMatrix<2,4> > },
+ { "OpVectorTimesMatrix", "3x2", 2, VEC3, VEC2, MAT3X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 3, 2, 8, 0, fp16VectorTimesMatrix<3,2> > },
+ { "OpVectorTimesMatrix", "3x3", 2, VEC3, VEC3, MAT3X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 3, 3, 16, 0, fp16VectorTimesMatrix<3,3> > },
+ { "OpVectorTimesMatrix", "3x4", 2, VEC3, VEC4, MAT3X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 3, 4, 16, 0, fp16VectorTimesMatrix<3,4> > },
+ { "OpVectorTimesMatrix", "4x2", 2, VEC4, VEC2, MAT4X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 2, 8, 0, fp16VectorTimesMatrix<4,2> > },
+ { "OpVectorTimesMatrix", "4x3", 2, VEC4, VEC3, MAT4X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 3, 16, 0, fp16VectorTimesMatrix<4,3> > },
+ { "OpVectorTimesMatrix", "4x4", 2, VEC4, VEC4, MAT4X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 4, 16, 0, fp16VectorTimesMatrix<4,4> > },
+ { "OpMatrixTimesVector", "2x2", 2, VEC2, MAT2X2, VEC2, 0, &getInputDataD, compareFP16ArithmeticFunc< 2, 4, 2, 0, fp16MatrixTimesVector<2,2> > },
+ { "OpMatrixTimesVector", "2x3", 2, VEC3, MAT2X3, VEC2, 0, &getInputDataD, compareFP16ArithmeticFunc< 3, 8, 2, 0, fp16MatrixTimesVector<2,3> > },
+ { "OpMatrixTimesVector", "2x4", 2, VEC4, MAT2X4, VEC2, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 8, 2, 0, fp16MatrixTimesVector<2,4> > },
+ { "OpMatrixTimesVector", "3x2", 2, VEC2, MAT3X2, VEC3, 0, &getInputDataD, compareFP16ArithmeticFunc< 2, 8, 3, 0, fp16MatrixTimesVector<3,2> > },
+ { "OpMatrixTimesVector", "3x3", 2, VEC3, MAT3X3, VEC3, 0, &getInputDataD, compareFP16ArithmeticFunc< 3, 16, 3, 0, fp16MatrixTimesVector<3,3> > },
+ { "OpMatrixTimesVector", "3x4", 2, VEC4, MAT3X4, VEC3, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 16, 3, 0, fp16MatrixTimesVector<3,4> > },
+ { "OpMatrixTimesVector", "4x2", 2, VEC2, MAT4X2, VEC4, 0, &getInputDataD, compareFP16ArithmeticFunc< 2, 8, 4, 0, fp16MatrixTimesVector<4,2> > },
+ { "OpMatrixTimesVector", "4x3", 2, VEC3, MAT4X3, VEC4, 0, &getInputDataD, compareFP16ArithmeticFunc< 3, 16, 4, 0, fp16MatrixTimesVector<4,3> > },
+ { "OpMatrixTimesVector", "4x4", 2, VEC4, MAT4X4, VEC4, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 16, 4, 0, fp16MatrixTimesVector<4,4> > },
+ { "OpMatrixTimesMatrix", "2x2_2x2", 2, MAT2X2, MAT2X2, MAT2X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 4, 4, 0, fp16MatrixTimesMatrix<2,2,2,2> > },
+ { "OpMatrixTimesMatrix", "2x2_3x2", 2, MAT3X2, MAT2X2, MAT3X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 4, 8, 0, fp16MatrixTimesMatrix<2,2,3,2> > },
+ { "OpMatrixTimesMatrix", "2x2_4x2", 2, MAT4X2, MAT2X2, MAT4X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 4, 8, 0, fp16MatrixTimesMatrix<2,2,4,2> > },
+ { "OpMatrixTimesMatrix", "2x3_2x2", 2, MAT2X3, MAT2X3, MAT2X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 4, 0, fp16MatrixTimesMatrix<2,3,2,2> > },
+ { "OpMatrixTimesMatrix", "2x3_3x2", 2, MAT3X3, MAT2X3, MAT3X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 8, 8, 0, fp16MatrixTimesMatrix<2,3,3,2> > },
+ { "OpMatrixTimesMatrix", "2x3_4x2", 2, MAT4X3, MAT2X3, MAT4X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 8, 8, 0, fp16MatrixTimesMatrix<2,3,4,2> > },
+ { "OpMatrixTimesMatrix", "2x4_2x2", 2, MAT2X4, MAT2X4, MAT2X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 4, 0, fp16MatrixTimesMatrix<2,4,2,2> > },
+ { "OpMatrixTimesMatrix", "2x4_3x2", 2, MAT3X4, MAT2X4, MAT3X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 8, 8, 0, fp16MatrixTimesMatrix<2,4,3,2> > },
+ { "OpMatrixTimesMatrix", "2x4_4x2", 2, MAT4X4, MAT2X4, MAT4X2, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 8, 8, 0, fp16MatrixTimesMatrix<2,4,4,2> > },
+ { "OpMatrixTimesMatrix", "3x2_2x3", 2, MAT2X2, MAT3X2, MAT2X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 8, 8, 0, fp16MatrixTimesMatrix<3,2,2,3> > },
+ { "OpMatrixTimesMatrix", "3x2_3x3", 2, MAT3X2, MAT3X2, MAT3X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 16, 0, fp16MatrixTimesMatrix<3,2,3,3> > },
+ { "OpMatrixTimesMatrix", "3x2_4x3", 2, MAT4X2, MAT3X2, MAT4X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 16, 0, fp16MatrixTimesMatrix<3,2,4,3> > },
+ { "OpMatrixTimesMatrix", "3x3_2x3", 2, MAT2X3, MAT3X3, MAT2X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 16, 8, 0, fp16MatrixTimesMatrix<3,3,2,3> > },
+ { "OpMatrixTimesMatrix", "3x3_3x3", 2, MAT3X3, MAT3X3, MAT3X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 16, 0, fp16MatrixTimesMatrix<3,3,3,3> > },
+ { "OpMatrixTimesMatrix", "3x3_4x3", 2, MAT4X3, MAT3X3, MAT4X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 16, 0, fp16MatrixTimesMatrix<3,3,4,3> > },
+ { "OpMatrixTimesMatrix", "3x4_2x3", 2, MAT2X4, MAT3X4, MAT2X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 16, 8, 0, fp16MatrixTimesMatrix<3,4,2,3> > },
+ { "OpMatrixTimesMatrix", "3x4_3x3", 2, MAT3X4, MAT3X4, MAT3X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 16, 0, fp16MatrixTimesMatrix<3,4,3,3> > },
+ { "OpMatrixTimesMatrix", "3x4_4x3", 2, MAT4X4, MAT3X4, MAT4X3, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 16, 0, fp16MatrixTimesMatrix<3,4,4,3> > },
+ { "OpMatrixTimesMatrix", "4x2_2x4", 2, MAT2X2, MAT4X2, MAT2X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 8, 8, 0, fp16MatrixTimesMatrix<4,2,2,4> > },
+ { "OpMatrixTimesMatrix", "4x2_3x4", 2, MAT3X2, MAT4X2, MAT3X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 16, 0, fp16MatrixTimesMatrix<4,2,3,4> > },
+ { "OpMatrixTimesMatrix", "4x2_4x4", 2, MAT4X2, MAT4X2, MAT4X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 8, 16, 0, fp16MatrixTimesMatrix<4,2,4,4> > },
+ { "OpMatrixTimesMatrix", "4x3_2x4", 2, MAT2X3, MAT4X3, MAT2X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 16, 8, 0, fp16MatrixTimesMatrix<4,3,2,4> > },
+ { "OpMatrixTimesMatrix", "4x3_3x4", 2, MAT3X3, MAT4X3, MAT3X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 16, 0, fp16MatrixTimesMatrix<4,3,3,4> > },
+ { "OpMatrixTimesMatrix", "4x3_4x4", 2, MAT4X3, MAT4X3, MAT4X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 16, 0, fp16MatrixTimesMatrix<4,3,4,4> > },
+ { "OpMatrixTimesMatrix", "4x4_2x4", 2, MAT2X4, MAT4X4, MAT2X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 16, 8, 0, fp16MatrixTimesMatrix<4,4,2,4> > },
+ { "OpMatrixTimesMatrix", "4x4_3x4", 2, MAT3X4, MAT4X4, MAT3X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 16, 0, fp16MatrixTimesMatrix<4,4,3,4> > },
+ { "OpMatrixTimesMatrix", "4x4_4x4", 2, MAT4X4, MAT4X4, MAT4X4, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 16, 16, 0, fp16MatrixTimesMatrix<4,4,4,4> > },
+ { "OpOuterProduct", "2x2", 2, MAT2X2, VEC2, VEC2, 0, &getInputDataD, compareFP16ArithmeticFunc< 4, 2, 2, 0, fp16OuterProduct<2,2> > },
+ { "OpOuterProduct", "2x3", 2, MAT2X3, VEC3, VEC2, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 3, 2, 0, fp16OuterProduct<2,3> > },
+ { "OpOuterProduct", "2x4", 2, MAT2X4, VEC4, VEC2, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 4, 2, 0, fp16OuterProduct<2,4> > },
+ { "OpOuterProduct", "3x2", 2, MAT3X2, VEC2, VEC3, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 2, 3, 0, fp16OuterProduct<3,2> > },
+ { "OpOuterProduct", "3x3", 2, MAT3X3, VEC3, VEC3, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 3, 3, 0, fp16OuterProduct<3,3> > },
+ { "OpOuterProduct", "3x4", 2, MAT3X4, VEC4, VEC3, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 4, 3, 0, fp16OuterProduct<3,4> > },
+ { "OpOuterProduct", "4x2", 2, MAT4X2, VEC2, VEC4, 0, &getInputDataD, compareFP16ArithmeticFunc< 8, 2, 4, 0, fp16OuterProduct<4,2> > },
+ { "OpOuterProduct", "4x3", 2, MAT4X3, VEC3, VEC4, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 3, 4, 0, fp16OuterProduct<4,3> > },
+ { "OpOuterProduct", "4x4", 2, MAT4X4, VEC4, VEC4, 0, &getInputDataD, compareFP16ArithmeticFunc< 16, 4, 4, 0, fp16OuterProduct<4,4> > },
+ { "Determinant", "2x2", 1, SCALAR, MAT2X2, NONE, 0, &getInputDataC, compareFP16ArithmeticFunc< 1, 4, 0, 0, fp16Determinant<2> > },
+ { "Determinant", "3x3", 1, SCALAR, MAT3X3, NONE, 0, &getInputDataC, compareFP16ArithmeticFunc< 1, 16, 0, 0, fp16Determinant<3> > },
+ { "Determinant", "4x4", 1, SCALAR, MAT4X4, NONE, 0, &getInputDataC, compareFP16ArithmeticFunc< 1, 16, 0, 0, fp16Determinant<4> > },
+ { "MatrixInverse", "2x2", 1, MAT2X2, MAT2X2, NONE, 0, &getInputDataC, compareFP16ArithmeticFunc< 4, 4, 0, 0, fp16Inverse<2> > },
+ };
+
+ for (deUint32 testFuncIdx = 0; testFuncIdx < DE_LENGTH_OF_ARRAY(testFuncs); ++testFuncIdx)
+ {
+ const Math16TestFunc& testFunc = testFuncs[testFuncIdx];
+
+ createFloat16ArithmeticFuncTest<SpecResource>(testCtx, *testGroup.get(), 0, testFunc);
+ }
+
+ return testGroup.release();
}
const string getNumberTypeName (const NumberType type)
return testGroup.release();
}
+tcu::TestCaseGroup* createFloat16Tests (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "float16", "Float 16 tests"));
+
+ testGroup->addChild(createOpConstantFloat16Tests(testCtx));
+ testGroup->addChild(createFloat16LogicalSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16FuncSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createDerivativeTests<256, 1>(testCtx));
+ testGroup->addChild(createDerivativeTests<256, 2>(testCtx));
+ testGroup->addChild(createDerivativeTests<256, 4>(testCtx));
+ testGroup->addChild(createFloat16VectorExtractSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16VectorInsertSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16VectorShuffleSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16CompositeConstructSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16CompositeInsertExtractSet<GraphicsResources>(testCtx, "OpCompositeExtract"));
+ testGroup->addChild(createFloat16CompositeInsertExtractSet<GraphicsResources>(testCtx, "OpCompositeInsert"));
+ testGroup->addChild(createFloat16ArithmeticSet<GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<1, GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<2, GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<3, GraphicsResources>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<4, GraphicsResources>(testCtx));
+
+ return testGroup.release();
+}
+
+tcu::TestCaseGroup* createFloat16Group (tcu::TestContext& testCtx)
+{
+ de::MovePtr<tcu::TestCaseGroup> testGroup (new tcu::TestCaseGroup(testCtx, "float16", "Float 16 tests"));
+
+ testGroup->addChild(createFloat16OpConstantCompositeGroup(testCtx));
+ testGroup->addChild(createFloat16LogicalSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16FuncSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16VectorExtractSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16VectorInsertSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16VectorShuffleSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16CompositeConstructSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16CompositeInsertExtractSet<ComputeShaderSpec>(testCtx, "OpCompositeExtract"));
+ testGroup->addChild(createFloat16CompositeInsertExtractSet<ComputeShaderSpec>(testCtx, "OpCompositeInsert"));
+ testGroup->addChild(createFloat16ArithmeticSet<ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<1, ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<2, ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<3, ComputeShaderSpec>(testCtx));
+ testGroup->addChild(createFloat16ArithmeticSet<4, ComputeShaderSpec>(testCtx));
+
+ return testGroup.release();
+}
+
tcu::TestCaseGroup* createInstructionTests (tcu::TestContext& testCtx)
{
const bool testComputePipeline = true;
computeTests->addChild(createImageSamplerComputeGroup(testCtx));
computeTests->addChild(createOpNameGroup(testCtx));
computeTests->addChild(createPointerParameterComputeGroup(testCtx));
+ computeTests->addChild(createFloat16Group(testCtx));
+
graphicsTests->addChild(createCrossStageInterfaceTests(testCtx));
graphicsTests->addChild(createSpivVersionCheckTests(testCtx, !testComputePipeline));
graphicsTests->addChild(createOpNopTests(testCtx));
graphicsTests->addChild(createConvertGraphicsTests(testCtx, "OpConvertFToU", "convertftou"));
graphicsTests->addChild(createPointerParameterGraphicsGroup(testCtx));
+ graphicsTests->addChild(createFloat16Tests(testCtx));
+
instructionTests->addChild(computeTests.release());
instructionTests->addChild(graphicsTests.release());
{
namespace SpirVAssembly
{
+
+#define SPIRV_ASSEMBLY_TYPES \
+ "%void = OpTypeVoid\n" \
+ "%bool = OpTypeBool\n" \
+ \
+ "%i32 = OpTypeInt 32 1\n" \
+ "%u32 = OpTypeInt 32 0\n" \
+ \
+ "%f32 = OpTypeFloat 32\n" \
+ "%v2i32 = OpTypeVector %i32 2\n" \
+ "%v2u32 = OpTypeVector %u32 2\n" \
+ "%v2f32 = OpTypeVector %f32 2\n" \
+ "%v3i32 = OpTypeVector %i32 3\n" \
+ "%v3u32 = OpTypeVector %u32 3\n" \
+ "%v3f32 = OpTypeVector %f32 3\n" \
+ "%v4i32 = OpTypeVector %i32 4\n" \
+ "%v4u32 = OpTypeVector %u32 4\n" \
+ "%v4f32 = OpTypeVector %f32 4\n" \
+ "%v4bool = OpTypeVector %bool 4\n" \
+ \
+ "%v4f32_v4f32_function = OpTypeFunction %v4f32 %v4f32\n" \
+ "%bool_function = OpTypeFunction %bool\n" \
+ "%fun = OpTypeFunction %void\n" \
+ \
+ "%ip_f32 = OpTypePointer Input %f32\n" \
+ "%ip_i32 = OpTypePointer Input %i32\n" \
+ "%ip_u32 = OpTypePointer Input %u32\n" \
+ "%ip_v2f32 = OpTypePointer Input %v2f32\n" \
+ "%ip_v2i32 = OpTypePointer Input %v2i32\n" \
+ "%ip_v2u32 = OpTypePointer Input %v2u32\n" \
+ "%ip_v3f32 = OpTypePointer Input %v3f32\n" \
+ "%ip_v4f32 = OpTypePointer Input %v4f32\n" \
+ "%ip_v4i32 = OpTypePointer Input %v4i32\n" \
+ "%ip_v4u32 = OpTypePointer Input %v4u32\n" \
+ \
+ "%op_f32 = OpTypePointer Output %f32\n" \
+ "%op_i32 = OpTypePointer Output %i32\n" \
+ "%op_u32 = OpTypePointer Output %u32\n" \
+ "%op_v2f32 = OpTypePointer Output %v2f32\n" \
+ "%op_v2i32 = OpTypePointer Output %v2i32\n" \
+ "%op_v2u32 = OpTypePointer Output %v2u32\n" \
+ "%op_v4f32 = OpTypePointer Output %v4f32\n" \
+ "%op_v4i32 = OpTypePointer Output %v4i32\n" \
+ "%op_v4u32 = OpTypePointer Output %v4u32\n" \
+ \
+ "%fp_f32 = OpTypePointer Function %f32\n" \
+ "%fp_i32 = OpTypePointer Function %i32\n" \
+ "%fp_v4f32 = OpTypePointer Function %v4f32\n" \
+
+#define SPIRV_ASSEMBLY_CONSTANTS \
+ "%c_f32_1 = OpConstant %f32 1.0\n" \
+ "%c_f32_0 = OpConstant %f32 0.0\n" \
+ "%c_f32_0_5 = OpConstant %f32 0.5\n" \
+ "%c_f32_n1 = OpConstant %f32 -1.\n" \
+ "%c_f32_7 = OpConstant %f32 7.0\n" \
+ "%c_f32_8 = OpConstant %f32 8.0\n" \
+ "%c_i32_0 = OpConstant %i32 0\n" \
+ "%c_i32_1 = OpConstant %i32 1\n" \
+ "%c_i32_2 = OpConstant %i32 2\n" \
+ "%c_i32_3 = OpConstant %i32 3\n" \
+ "%c_i32_4 = OpConstant %i32 4\n" \
+ "%c_u32_0 = OpConstant %u32 0\n" \
+ "%c_u32_1 = OpConstant %u32 1\n" \
+ "%c_u32_2 = OpConstant %u32 2\n" \
+ "%c_u32_3 = OpConstant %u32 3\n" \
+ "%c_u32_32 = OpConstant %u32 32\n" \
+ "%c_u32_4 = OpConstant %u32 4\n" \
+ "%c_u32_31_bits = OpConstant %u32 0x7FFFFFFF\n" \
+ "%c_v4f32_1_1_1_1 = OpConstantComposite %v4f32 %c_f32_1 %c_f32_1 %c_f32_1 %c_f32_1\n" \
+ "%c_v4f32_1_0_0_1 = OpConstantComposite %v4f32 %c_f32_1 %c_f32_0 %c_f32_0 %c_f32_1\n" \
+ "%c_v4f32_0_5_0_5_0_5_0_5 = OpConstantComposite %v4f32 %c_f32_0_5 %c_f32_0_5 %c_f32_0_5 %c_f32_0_5\n" \
+
+#define SPIRV_ASSEMBLY_ARRAYS \
+ "%a1f32 = OpTypeArray %f32 %c_u32_1\n" \
+ "%a2f32 = OpTypeArray %f32 %c_u32_2\n" \
+ "%a3v4f32 = OpTypeArray %v4f32 %c_u32_3\n" \
+ "%a4f32 = OpTypeArray %f32 %c_u32_4\n" \
+ "%a32v4f32 = OpTypeArray %v4f32 %c_u32_32\n" \
+ "%ip_a3v4f32 = OpTypePointer Input %a3v4f32\n" \
+ "%ip_a32v4f32 = OpTypePointer Input %a32v4f32\n" \
+ "%op_a2f32 = OpTypePointer Output %a2f32\n" \
+ "%op_a3v4f32 = OpTypePointer Output %a3v4f32\n" \
+ "%op_a4f32 = OpTypePointer Output %a4f32\n" \
+
/*--------------------------------------------------------------------*//*!
* \brief Abstract class for an input/output storage buffer object
*//*--------------------------------------------------------------------*/
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.select
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.sconvert
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.fconvert
+dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.fconvert16
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.vector_related
dEQP-VK.spirv_assembly.instruction.compute.opsource.unknown_source
dEQP-VK.spirv_assembly.instruction.compute.opsource.wrong_source
dEQP-VK.spirv_assembly.instruction.compute.opphi.nested
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_int
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_float
+dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_float16
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_vec3
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_mat4
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_array
dEQP-VK.spirv_assembly.instruction.compute.uconvert.uint64_to_uint8
dEQP-VK.spirv_assembly.instruction.compute.fconvert.float32_to_float64
dEQP-VK.spirv_assembly.instruction.compute.fconvert.float64_to_float32
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float32_to_float16
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float16_to_float32
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float16_to_float64
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float64_to_float16
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float16_m21
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float32_m21
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float64_m99
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float16_min
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float32_min
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float64_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float32_max
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float64
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_m11
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_m37
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_m66
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_min
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_min
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int16
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int32
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int64
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int16
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int32
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int64
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float16_116
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float32_232
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float64_164
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float32_max
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float64
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_33
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_42
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_188
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint16
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint32
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint64
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.buffer_memory
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.buffer_memory_variable_pointers
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.workgroup_memory_variable_pointers
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.matrix
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.struct
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.nested_struct
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisnan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisinf_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordnotequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordnotequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisnan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisinf_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordnotequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordnotequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.function.f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.function.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.function.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.222
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.223
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.224
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.232
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.233
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.234
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.242
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.243
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.244
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.322
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.323
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.324
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.332
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.333
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.334
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.342
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.343
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.344
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.422
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.423
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.424
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.432
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.433
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.434
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.442
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.443
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.444
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeconstruct.struct
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v2f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v3f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v4f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.struct16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v2f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v3f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v4f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.struct16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x2_2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x2_3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x2_4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x3_2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x3_3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x3_4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x4_2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x4_3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x4_4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x2_2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x2_3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x2_4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x3_2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x3_3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x3_4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x4_2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x4_3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x4_4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x2_2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x2_3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x2_4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x3_2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x3_3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x3_4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x4_2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x4_3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x4_4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.determinant2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.determinant3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.determinant4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.matrixinverse2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opdot
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opvectortimesscalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.cross
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opdot
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opvectortimesscalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opdot
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opvectortimesscalar
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.flat
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.no_perspective
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.relaxedprecision
dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_tesse
dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_geom
dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_frag
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_frag
dEQP-VK.spirv_assembly.instruction.graphics.nocontraction.multiplication_vert
dEQP-VK.spirv_assembly.instruction.graphics.nocontraction.multiplication_tessc
dEQP-VK.spirv_assembly.instruction.graphics.nocontraction.multiplication_tesse
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_tesse
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_geom
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_frag
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_frag
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.vector_related_vert
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.vector_related_tessc
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.vector_related_tesse
dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_tesse
dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_geom
dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_m21_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_m21_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_m21_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_min_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_min_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float32_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float32_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float32_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m37_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m37_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m37_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_min_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_min_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_p0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_p0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int16_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int16_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int16_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_232_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_232_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_232_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float32_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float32_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float32_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_42_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_42_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_42_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_p0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_p0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_m0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_m0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint16_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint16_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint16_tesse
dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_variable_pointers_tesse
dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_variable_pointers_geom
dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_variable_pointers_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdxfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdyfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opfwidthfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdxcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdycoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opfwidthcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdx
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdy
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opfwidth
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdxfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdyfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opfwidthfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdxcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdycoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opfwidthcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdx
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdy
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opfwidth
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdxfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdyfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opfwidthfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdxcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdycoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opfwidthcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdx
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdy
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opfwidth
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_frag
dEQP-VK.spirv_assembly.type.scalar.i8.negate_vert
dEQP-VK.spirv_assembly.type.scalar.i8.negate_tessc
dEQP-VK.spirv_assembly.type.scalar.i8.negate_tesse
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.select
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.sconvert
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.fconvert
+dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.fconvert16
dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.vector_related
dEQP-VK.spirv_assembly.instruction.compute.opsource.unknown_source
dEQP-VK.spirv_assembly.instruction.compute.opsource.wrong_source
dEQP-VK.spirv_assembly.instruction.compute.opphi.nested
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_int
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_float
+dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_float16
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_vec3
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_mat4
dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_array
dEQP-VK.spirv_assembly.instruction.compute.uconvert.uint64_to_uint8
dEQP-VK.spirv_assembly.instruction.compute.fconvert.float32_to_float64
dEQP-VK.spirv_assembly.instruction.compute.fconvert.float64_to_float32
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float32_to_float16
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float16_to_float32
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float16_to_float64
+dEQP-VK.spirv_assembly.instruction.compute.fconvert.float64_to_float16
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float16_m21
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float32_m21
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float64_m99
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float16_min
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float32_min
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float64_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float32_max
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int8_to_float64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int16_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int32_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertstof.int64_to_float64
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_m11
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_m37
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_m66
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_min
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_min
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int8_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_m1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_min
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int16_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int32_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftos.float16_to_int64_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int16
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int32
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float32_to_int64
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int16
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int32
dEQP-VK.spirv_assembly.instruction.compute.convertftos.float64_to_int64
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float16_116
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float32_232
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float64_164
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float32_max
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint8_to_float64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float16_max
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint16_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint32_to_float64
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float32
dEQP-VK.spirv_assembly.instruction.compute.convertutof.uint64_to_float64
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_33
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_42
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_188
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_max
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_p0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint8_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float64_to_uint8_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_1234
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_max
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_p0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint16_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint32_m0
+dEQP-VK.spirv_assembly.instruction.compute.convertftou.float16_to_uint64_m0
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint16
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint32
dEQP-VK.spirv_assembly.instruction.compute.convertftou.float32_to_uint64
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.buffer_memory
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.buffer_memory_variable_pointers
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.workgroup_memory_variable_pointers
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.matrix
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.struct
+dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.nested_struct
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisnan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisinf_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordnotequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordnotequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthan_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthanequal_scalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisnan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opisinf_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordnotequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordnotequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthan_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordlessthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordlessthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfordgreaterthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.logical.opfunordgreaterthanequal_vector
+dEQP-VK.spirv_assembly.instruction.compute.float16.function.f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.function.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.function.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.222
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.223
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.224
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.232
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.233
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.234
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.242
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.243
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.244
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.322
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.323
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.324
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.332
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.333
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.334
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.342
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.343
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.344
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.422
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.423
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.424
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.432
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.433
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.434
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.442
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.443
+dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle.444
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeconstruct.struct
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v2f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v3f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.v4f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract.struct16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v2f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v3f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v4f16
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v2f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v3f16arr5
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.v4f16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert.struct16arr3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.optranspose4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesscalar4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opvectortimesmatrix4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesvector4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x2_2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x2_3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x2_4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x3_2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x3_3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x3_4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x4_2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x4_3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix2x4_4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x2_2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x2_3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x2_4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x3_2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x3_3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x3_4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x4_2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x4_3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix3x4_4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x2_2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x2_3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x2_4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x3_2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x3_3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x3_4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x4_2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x4_3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opmatrixtimesmatrix4x4_4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct2x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct2x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct3x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct3x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct4x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct4x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.opouterproduct4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.determinant2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.determinant3x3
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.determinant4x4
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic.matrixinverse2x2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_1.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opdot
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_2.opvectortimesscalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.cross
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opdot
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_3.opvectortimesscalar
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfnegate
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.round
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.roundeven
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.trunc
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fabs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fsign
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.floor
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.ceil
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.radians
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.degrees
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.sin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.cos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.tan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.asin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.acos
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.atan
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.sinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.cosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.tanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.asinh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.acosh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.atanh
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.exp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.log
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.exp2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.log2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.sqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.inversesqrt
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modffrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modfint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modfstructfrac
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.modfstructint
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexps
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexpe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexpstructs
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.frexpstructe
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfadd
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfsub
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfmul
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opfdiv
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.atan2
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.pow
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fmin
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fmax
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.step
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.ldexp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fclamp
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fmix
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.smoothstep
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.fma
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.length
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.distance
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.normalize
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.faceforward
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.reflect
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.refract
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opdot
+dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic_4.opvectortimesscalar
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.flat
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.no_perspective
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.relaxedprecision
dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_tesse
dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_geom
dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_frag
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_frag
dEQP-VK.spirv_assembly.instruction.graphics.nocontraction.multiplication_vert
dEQP-VK.spirv_assembly.instruction.graphics.nocontraction.multiplication_tessc
dEQP-VK.spirv_assembly.instruction.graphics.nocontraction.multiplication_tesse
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_tesse
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_geom
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_frag
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_frag
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.vector_related_vert
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.vector_related_tessc
dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.vector_related_tesse
dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_tesse
dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_geom
dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float32_to_float16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float32_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float16_to_float64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_m21_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_m21_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_m21_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_m21_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_min_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_min_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_min_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float32_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int32_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float32_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float32_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int16_to_float32_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m11_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m37_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m37_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m37_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_min_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_min_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_min_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_p0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_p0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_p0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int8_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_min_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int16_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int32_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float16_to_int64_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int16_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int16_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float32_to_int16_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_116_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_232_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_232_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_232_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float32_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint32_to_float16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float16_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float32_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float32_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint16_to_float32_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_33_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_42_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_42_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_42_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_max_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_max_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_max_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_p0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_p0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_p0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint8_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_m0_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_m0_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_tesse
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_geom
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_1234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_max_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_p0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint16_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint32_m0_frag
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_vert
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_geom
+dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float16_to_uint64_m0_frag
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint16_vert
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint16_tessc
dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float32_to_uint16_tesse
dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_variable_pointers_tesse
dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_variable_pointers_geom
dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_variable_pointers_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.vec4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.struct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.matrix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.array_of_struct_of_array_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_scalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisnan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opisinf_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordnotequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordnotequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthan_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordlessthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordlessthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfordgreaterthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.opfunordgreaterthanequal_vector_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.function.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdxfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdyfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opfwidthfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdxcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdycoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opfwidthcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdx
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opdpdy
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_1.opfwidth
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdxfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdyfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opfwidthfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdxcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdycoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opfwidthcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdx
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opdpdy
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_2.opfwidth
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdxfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdyfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opfwidthfine
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdxcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdycoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opfwidthcoarse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdx
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opdpdy
+dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative_4.opfwidth
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.222_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.223_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.224_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.232_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.233_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.234_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.242_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.243_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.244_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.322_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.323_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.324_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.332_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.333_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.334_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.342_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.343_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.344_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.422_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.423_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.424_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.432_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.433_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.434_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.442_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.443_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle.444_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct.struct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v2f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v3f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.v4f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract.struct16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v2f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v3f16arr5_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.v4f16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert.struct16arr3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.optranspose4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesscalar4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opvectortimesmatrix4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesvector4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x2_4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x3_4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix2x4_4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x2_4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x3_4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix3x4_4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x2_4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x3_4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opmatrixtimesmatrix4x4_4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct2x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct3x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.opouterproduct4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant3x3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.determinant4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic.matrixinverse2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_1.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opdot_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_2.opvectortimesscalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.cross_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opdot_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_3.opvectortimesscalar_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfnegate_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.round_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.roundeven_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.trunc_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fabs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fsign_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.floor_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ceil_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.radians_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.degrees_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acos_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.cosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.tanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.asinh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.acosh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atanh_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.exp2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.log2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.sqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.inversesqrt_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modffrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructfrac_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.modfstructint_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexps_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructs_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.frexpstructe_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfadd_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfsub_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfmul_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opfdiv_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.atan2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.pow_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmin_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmax_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.step_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.ldexp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fclamp_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fmix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.smoothstep_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.fma_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.length_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.distance_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.normalize_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.faceforward_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.reflect_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.refract_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opdot_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic_4.opvectortimesscalar_frag
dEQP-VK.spirv_assembly.type.scalar.i8.negate_vert
dEQP-VK.spirv_assembly.type.scalar.i8.negate_tessc
dEQP-VK.spirv_assembly.type.scalar.i8.negate_tesse
typedef Float<deUint32, 8, 23, 127, FLOAT_HAS_SIGN|FLOAT_SUPPORT_DENORM> Float32; //!< IEEE 754 32-bit floating-point value
typedef Float<deUint64, 11, 52, 1023, FLOAT_HAS_SIGN|FLOAT_SUPPORT_DENORM> Float64; //!< IEEE 754 64-bit floating-point value
+typedef Float<deUint16, 5, 10, 15, FLOAT_HAS_SIGN> Float16Denormless; //!< IEEE 754-2008 16-bit floating-point value without denormalized support
+
template <typename StorageType, int ExponentBits, int MantissaBits, int ExponentBias, deUint32 Flags>
inline Float<StorageType, ExponentBits, MantissaBits, ExponentBias, Flags>::Float (void)
: m_value(0)
Float<StorageType, ExponentBits, MantissaBits, ExponentBias, Flags>::constructBits
(int sign, int exponent, StorageType mantissaBits)
{
- const StorageType signBit = sign < 0 ? 1 : 0;
- const StorageType exponentBits = exponent + ExponentBias;
+ const StorageType signBit = static_cast<StorageType>(sign < 0 ? 1 : 0);
+ const StorageType exponentBits = static_cast<StorageType>(exponent + ExponentBias);
DE_ASSERT(sign == +1 || sign == -1 );
DE_ASSERT(exponentBits >> ExponentBits == 0);