From: Boris Zanin Date: Fri, 13 Apr 2018 12:38:19 +0000 (+0200) Subject: SPIR-V tests for VK_KHR_shader_float16_int8 X-Git-Tag: upstream/1.3.5~2324^2~42 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8caa6181feff3a18c04a493923c6a56993d4b745;p=platform%2Fupstream%2FVK-GL-CTS.git SPIR-V tests for VK_KHR_shader_float16_int8 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) --- diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index b37ee3b..a9589af 100755 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -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 diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp index 2002bdd..daff8de 100644 --- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp +++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp @@ -331,7 +331,7 @@ bool check64BitFloats (const std::vector& /* originalFloats */, const double* returnedAsDouble = static_cast(outputAllocs[outputNdx]->getHostPtr()); const double* expectedAsDouble = reinterpret_cast(&expectedBytes.front()); - const deUint32 count = static_cast(expectedBytes.size() / sizeof(double)); + const deUint32 count = static_cast(expectedBytes.size() / sizeof(double)); for (deUint32 numNdx = 0; numNdx < count; ++numNdx) if (!compare64BitFloat(expectedAsDouble[numNdx], returnedAsDouble[numNdx], log)) diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderTestUtil.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderTestUtil.cpp index 9593b38..f2cb3cf 100644 --- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderTestUtil.cpp +++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderTestUtil.cpp @@ -22,6 +22,7 @@ *//*--------------------------------------------------------------------*/ #include "vktSpvAsmComputeShaderTestUtil.hpp" +#include "tcuStringTemplate.hpp" namespace vkt { @@ -129,5 +130,67 @@ bool verifyOutput (const std::vector&, const std::vector 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& 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 diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp index 0e15936..fdcd292 100644 --- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp +++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp @@ -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"); + } } diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp index 3dd356d..8e24eab 100644 --- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp +++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp @@ -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 diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp index cd31ab3..d022133 100644 --- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp +++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp @@ -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 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& output) - : caseName (name) - , scDefinition0 (definition0) - , scDefinition1 (definition1) - , scResultType (resultType) - , scOperation (operation) - , scActualValue0 (value0) - , scActualValue1 (value1) - , resultOperation (resultOp) - , expectedOutput (output) {} + const vector& 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 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 inputInts (numElements, 0); vector outputInts1 (numElements, 0); vector 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& group, tcu::TestC { ComputeShaderSpec specInt; ComputeShaderSpec specFloat; + ComputeShaderSpec specFloat16; ComputeShaderSpec specVec3; ComputeShaderSpec specMat4; ComputeShaderSpec specArray; @@ -2869,6 +2885,8 @@ void createOpPhiVartypeTests (de::MovePtr& group, tcu::TestC const int numElements = 100; vector inputFloats (numElements, 0); vector outputFloats (numElements, 0); + vector inputFloats16 (numElements, 0); + vector outputFloats16 (numElements, 0); fillRandomScalars(rnd, -300.f, 300.f, &inputFloats[0], numElements); @@ -2881,6 +2899,12 @@ void createOpPhiVartypeTests (de::MovePtr& 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& 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& 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 group (new tcu::TestCaseGroup(testCtx, "opconstantcomposite", "Tests the OpConstantComposite instruction")); + vector cases; + de::Random rnd (deStringHash(group->getName())); + const int numElements = 100; + vector positiveFloats (numElements, 0); + vector 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 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 getFloat16s (de::Random& rnd, deUint32 count) +{ + vector 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(float16.size()); + + DE_ASSERT(count >= numPicks); + count -= numPicks; + + for (deUint32 numIdx = 0; numIdx < count; ++numIdx) + float16.push_back(rnd.getUint16()); + + return float16; +} + +const vector squarize(const vector& inData, const deUint32 argNo) +{ + const size_t inDataLength = inData.size(); + vector 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 tmp(inDataLength, inData[numIdx]); + + result.insert(result.end(), tmp.begin(), tmp.end()); + } + } + + return result; +} + +const vector squarizeVector(const vector& inData, const deUint32 argNo) +{ + vector vec; + vector 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 +bool compareFP16Logical (const std::vector& inputs, const vector& outputAllocs, const std::vector&, TestLog& log) +{ + if (inputs.size() != 2 || outputAllocs.size() != 1) + return false; + + vector input1Bytes; + vector 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(outputAllocs[0]->getHostPtr()); + const deFloat16* const input1AsFP16 = reinterpret_cast(&input1Bytes.front()); + const deFloat16* const input2AsFP16 = reinterpret_cast(&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 fragments1; map fragments2; map fragments3; + map fragments4; + std::vector 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 codeSpecialization; map 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(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 fragments; map 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(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(number); case DATA_TYPE_UNSIGNED_32: return getSpecializedBuffer(number); case DATA_TYPE_UNSIGNED_64: return getSpecializedBuffer(number); + case DATA_TYPE_FLOAT_16: return getSpecializedBuffer(number); case DATA_TYPE_FLOAT_32: return getSpecializedBuffer(number); case DATA_TYPE_FLOAT_64: return getSpecializedBuffer(number); case DATA_TYPE_VEC2_SIGNED_16: return getSpecializedBuffer(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& 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& 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& 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& 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 getConvertCaseFragments (string instruction, const ConvertCase& convertCase) +{ + map params = convertCase.m_asmTypes; + map 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 group(new tcu::TestCaseGroup(testCtx, name.c_str(), instruction.c_str())); + vector testCases; + createConvertCases(testCases, instruction); + + for (vector::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 group(new tcu::TestCaseGroup(testCtx, name.c_str(), instruction.c_str())); + vector testCases; + createConvertCases(testCases, instruction); + + for (vector::const_iterator test = testCases.begin(); test != testCases.end(); ++test) + { + map fragments = getConvertCaseFragments(instruction, *test); + vector features; + VulkanFeatures vulkanFeatures; + GraphicsResources resources; + vector 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 opConstantCompositeTests (new tcu::TestCaseGroup(testCtx, "opconstant", "OpConstant and OpConstantComposite instruction")); + RGBA inputColors[4]; + RGBA outputColors[4]; + vector 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 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 +void finalizeTestsCreation (T& specResource, + const map& fragments, + tcu::TestContext& testCtx, + tcu::TestCaseGroup& testGroup, + const std::string& testName, + const VulkanFeatures& vulkanFeatures, + const vector& extensions, + const IVec3& numWorkGroups); + +template<> +void finalizeTestsCreation (GraphicsResources& specResource, + const map& fragments, + tcu::TestContext& , + tcu::TestCaseGroup& testGroup, + const std::string& testName, + const VulkanFeatures& vulkanFeatures, + const vector& extensions, + const IVec3& ) +{ + RGBA defaultColors[4]; + getDefaultColors(defaultColors); + + createTestsForAllStages(testName, defaultColors, defaultColors, fragments, specResource, extensions, &testGroup, vulkanFeatures); +} + +template<> +void finalizeTestsCreation (ComputeShaderSpec& specResource, + const map& fragments, + tcu::TestContext& testCtx, + tcu::TestCaseGroup& testGroup, + const std::string& testName, + const VulkanFeatures& vulkanFeatures, + const vector& 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 +tcu::TestCaseGroup* createFloat16LogicalSet (tcu::TestContext& testCtx) +{ + de::MovePtr 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 float16Data = getFloat16s(rnd, numDataPoints); + const vector float16Data1 = squarize(float16Data, 0); + const vector float16Data2 = squarize(float16Data, 1); + const vector float16DataVec1 = squarizeVector(float16Data, 0); + const vector float16DataVec2 = squarizeVector(float16Data, 1); + const vector float16OutDummy (float16Data1.size(), 0); + const vector float16OutVecDummy (float16DataVec1.size(), 0); + + struct TestOp + { + const char* opCode; + VerifyIOFunc verifyFunc; + const deUint32 argCount; + }; + + const TestOp testOps[] = + { + { "OpIsNan" , compareFP16Logical , 1 }, + { "OpIsInf" , compareFP16Logical , 1 }, + { "OpFOrdEqual" , compareFP16Logical , 2 }, + { "OpFUnordEqual" , compareFP16Logical , 2 }, + { "OpFOrdNotEqual" , compareFP16Logical , 2 }, + { "OpFUnordNotEqual" , compareFP16Logical , 2 }, + { "OpFOrdLessThan" , compareFP16Logical , 2 }, + { "OpFUnordLessThan" , compareFP16Logical , 2 }, + { "OpFOrdGreaterThan" , compareFP16Logical , 2 }, + { "OpFUnordGreaterThan" , compareFP16Logical , 2 }, + { "OpFOrdLessThanEqual" , compareFP16Logical , 2 }, + { "OpFUnordLessThanEqual" , compareFP16Logical , 2 }, + { "OpFOrdGreaterThanEqual" , compareFP16Logical , 2 }, + { "OpFUnordGreaterThanEqual" , compareFP16Logical , 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 specs; + VulkanFeatures features; + map fragments; + vector 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 specs; + vector extensions; + VulkanFeatures features; + map 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& inputs, const vector& outputAllocs, const std::vector&, TestLog& log) +{ + if (inputs.size() != 1 || outputAllocs.size() != 1) + return false; + + vector 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 +tcu::TestCaseGroup* createFloat16FuncSet (tcu::TestContext& testCtx) +{ + de::MovePtr 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 float16InputData = getFloat16s(rnd, numDataPoints); + const vector float16OutputDummy (float16InputData.size(), 0); + map 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 specs; + VulkanFeatures features; + vector 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 +inline static deUint32 getOffset(deUint32 x, deUint32 y, deUint32 n) +{ + return N * ((R * y) + x) + n; +} + +template +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(x0(x), y0(y), n)]; + const deFloat16 v1 = data[getOffset(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 +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 +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 +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(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 +bool compareDerivative (const std::vector& inputs, const vector& outputAllocs, const std::vector&, TestLog& log) +{ + if (inputs.size() != 1 || outputAllocs.size() != 1) + return false; + + deUint32 successfulRuns = FLAVOUR_COUNT; + std::string results[FLAVOUR_COUNT]; + vector inputBytes; + + inputs[0].getBytes(inputBytes); + + const deFloat16* inputAsFP16 = reinterpret_cast(&inputBytes.front()); + const deFloat16* outputAsFP16 = static_cast(outputAllocs[0]->getHostPtr()); + + DE_ASSERT(inputBytes.size() == R * R * N * sizeof(deFloat16)); + + for (deUint32 flavor = 0; flavor < FLAVOUR_COUNT; ++flavor) + if (compareDerivativeWithFlavor (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 +tcu::TestCaseGroup* createDerivativeTests (tcu::TestContext& testCtx) +{ + typedef getFDelta getFDxFine; + typedef getFDelta getFDyFine; + + typedef getFDelta getFdxCoarse0; + typedef getFDelta getFdxCoarse1; + typedef getFDelta getFdyCoarse0; + typedef getFDelta getFdyCoarse1; + typedef getFOneOf<2, getFdxCoarse0, getFdxCoarse1> getFDxCoarse; + typedef getFOneOf<2, getFdyCoarse0, getFdyCoarse1> getFDyCoarse; + + typedef calcWidthOf4 getFWidthFine; + typedef calcWidthOf4 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 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 float16InputX; + vector float16InputY; + vector float16InputW; + vector 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(2 * DE_PI) * static_cast(x * (n + 1)) / static_cast(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(2 * DE_PI) * static_cast(y * (n + 1)) / static_cast(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& inputData; + VerifyIOFunc verifyFunc; + }; + + const TestOp testOps[] = + { + { "OpDPdxFine" , float16InputX , compareDerivative }, + { "OpDPdyFine" , float16InputY , compareDerivative }, + { "OpFwidthFine" , float16InputW , compareDerivative }, + { "OpDPdxCoarse" , float16InputX , compareDerivative }, + { "OpDPdyCoarse" , float16InputY , compareDerivative }, + { "OpFwidthCoarse" , float16InputW , compareDerivative }, + { "OpDPdx" , float16InputX , compareDerivative }, + { "OpDPdy" , float16InputY , compareDerivative }, + { "OpFwidth" , float16InputW , compareDerivative }, + }; + + 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 specs; + VulkanFeatures features; + vector extensions; + map fragments; + SpecConstants noSpecConstants; + PushConstants noPushConstants; + GraphicsInterfaces noInterfaces; + vector 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& inputs, const vector& outputAllocs, const std::vector&, TestLog& log) +{ + if (inputs.size() != 2 || outputAllocs.size() != 1) + return false; + + vector input1Bytes; + vector 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 +tcu::TestCaseGroup* createFloat16VectorExtractSet (tcu::TestContext& testCtx) +{ + de::MovePtr testGroup (new tcu::TestCaseGroup(testCtx, "opvectorextractdynamic", "OpVectorExtractDynamic tests")); + + de::Random rnd (deStringHash(testGroup->getName())); + const deUint32 numDataPoints = 256; + const vector float16InputData = getFloat16s(rnd, numDataPoints); + const vector 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 specs; + VulkanFeatures features; + vector inputDataNdx; + map fragments; + vector 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 +bool compareFP16VectorInsertFunc (const std::vector& inputs, const vector& outputAllocs, const std::vector&, TestLog& log) +{ + if (inputs.size() != 2 || outputAllocs.size() != 1) + return false; + + vector input1Bytes; + vector 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 +tcu::TestCaseGroup* createFloat16VectorInsertSet (tcu::TestContext& testCtx) +{ + de::MovePtr testGroup (new tcu::TestCaseGroup(testCtx, "opvectorinsertdynamic", "OpVectorInsertDynamic tests")); + + de::Random rnd (deStringHash(testGroup->getName())); + const deUint32 replacement = 42; + const deUint32 numDataPoints = 256; + const vector float16InputData = getFloat16s(rnd, numDataPoints); + const vector 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 specs; + VulkanFeatures features; + vector inputDataNdx; + map fragments; + vector 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 +bool compareFP16VectorShuffleFunc (const std::vector& inputs, const vector& outputAllocs, const std::vector&, 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 input1Bytes; + vector 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 +tcu::TestCaseGroup* createFloat16VectorShuffleSet (tcu::TestContext& testCtx) +{ + de::MovePtr 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 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 float16Input0Data = getFloat16s(rnd, input0Stride * numDataPoints); + const vector float16Input1Data = getFloat16s(rnd, input1Stride * numDataPoints); + const vector 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 specs; + vector extensions; + VulkanFeatures features; + string caseBodies; + string caseList; + + // Generate case + { + vector 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 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& inputs, const vector& outputAllocs, const std::vector&, TestLog& log) +{ + if (inputs.size() != 1 || outputAllocs.size() != 1) + return false; + + vector 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 +tcu::TestCaseGroup* createFloat16CompositeConstructSet (tcu::TestContext& testCtx) +{ + de::MovePtr 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 specs; + VulkanFeatures features; + map fragments; + vector extensions; + vector expectedOutput; + string consts; + + for (deUint32 elementNdx = 0; elementNdx < numElements; ++elementNdx) + { + vector 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 +tcu::TestCaseGroup* createFloat16CompositeInsertExtractSet (tcu::TestContext& testCtx, const char* op) +{ + de::MovePtr 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 specs; + VulkanFeatures features; + map fragments; + vector extensions; + vector inputFP16; + vector 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 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(-1); } + + virtual double getULPs (vector&) { 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 argCompCount; + vector flavorNames; +}; + +struct fp16OpFNegate : public fp16PerComponent +{ + template + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 2.5; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 2.5; + } + + template + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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::infinity(); + edgeRight = +std::numeric_limits::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 + bool calc (vector& 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 + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 2 * 5.0; // This is not a precision test. Value is not from spec + } + + template + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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& 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 + 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 + bool calc (vector& 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 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& in) + { + DE_UNREF(in); + + return 256.0; // This is not a precision test. Value is not from spec + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 16.0; // This is not a precision test. Value is not from spec + } + + template + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 6.0; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 2.0; + } + + template + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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(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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 2 * 5.0; // This is not a precision test. Value is not from spec + } + + template + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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 + bool calc (vector& 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(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 + bool calc (vector& 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 + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 4.0; // This is not a precision test. Value is not from spec + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 16.0; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 4.0; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 4.0; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 4.0; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 4.0; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 4.0; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 256.0; // This is not a precision test. Value is not from spec + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 8192.0; // This is not a precision test. Value is not from spec + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 16.0; // This is not a precision test. Value is not from spec + } + + template + bool calc (vector& 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(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& in) + { + DE_UNREF(in); + + return 2.0; + } + + template + bool calc (vector& 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(-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< +struct fp16Transpose : public fp16MatrixBase +{ + virtual double getULPs(vector& in) + { + DE_UNREF(in); + + return 1.0; + } + + deUint32 getComponentValidity () + { + return getComponentMatrixValidityMask(rows, cols); + } + + template + bool calc (vector& 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 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 +struct fp16MatrixTimesScalar : public fp16MatrixBase +{ + virtual double getULPs(vector& in) + { + DE_UNREF(in); + + return 4.0; + } + + deUint32 getComponentValidity () + { + return getComponentMatrixValidityMask(cols, rows); + } + + template + bool calc(vector& 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 +struct fp16VectorTimesMatrix : public fp16MatrixBase +{ + fp16VectorTimesMatrix() : fp16MatrixBase() + { + flavorNames.push_back("EmulatingFP16"); + flavorNames.push_back("FloatCalc"); + } + + virtual double getULPs (vector& in) + { + DE_UNREF(in); + + return (8.0 * cols); + } + + deUint32 getComponentValidity () + { + return getComponentMatrixValidityMask(cols, 1); + } + + template + bool calc (vector& 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(s), getULPs(in)); + max[colNdx] = getMax(static_cast(s), getULPs(in)); + } + } + else + { + TCU_THROW(InternalError, "Unknown flavor"); + } + + return true; + } +}; + +template +struct fp16MatrixTimesVector : public fp16MatrixBase +{ + fp16MatrixTimesVector() : fp16MatrixBase() + { + flavorNames.push_back("EmulatingFP16"); + flavorNames.push_back("FloatCalc"); + } + + virtual double getULPs (vector& in) + { + DE_UNREF(in); + + return (8.0 * rows); + } + + deUint32 getComponentValidity () + { + return getComponentMatrixValidityMask(rows, 1); + } + + template + bool calc (vector& 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(s), getULPs(in)); + max[rowNdx] = getMax(static_cast(s), getULPs(in)); + } + } + else + { + TCU_THROW(InternalError, "Unknown flavor"); + } + + return true; + } +}; + +template +struct fp16MatrixTimesMatrix : public fp16MatrixBase +{ + fp16MatrixTimesMatrix() : fp16MatrixBase() + { + flavorNames.push_back("EmulatingFP16"); + flavorNames.push_back("FloatCalc"); + } + + virtual double getULPs (vector& in) + { + DE_UNREF(in); + + return 32.0; + } + + deUint32 getComponentValidity () + { + return getComponentMatrixValidityMask(colsR, rowsL); + } + + template + bool calc (vector& 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(s), getULPs(in)); + max[ndx] = getMax(static_cast(s), getULPs(in)); + } + } + } + else + { + TCU_THROW(InternalError, "Unknown flavor"); + } + + return true; + } +}; + +template +struct fp16OuterProduct : public fp16MatrixBase +{ + virtual double getULPs (vector& in) + { + DE_UNREF(in); + + return 2.0; + } + + deUint32 getComponentValidity () + { + return getComponentMatrixValidityMask(cols, rows); + } + + template + bool calc (vector& 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 +struct fp16Determinant; + +template<> +struct fp16Determinant<2> : public fp16MatrixBase +{ + virtual double getULPs (vector& in) + { + DE_UNREF(in); + + return 128.0; // This is not a precision test. Value is not from spec + } + + deUint32 getComponentValidity () + { + return 1; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 128.0; // This is not a precision test. Value is not from spec + } + + deUint32 getComponentValidity () + { + return 1; + } + + template + bool calc (vector& 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& in) + { + DE_UNREF(in); + + return 128.0; // This is not a precision test. Value is not from spec + } + + deUint32 getComponentValidity () + { + return 1; + } + + template + bool calc (vector& 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 +struct fp16Inverse; + +template<> +struct fp16Inverse<2> : public fp16MatrixBase +{ + virtual double getULPs (vector& 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 + bool calc (vector& 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 +bool compareFP16ArithmeticFunc (const std::vector& inputs, const vector& outputAllocs, const std::vector& 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 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 successfulRuns (RES_COMPONENTS, successfulRunsPerComponent); + std::vector 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 iterationCalculatedFP16 (resultStep, 0); + vector iterationEdgeMin (resultStep, 0.0); + vector iterationEdgeMax (resultStep, 0.0); + vector 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(arguments, &iterationCalculatedFP16[componentNdx], &iterationEdgeMin[componentNdx], &iterationEdgeMax[componentNdx]); + else + funcCallResult = func.template calc(arguments, &iterationCalculatedFP16[componentNdx], &iterationEdgeMin[componentNdx], &iterationEdgeMax[componentNdx]); + + if (!funcCallResult) + { + iterationValidated = false; + + if (callOncePerComponent) + continue; + else + break; + } + } + + if ((componentValidityMask != 0) && (componentValidityMask & (1< getFloat16a (de::Random& rnd, deUint32 count) +{ + vector 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(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(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 getInputData1 (deUint32 seed, size_t count, size_t argNo) +{ + DE_UNREF(argNo); + + de::Random rnd(seed); + + return getFloat16a(rnd, static_cast(count)); +} + +static inline vector getInputData2 (deUint32 seed, size_t count, size_t argNo) +{ + de::Random rnd (seed); + size_t newCount = static_cast(deSqrt(double(count))); + + DE_ASSERT(newCount * newCount == count); + + vector float16 = getFloat16a(rnd, static_cast(newCount)); + + return squarize(float16, static_cast(argNo)); +} + +static inline vector getInputData3 (deUint32 seed, size_t count, size_t argNo) +{ + if (argNo == 0 || argNo == 1) + return getInputData2(seed, count, argNo); + else + return getInputData1(seed< getInputData (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo) +{ + DE_UNREF(stride); + + vector 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 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 getInputDataAC (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo) +{ + vector 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 getInputDataA (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo) +{ + vector 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 getInputDataPI (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo) +{ + vector 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 getInputDataP (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo) +{ + vector 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(~0x8000); + } + + return result; +} + +vector 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 result; + + if (argNo == 0) + result = getInputData2(seed, count, argNo); + else + { + const size_t alignedCount = (compCount == 3) ? 4 : compCount; + const size_t newCountX = static_cast(deSqrt(double(count * alignedCount))); + const size_t newCountY = count / newCountX; + de::Random rnd (seed); + vector float16 = getFloat16a(rnd, static_cast(newCountX)); + + DE_ASSERT(newCountX * newCountX == alignedCount * count); + + for (size_t numIdx = 0; numIdx < newCountX; ++numIdx) + { + const vector tmp(newCountY, float16[numIdx]); + + result.insert(result.end(), tmp.begin(), tmp.end()); + } + } + + DE_ASSERT(result.size() == count); + + return result; +} + +vector 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 result; + + result = getFloat16a(rnd, static_cast(count)); + + DE_ASSERT(result.size() == count); + + return result; +} + +vector 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 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 getInputDataSS (deUint32 seed, size_t count, size_t compCount, size_t stride, size_t argCount, size_t argNo) +{ + vector 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 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 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 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 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 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 getConvertCaseFragments (string instruction, const ConvertCase& convertCase) +struct Math16TestType { - map params = convertCase.m_asmTypes; - map 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 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 +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 group(new tcu::TestCaseGroup(testCtx, name.c_str(), instruction.c_str())); - vector 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::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 float16DummyOutput (iterations * numFloatsPerResultType, 0); + VulkanFeatures features; + SpecResource specResource; + map specs; + map fragments; + vector 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 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 +tcu::TestCaseGroup* createFloat16ArithmeticSet (tcu::TestContext& testCtx) { - de::MovePtr group(new tcu::TestCaseGroup(testCtx, name.c_str(), instruction.c_str())); - vector testCases; + DE_STATIC_ASSERT(C >= 1 && C <= 4); - createConvertCases(testCases, instruction); + const std::string testGroupName (string("arithmetic_") + de::toString(C)); + de::MovePtr 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::const_iterator test = testCases.begin(); test != testCases.end(); ++test) + for (deUint32 testFuncIdx = 0; testFuncIdx < DE_LENGTH_OF_ARRAY(testFuncs); ++testFuncIdx) { - map fragments = getConvertCaseFragments(instruction, *test); - VulkanFeatures vulkanFeatures; - vector features; - GraphicsResources resources; - vector 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(testCtx, *testGroup.get(), C, testFunc); } - return group.release(); + + return testGroup.release(); +} + +template +tcu::TestCaseGroup* createFloat16ArithmeticSet (tcu::TestContext& testCtx) +{ + const std::string testGroupName ("arithmetic"); + de::MovePtr 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(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 testGroup (new tcu::TestCaseGroup(testCtx, "float16", "Float 16 tests")); + + testGroup->addChild(createOpConstantFloat16Tests(testCtx)); + testGroup->addChild(createFloat16LogicalSet(testCtx)); + testGroup->addChild(createFloat16FuncSet(testCtx)); + testGroup->addChild(createDerivativeTests<256, 1>(testCtx)); + testGroup->addChild(createDerivativeTests<256, 2>(testCtx)); + testGroup->addChild(createDerivativeTests<256, 4>(testCtx)); + testGroup->addChild(createFloat16VectorExtractSet(testCtx)); + testGroup->addChild(createFloat16VectorInsertSet(testCtx)); + testGroup->addChild(createFloat16VectorShuffleSet(testCtx)); + testGroup->addChild(createFloat16CompositeConstructSet(testCtx)); + testGroup->addChild(createFloat16CompositeInsertExtractSet(testCtx, "OpCompositeExtract")); + testGroup->addChild(createFloat16CompositeInsertExtractSet(testCtx, "OpCompositeInsert")); + testGroup->addChild(createFloat16ArithmeticSet(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 testGroup (new tcu::TestCaseGroup(testCtx, "float16", "Float 16 tests")); + + testGroup->addChild(createFloat16OpConstantCompositeGroup(testCtx)); + testGroup->addChild(createFloat16LogicalSet(testCtx)); + testGroup->addChild(createFloat16FuncSet(testCtx)); + testGroup->addChild(createFloat16VectorExtractSet(testCtx)); + testGroup->addChild(createFloat16VectorInsertSet(testCtx)); + testGroup->addChild(createFloat16VectorShuffleSet(testCtx)); + testGroup->addChild(createFloat16CompositeConstructSet(testCtx)); + testGroup->addChild(createFloat16CompositeInsertExtractSet(testCtx, "OpCompositeExtract")); + testGroup->addChild(createFloat16CompositeInsertExtractSet(testCtx, "OpCompositeInsert")); + testGroup->addChild(createFloat16ArithmeticSet(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()); diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.hpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.hpp index 788fc18..3033034 100644 --- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.hpp +++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.hpp @@ -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 *//*--------------------------------------------------------------------*/ diff --git a/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt b/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt index b746a1d..4b43bf3 100644 --- a/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt @@ -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 diff --git a/external/vulkancts/mustpass/1.1.2/vk-default.txt b/external/vulkancts/mustpass/1.1.2/vk-default.txt index 3f8d1c1..498b2be 100644 --- a/external/vulkancts/mustpass/1.1.2/vk-default.txt +++ b/external/vulkancts/mustpass/1.1.2/vk-default.txt @@ -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 diff --git a/framework/common/tcuFloat.hpp b/framework/common/tcuFloat.hpp index fcadc12..eb1c9c1 100644 --- a/framework/common/tcuFloat.hpp +++ b/framework/common/tcuFloat.hpp @@ -132,6 +132,8 @@ typedef Float Float typedef Float Float32; //!< IEEE 754 32-bit floating-point value typedef Float Float64; //!< IEEE 754 64-bit floating-point value +typedef Float Float16Denormless; //!< IEEE 754-2008 16-bit floating-point value without denormalized support + template inline Float::Float (void) : m_value(0) @@ -226,8 +228,8 @@ Float Float::constructBits (int sign, int exponent, StorageType mantissaBits) { - const StorageType signBit = sign < 0 ? 1 : 0; - const StorageType exponentBits = exponent + ExponentBias; + const StorageType signBit = static_cast(sign < 0 ? 1 : 0); + const StorageType exponentBits = static_cast(exponent + ExponentBias); DE_ASSERT(sign == +1 || sign == -1 ); DE_ASSERT(exponentBits >> ExponentBits == 0);