SPIR-V tests for VK_KHR_shader_float16_int8
authorBoris Zanin <boris.zanin@mobica.com>
Fri, 13 Apr 2018 12:38:19 +0000 (14:38 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 22 Nov 2018 10:35:13 +0000 (05:35 -0500)
Add tests:
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.function*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.logical.*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.opconstant.*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.derivative*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorextractdynamic*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorinsertdynamic*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.opvectorshuffle*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeconstruct*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeextract*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.opcompositeinsert*
 * dEQP-VK.spirv_assembly.instruction.graphics.float16.arithmetic*
 * dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert16_*
 * dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap16_*
 * dEQP-VK.spirv_assembly.instruction.graphics.fconvert.*float16*
 * dEQP-VK.spirv_assembly.instruction.graphics.convert*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.function*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.logical.*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.opconstantcomposite.*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorextractdynamic*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorinsertdynamic*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.opvectorshuffle*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeconstruct*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeextract*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.opcompositeinsert*
 * dEQP-VK.spirv_assembly.instruction.compute.float16.arithmetic*
 * dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.fconvert16
 * dEQP-VK.spirv_assembly.instruction.compute.opphi.vartype_float16
 * dEQP-VK.spirv_assembly.instruction.compute.fconvert.*float16*
 * dEQP-VK.spirv_assembly.instruction.compute.convert*

Affects tests:
 * dEQP-VK.spirv_assembly.instruction.*

Components: Vulkan

VK-GL-CTS issue: 1095

Change-Id: If6112d42a9b84eaff50e559f0a4b438372815ae7
(cherry picked from commit 449a2e07496fc77e1c267b00d3d9e4c070accbb9)

android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderTestUtil.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.hpp
external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt
external/vulkancts/mustpass/1.1.2/vk-default.txt
framework/common/tcuFloat.hpp

index b37ee3b..a9589af 100755 (executable)
@@ -211983,6 +211983,7 @@ dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.logicalnot
 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
@@ -212011,6 +212012,7 @@ dEQP-VK.spirv_assembly.instruction.compute.opphi.wide
 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
@@ -212133,52 +212135,112 @@ dEQP-VK.spirv_assembly.instruction.compute.uconvert.uint64_to_uint16
 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
@@ -213128,6 +213190,404 @@ dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.param_to_global
 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
@@ -213472,6 +213932,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_tessc
 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
@@ -213852,6 +214317,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_tessc
 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
@@ -218130,6 +218600,31 @@ dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_tessc
 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
@@ -218140,6 +218635,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_tess
 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
@@ -218150,6 +218650,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_tess
 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
@@ -218160,6 +218665,51 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_tess
 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
@@ -218190,6 +218740,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_tessc
 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
@@ -218200,6 +218755,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_tess
 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
@@ -218210,6 +218770,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_tess
 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
@@ -218220,6 +218785,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_tess
 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
@@ -218230,6 +218800,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_tessc
 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
@@ -218240,6 +218815,81 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_tessc
 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
@@ -218270,6 +218920,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_tessc
 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
@@ -218280,6 +218935,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_tes
 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
@@ -218290,6 +218950,36 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_tes
 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
@@ -218320,6 +219010,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_tessc
 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
@@ -218330,6 +219025,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_tes
 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
@@ -218340,6 +219040,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_tes
 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
@@ -218350,6 +219055,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_tess
 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
@@ -218360,6 +219070,66 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_tess
 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
@@ -218410,6 +219180,2028 @@ dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_vari
 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
index 2002bdd..daff8de 100644 (file)
@@ -331,7 +331,7 @@ bool check64BitFloats (const std::vector<Resource>&         /* originalFloats */,
 
                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))
index 9593b38..f2cb3cf 100644 (file)
@@ -22,6 +22,7 @@
  *//*--------------------------------------------------------------------*/
 
 #include "vktSpvAsmComputeShaderTestUtil.hpp"
+#include "tcuStringTemplate.hpp"
 
 namespace vkt
 {
@@ -129,5 +130,67 @@ bool verifyOutput (const std::vector<Resource>&, const std::vector<AllocationSp>
        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
index 0e15936..fdcd292 100644 (file)
@@ -387,89 +387,6 @@ void createPipelineShaderStages (const DeviceInterface&                                            vk,
        }
 }
 
-#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
@@ -2189,6 +2106,63 @@ bool compare16BitFloat(deUint16 original, float returned, tcu::TestLog & log)
        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.
@@ -4090,6 +4064,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
 
                        if (deMemCmp(&expectedBytes.front(), outResourceMemories[outputNdx]->getHostPtr(), expectedBytes.size()))
                                return tcu::TestStatus::fail("Resource returned doesn't match bitwisely with expected");
+
                }
        }
 
index 3dd356d..8e24eab 100644 (file)
@@ -615,6 +615,7 @@ bool compare16BitFloat (float original, deUint16 returned, RoundingModeFlags fla
 // * 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
index cd31ab3..d022133 100644 (file)
@@ -27,6 +27,7 @@
 #include "tcuCommandLine.hpp"
 #include "tcuFormatUtil.hpp"
 #include "tcuFloat.hpp"
+#include "tcuFloatFormat.hpp"
 #include "tcuRGBA.hpp"
 #include "tcuStringTemplate.hpp"
 #include "tcuTestLog.hpp"
@@ -2628,6 +2629,7 @@ struct SpecConstantTwoIntCase
        deInt32                 scActualValue1;
        const char*             resultOperation;
        vector<deInt32> expectedOutput;
+       deInt32                 scActualValueLength;
 
                                        SpecConstantTwoIntCase (const char* name,
                                                                                        const char* definition0,
@@ -2637,16 +2639,19 @@ struct SpecConstantTwoIntCase
                                                                                        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)
@@ -2655,6 +2660,7 @@ 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);
@@ -2750,6 +2756,7 @@ tcu::TestCaseGroup* createSpecConstantGroup (tcu::TestContext& testCtx)
        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)
        {
@@ -2780,12 +2787,20 @@ tcu::TestCaseGroup* createSpecConstantGroup (tcu::TestContext& testCtx)
                        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));
        }
@@ -2861,6 +2876,7 @@ void createOpPhiVartypeTests (de::MovePtr<tcu::TestCaseGroup>& group, tcu::TestC
 {
        ComputeShaderSpec       specInt;
        ComputeShaderSpec       specFloat;
+       ComputeShaderSpec       specFloat16;
        ComputeShaderSpec       specVec3;
        ComputeShaderSpec       specMat4;
        ComputeShaderSpec       specArray;
@@ -2869,6 +2885,8 @@ void createOpPhiVartypeTests (de::MovePtr<tcu::TestCaseGroup>& group, tcu::TestC
        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);
 
@@ -2881,6 +2899,12 @@ void createOpPhiVartypeTests (de::MovePtr<tcu::TestCaseGroup>& group, tcu::TestC
                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
@@ -2935,6 +2959,73 @@ void createOpPhiVartypeTests (de::MovePtr<tcu::TestCaseGroup>& group, tcu::TestC
        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()) +
 
@@ -3185,6 +3276,7 @@ void createOpPhiVartypeTests (de::MovePtr<tcu::TestCaseGroup>& group, tcu::TestC
 
        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));
@@ -5495,6 +5587,333 @@ tcu::TestCaseGroup* createOpUndefGroup (tcu::TestContext& testCtx)
 
                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)
@@ -6283,24 +6702,27 @@ struct SpecConstantTwoIntGraphicsCase
        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];
@@ -6318,6 +6740,8 @@ tcu::TestCaseGroup* createSpecConstantTests (tcu::TestContext& testCtx)
        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";
@@ -6408,6 +6832,7 @@ tcu::TestCaseGroup* createSpecConstantTests (tcu::TestContext& testCtx)
        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)
@@ -6439,6 +6864,14 @@ tcu::TestCaseGroup* createSpecConstantTests (tcu::TestContext& testCtx)
                        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;
@@ -6449,8 +6882,8 @@ tcu::TestCaseGroup* createSpecConstantTests (tcu::TestContext& testCtx)
                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,
@@ -6520,9 +6953,14 @@ tcu::TestCaseGroup* createOpPhiTests(tcu::TestContext& testCtx)
        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"
@@ -6688,6 +7126,63 @@ tcu::TestCaseGroup* createOpPhiTests(tcu::TestContext& testCtx)
 
        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();
 }
 
@@ -7164,15 +7659,13 @@ void createOpQuantizeSingleOptionTests(tcu::TestCaseGroup* testCtx)
                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);
        }
@@ -7279,7 +7772,6 @@ void createOpQuantizeTwoPossibilityTests(tcu::TestCaseGroup* testCtx)
                map<string, string>                                                                     fragments;
                map<string, string>                                                                     constantSpecialization;
                SpecConstants                                                                           passConstants;
-               deInt32                                                                                         specConstant;
 
                constantSpecialization["output1"]                                       = tests[idx].possibleOutput1;
                constantSpecialization["output2"]                                       = tests[idx].possibleOutput2;
@@ -7287,8 +7779,7 @@ void createOpQuantizeTwoPossibilityTests(tcu::TestCaseGroup* testCtx)
                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);
        }
@@ -8042,6 +8533,7 @@ enum ConversionDataType
        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,
@@ -8058,6 +8550,7 @@ const string getBitWidthStr (ConversionDataType type)
 
                case DATA_TYPE_SIGNED_16:
                case DATA_TYPE_UNSIGNED_16:
+               case DATA_TYPE_FLOAT_16:
                        return "16";
 
                case DATA_TYPE_SIGNED_32:
@@ -8088,6 +8581,7 @@ const string getByteWidthStr (ConversionDataType type)
 
                case DATA_TYPE_SIGNED_16:
                case DATA_TYPE_UNSIGNED_16:
+               case DATA_TYPE_FLOAT_16:
                        return "2";
 
                case DATA_TYPE_SIGNED_32:
@@ -8116,6 +8610,7 @@ bool isSigned (ConversionDataType type)
                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:
@@ -8148,6 +8643,7 @@ bool isInt (ConversionDataType type)
                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:
@@ -8176,6 +8672,7 @@ bool isFloat (ConversionDataType type)
                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;
@@ -8237,6 +8734,7 @@ BufferSp getBuffer (ConversionDataType type, deInt64 number)
                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);
@@ -8272,6 +8770,11 @@ bool usesInt64 (ConversionDataType from, ConversionDataType to)
                        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);
@@ -8284,25 +8787,37 @@ bool usesFloat64 (ConversionDataType from, ConversionDataType to)
 
 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;
+               }
        }
 }
 
@@ -8349,9 +8864,22 @@ struct ConvertCase
                                        "%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";
@@ -8526,25 +9054,55 @@ void createConvertCases (vector<ConvertCase>& testCases, const string& instructi
                // 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));
@@ -8555,13 +9113,25 @@ void createConvertCases (vector<ConvertCase>& testCases, const string& instructi
        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));
@@ -8572,167 +9142,7197 @@ void createConvertCases (vector<ConvertCase>& testCases, const string& instructi
        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)
@@ -9531,6 +17131,53 @@ tcu::TestCaseGroup* createOpNameTests (tcu::TestContext& testCtx)
        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;
@@ -9606,6 +17253,8 @@ tcu::TestCaseGroup* createInstructionTests (tcu::TestContext& testCtx)
        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));
@@ -9660,6 +17309,8 @@ tcu::TestCaseGroup* createInstructionTests (tcu::TestContext& testCtx)
        graphicsTests->addChild(createConvertGraphicsTests(testCtx, "OpConvertFToU", "convertftou"));
        graphicsTests->addChild(createPointerParameterGraphicsGroup(testCtx));
 
+       graphicsTests->addChild(createFloat16Tests(testCtx));
+
        instructionTests->addChild(computeTests.release());
        instructionTests->addChild(graphicsTests.release());
 
index 788fc18..3033034 100644 (file)
@@ -40,6 +40,90 @@ namespace vkt
 {
 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
  *//*--------------------------------------------------------------------*/
index b746a1d..4b43bf3 100644 (file)
@@ -211988,6 +211988,7 @@ dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.logicalnot
 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
@@ -212016,6 +212017,7 @@ dEQP-VK.spirv_assembly.instruction.compute.opphi.wide
 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
@@ -212138,52 +212140,112 @@ dEQP-VK.spirv_assembly.instruction.compute.uconvert.uint64_to_uint16
 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
@@ -213129,6 +213191,404 @@ dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.param_to_global
 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
@@ -213473,6 +213933,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_tessc
 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
@@ -213853,6 +214318,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_tessc
 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
@@ -218111,6 +218581,31 @@ dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_tessc
 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
@@ -218121,6 +218616,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_tess
 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
@@ -218131,6 +218631,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_tess
 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
@@ -218141,6 +218646,51 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_tess
 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
@@ -218171,6 +218721,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_tessc
 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
@@ -218181,6 +218736,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_tess
 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
@@ -218191,6 +218751,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_tess
 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
@@ -218201,6 +218766,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_tess
 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
@@ -218211,6 +218781,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_tessc
 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
@@ -218221,6 +218796,81 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_tessc
 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
@@ -218251,6 +218901,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_tessc
 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
@@ -218261,6 +218916,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_tes
 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
@@ -218271,6 +218931,36 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_tes
 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
@@ -218301,6 +218991,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_tessc
 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
@@ -218311,6 +219006,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_tes
 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
@@ -218321,6 +219021,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_tes
 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
@@ -218331,6 +219036,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_tess
 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
@@ -218341,6 +219051,66 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_tess
 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
@@ -218391,6 +219161,2028 @@ dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_vari
 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
index 3f8d1c1..498b2be 100644 (file)
@@ -211988,6 +211988,7 @@ dEQP-VK.spirv_assembly.instruction.compute.opspecconstantop.logicalnot
 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
@@ -212016,6 +212017,7 @@ dEQP-VK.spirv_assembly.instruction.compute.opphi.wide
 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
@@ -212138,52 +212140,112 @@ dEQP-VK.spirv_assembly.instruction.compute.uconvert.uint64_to_uint16
 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
@@ -213129,6 +213191,404 @@ dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.param_to_global
 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
@@ -213473,6 +213933,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.opphi.swap_tessc
 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
@@ -213853,6 +214318,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.fconvert_tessc
 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
@@ -218111,6 +218581,31 @@ dEQP-VK.spirv_assembly.instruction.graphics.fconvert.float64_to_float32_tessc
 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
@@ -218121,6 +218616,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_m99_tess
 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
@@ -218131,6 +218631,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_min_tess
 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
@@ -218141,6 +218646,51 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int8_to_float64_max_tess
 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
@@ -218171,6 +218721,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertstof.int64_to_float64_tessc
 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
@@ -218181,6 +218736,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m66_tess
 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
@@ -218191,6 +218751,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_min_tess
 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
@@ -218201,6 +218766,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_max_tess
 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
@@ -218211,6 +218781,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_p0_tessc
 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
@@ -218221,6 +218796,81 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int8_m0_tessc
 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
@@ -218251,6 +218901,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftos.float64_to_int64_tessc
 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
@@ -218261,6 +218916,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_164_tes
 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
@@ -218271,6 +218931,36 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint8_to_float64_max_tes
 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
@@ -218301,6 +218991,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertutof.uint64_to_float64_tessc
 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
@@ -218311,6 +219006,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_188_tes
 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
@@ -218321,6 +219021,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_max_tes
 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
@@ -218331,6 +219036,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_p0_tess
 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
@@ -218341,6 +219051,66 @@ dEQP-VK.spirv_assembly.instruction.graphics.convertftou.float64_to_uint8_m0_tess
 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
@@ -218391,6 +219161,2028 @@ dEQP-VK.spirv_assembly.instruction.graphics.pointer_parameter.buffer_memory_vari
 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
index fcadc12..eb1c9c1 100644 (file)
@@ -132,6 +132,8 @@ typedef Float<deUint16,  5, 10,   15, FLOAT_HAS_SIGN|FLOAT_SUPPORT_DENORM>  Float
 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)
@@ -226,8 +228,8 @@ Float<StorageType, ExponentBits, MantissaBits, ExponentBias, Flags>
 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);