From abbf1c4efd3388dcfe59d125e5f33140c444a53a Mon Sep 17 00:00:00 2001 From: Maciej Jesionowski Date: Fri, 18 Mar 2016 16:15:47 +0100 Subject: [PATCH] Add tessellation shader tests (ported from ES 3.1) Changes with respect to original tests: - Transform Feedback replaced with SSBO usage (impacted some failure conditions) - Geometry shader had to be used in some situations - GL queries replaced with Vulkan limits checks - Negative tests not ported due to ShaderLibrary limitation (shaders that fail compilation aren't supported) Mustpass exclusions: - Tests in `user_defined_io` group --- external/fetch_sources.py | 2 +- external/glslang/CMakeLists.txt | 9 + .../data/vulkan/data/tessellation/barrier_ref.png | Bin 0 -> 1339 bytes .../fill_cover_quads_equal_spacing_ref_0.png | Bin 0 -> 1451 bytes .../fill_cover_quads_equal_spacing_ref_1.png | Bin 0 -> 1497 bytes .../fill_cover_quads_equal_spacing_ref_2.png | Bin 0 -> 1464 bytes ...l_cover_quads_fractional_even_spacing_ref_0.png | Bin 0 -> 1496 bytes ...l_cover_quads_fractional_even_spacing_ref_1.png | Bin 0 -> 1502 bytes ...l_cover_quads_fractional_even_spacing_ref_2.png | Bin 0 -> 1519 bytes ...ll_cover_quads_fractional_odd_spacing_ref_0.png | Bin 0 -> 1451 bytes ...ll_cover_quads_fractional_odd_spacing_ref_1.png | Bin 0 -> 1487 bytes ...ll_cover_quads_fractional_odd_spacing_ref_2.png | Bin 0 -> 1454 bytes .../fill_cover_triangles_equal_spacing_ref_0.png | Bin 0 -> 1802 bytes .../fill_cover_triangles_equal_spacing_ref_1.png | Bin 0 -> 1795 bytes .../fill_cover_triangles_equal_spacing_ref_2.png | Bin 0 -> 1789 bytes ...ver_triangles_fractional_even_spacing_ref_0.png | Bin 0 -> 1812 bytes ...ver_triangles_fractional_even_spacing_ref_1.png | Bin 0 -> 1807 bytes ...ver_triangles_fractional_even_spacing_ref_2.png | Bin 0 -> 1815 bytes ...over_triangles_fractional_odd_spacing_ref_0.png | Bin 0 -> 1802 bytes ...over_triangles_fractional_odd_spacing_ref_1.png | Bin 0 -> 1798 bytes ...over_triangles_fractional_odd_spacing_ref_2.png | Bin 0 -> 1785 bytes .../fill_overlap_quads_equal_spacing_ref_0.png | Bin 0 -> 1905 bytes .../fill_overlap_quads_equal_spacing_ref_1.png | Bin 0 -> 2267 bytes .../fill_overlap_quads_equal_spacing_ref_2.png | Bin 0 -> 2747 bytes ...overlap_quads_fractional_even_spacing_ref_0.png | Bin 0 -> 2018 bytes ...overlap_quads_fractional_even_spacing_ref_1.png | Bin 0 -> 1888 bytes ...overlap_quads_fractional_even_spacing_ref_2.png | Bin 0 -> 2598 bytes ..._overlap_quads_fractional_odd_spacing_ref_0.png | Bin 0 -> 1905 bytes ..._overlap_quads_fractional_odd_spacing_ref_1.png | Bin 0 -> 2301 bytes ..._overlap_quads_fractional_odd_spacing_ref_2.png | Bin 0 -> 2724 bytes .../fill_overlap_triangles_equal_spacing_ref_0.png | Bin 0 -> 8133 bytes .../fill_overlap_triangles_equal_spacing_ref_1.png | Bin 0 -> 7446 bytes .../fill_overlap_triangles_equal_spacing_ref_2.png | Bin 0 -> 11452 bytes ...lap_triangles_fractional_even_spacing_ref_0.png | Bin 0 -> 8311 bytes ...lap_triangles_fractional_even_spacing_ref_1.png | Bin 0 -> 7443 bytes ...lap_triangles_fractional_even_spacing_ref_2.png | Bin 0 -> 12479 bytes ...rlap_triangles_fractional_odd_spacing_ref_0.png | Bin 0 -> 8133 bytes ...rlap_triangles_fractional_odd_spacing_ref_1.png | Bin 0 -> 8127 bytes ...rlap_triangles_fractional_odd_spacing_ref_2.png | Bin 0 -> 11452 bytes .../vulkan/data/tessellation/gl_position_ref.png | Bin 0 -> 1527 bytes .../tessellation/isolines_equal_spacing_ref_0.png | Bin 0 -> 9151 bytes .../tessellation/isolines_equal_spacing_ref_1.png | Bin 0 -> 12130 bytes .../tessellation/isolines_equal_spacing_ref_2.png | Bin 0 -> 4564 bytes .../isolines_fractional_even_spacing_ref_0.png | Bin 0 -> 9667 bytes .../isolines_fractional_even_spacing_ref_1.png | Bin 0 -> 8368 bytes .../isolines_fractional_even_spacing_ref_2.png | Bin 0 -> 5644 bytes .../isolines_fractional_odd_spacing_ref_0.png | Bin 0 -> 9151 bytes .../isolines_fractional_odd_spacing_ref_1.png | Bin 0 -> 12130 bytes .../isolines_fractional_odd_spacing_ref_2.png | Bin 0 -> 4143 bytes .../patch_vertices_10_in_5_out_ref.png | Bin 0 -> 1584 bytes .../patch_vertices_5_in_10_out_ref.png | Bin 0 -> 1701 bytes .../data/tessellation/primitive_id_tcs_ref.png | Bin 0 -> 865 bytes .../data/tessellation/primitive_id_tes_ref.png | Bin 0 -> 865 bytes .../tessellation/user_defined_io_isolines_ref.png | Bin 0 -> 903 bytes .../tessellation/user_defined_io_quads_ref.png | Bin 0 -> 873 bytes .../tessellation/user_defined_io_triangles_ref.png | Bin 0 -> 1378 bytes external/vulkancts/modules/vulkan/CMakeLists.txt | 3 + .../modules/vulkan/tessellation/CMakeLists.txt | 37 + .../vktTessellationCommonEdgeTests.cpp | 515 +++++ .../vktTessellationCommonEdgeTests.hpp | 40 + .../vktTessellationCoordinatesTests.cpp | 650 ++++++ .../vktTessellationCoordinatesTests.hpp | 40 + .../vktTessellationFractionalSpacingTests.cpp | 582 ++++++ .../vktTessellationFractionalSpacingTests.hpp | 40 + .../vktTessellationInvarianceTests.cpp | 2204 ++++++++++++++++++++ .../vktTessellationInvarianceTests.hpp | 40 + .../tessellation/vktTessellationLimitsTests.cpp | 140 ++ .../tessellation/vktTessellationLimitsTests.hpp | 40 + .../tessellation/vktTessellationMiscDrawTests.cpp | 612 ++++++ .../tessellation/vktTessellationMiscDrawTests.hpp | 40 + .../vktTessellationPrimitiveDiscardTests.cpp | 604 ++++++ .../vktTessellationPrimitiveDiscardTests.hpp | 40 + .../vktTessellationShaderInputOutputTests.cpp | 862 ++++++++ .../vktTessellationShaderInputOutputTests.hpp | 40 + .../vulkan/tessellation/vktTessellationTests.cpp | 69 + .../vulkan/tessellation/vktTessellationTests.hpp | 40 + .../tessellation/vktTessellationUserDefinedIO.cpp | 1034 +++++++++ .../tessellation/vktTessellationUserDefinedIO.hpp | 40 + .../vulkan/tessellation/vktTessellationUtil.cpp | 1170 +++++++++++ .../vulkan/tessellation/vktTessellationUtil.hpp | 394 ++++ .../tessellation/vktTessellationWindingTests.cpp | 437 ++++ .../tessellation/vktTessellationWindingTests.hpp | 40 + .../vulkancts/modules/vulkan/vktTestPackage.cpp | 2 + .../vulkancts/mustpass/1.0.0/src/test-issues.txt | 3 + external/vulkancts/mustpass/1.0.0/vk-default.txt | 294 +++ 85 files changed, 10062 insertions(+), 1 deletion(-) create mode 100644 external/vulkancts/data/vulkan/data/tessellation/barrier_ref.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_equal_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_equal_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_equal_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_even_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_even_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_even_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_odd_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_odd_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_odd_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_equal_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_equal_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_equal_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_even_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_even_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_even_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_odd_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_odd_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_odd_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_equal_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_equal_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_equal_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_even_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_even_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_even_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_odd_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_odd_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_odd_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_equal_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_equal_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_equal_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_even_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_even_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_even_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_odd_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_odd_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_odd_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/gl_position_ref.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/isolines_equal_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/isolines_equal_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/isolines_equal_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_even_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_even_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_even_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_odd_spacing_ref_0.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_odd_spacing_ref_1.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_odd_spacing_ref_2.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/patch_vertices_10_in_5_out_ref.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/patch_vertices_5_in_10_out_ref.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/primitive_id_tcs_ref.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/primitive_id_tes_ref.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/user_defined_io_isolines_ref.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/user_defined_io_quads_ref.png create mode 100644 external/vulkancts/data/vulkan/data/tessellation/user_defined_io_triangles_ref.png create mode 100644 external/vulkancts/modules/vulkan/tessellation/CMakeLists.txt create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationCommonEdgeTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationCommonEdgeTests.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationFractionalSpacingTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationFractionalSpacingTests.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationInvarianceTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationInvarianceTests.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationLimitsTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationLimitsTests.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationMiscDrawTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationMiscDrawTests.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationPrimitiveDiscardTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationPrimitiveDiscardTests.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationShaderInputOutputTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationShaderInputOutputTests.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationTests.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.hpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationWindingTests.cpp create mode 100644 external/vulkancts/modules/vulkan/tessellation/vktTessellationWindingTests.hpp diff --git a/external/fetch_sources.py b/external/fetch_sources.py index 67024d5..1b814db 100644 --- a/external/fetch_sources.py +++ b/external/fetch_sources.py @@ -174,7 +174,7 @@ PACKAGES = [ "spirv-tools"), GitRepo( "https://github.com/KhronosGroup/glslang.git", - "5639f3aca5b75cbe5419a623eecf5e3794fab917", + "3357d870e455005a3781743e77403572eefb60d7", "glslang"), ] diff --git a/external/glslang/CMakeLists.txt b/external/glslang/CMakeLists.txt index 7c040e3..9ad2973 100644 --- a/external/glslang/CMakeLists.txt +++ b/external/glslang/CMakeLists.txt @@ -29,6 +29,7 @@ if (EXISTS ${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/CodeGen.cpp) ${GLSLANG_ABS_PATH}/glslang/MachineIndependent ${GLSLANG_ABS_PATH}/glslang/GenericCodeGen ${GLSLANG_ABS_PATH}/glslang/OSDependent + ${GLSLANG_ABS_PATH}/hlsl ${GLSLANG_ABS_PATH}/OGLCompilersDLL ${GLSLANG_ABS_PATH}/SPIRV ) @@ -51,6 +52,7 @@ if (EXISTS ${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/CodeGen.cpp) ${GLSLANG_ABS_PATH}/glslang/MachineIndependent/limits.cpp ${GLSLANG_ABS_PATH}/glslang/MachineIndependent/linkValidate.cpp ${GLSLANG_ABS_PATH}/glslang/MachineIndependent/parseConst.cpp + ${GLSLANG_ABS_PATH}/glslang/MachineIndependent/propagateNoContraction.cpp ${GLSLANG_ABS_PATH}/glslang/MachineIndependent/reflection.cpp ${GLSLANG_ABS_PATH}/glslang/MachineIndependent/preprocessor/Pp.cpp ${GLSLANG_ABS_PATH}/glslang/MachineIndependent/preprocessor/PpAtom.cpp @@ -63,10 +65,17 @@ if (EXISTS ${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/CodeGen.cpp) ${GLSLANG_ABS_PATH}/glslang/GenericCodeGen/Link.cpp ${GLSLANG_ABS_PATH}/OGLCompilersDLL/InitializeDll.cpp + ${GLSLANG_ABS_PATH}/hlsl/hlslGrammar.cpp + ${GLSLANG_ABS_PATH}/hlsl/hlslOpMap.cpp + ${GLSLANG_ABS_PATH}/hlsl/hlslParseHelper.cpp + ${GLSLANG_ABS_PATH}/hlsl/hlslScanContext.cpp + ${GLSLANG_ABS_PATH}/hlsl/hlslTokenStream.cpp + ${GLSLANG_ABS_PATH}/SPIRV/GlslangToSpv.cpp ${GLSLANG_ABS_PATH}/SPIRV/InReadableOrder.cpp ${GLSLANG_ABS_PATH}/SPIRV/SpvBuilder.cpp ${GLSLANG_ABS_PATH}/SPIRV/SPVRemapper.cpp + ${GLSLANG_ABS_PATH}/SPIRV/Logger.cpp ${GLSLANG_ABS_PATH}/SPIRV/doc.cpp ${GLSLANG_ABS_PATH}/SPIRV/disassemble.cpp diff --git a/external/vulkancts/data/vulkan/data/tessellation/barrier_ref.png b/external/vulkancts/data/vulkan/data/tessellation/barrier_ref.png new file mode 100644 index 0000000000000000000000000000000000000000..1f68aaefc1d3a17b2fed21d85038d5b5c2b43069 GIT binary patch literal 1339 zcmciCe^8Tk9Ki9<^YH8k@a)EJ9BllMp$25?4d)2EiAE4kW$whHJUB*wFr~7QQx|aK ziH93vPKx}Mr-P(JsjloO5wrH}pwmpkNq1Rr_^hlgWAb>h7~=u^?!UV0`itwI@Aq@} zeSg1yz3$s)G?Yl^I2DOeM`TL2zAGSSs`T64?3l2_u=P=4nKyxe*au8=h!d6h7gpF#9 zGU4D^yaRb8^05Bbz7P$;pmJ_~|KkfufxE}N6L}MRacb$##p9cByJDr#Tj@EEfGPs@_`9lnYn(+Q{Or4f- z?awc#u+tFumYtKqYBTq90-Vx>>jq+2Yk^Tao|Fv+6SprGS{3tY1XW4e4fmmN_FUge z1LTsf2Ew#mII;v+$I^Z=mUEq5M?+#Y_o)hEH1#{>)awdextuyex+Vy=P&l%S=*pzc zR@}0bK9_>oXiwQ0xWcgSI6+rEePb&;OS+anz|^*muLKP1`+gdYwwEr0LN{4n07B{2 zWAT({@U_hZ6L{B|8Drus&P?3I-7GnQlEc1^=-R6Xa!GCeBPiFV$DurJzlaG`7f4aA zc6XxW?(EveYoY&(z#?k;ucxxCbAOkHgCLmBN3}a=1aK%nvdUcyCgUohI}6kYAB%1` zzkY_kb6J!Cmo~M(5;hb6u!d3e3dw?ZJq1ks3a4F)QIbB1y%gB?A4KSG(Uuhciw3|{ zn{Tl*3D8r+jS*C@g1;CV0jz5+-P8`oBi_yuP`Et(%YeMfjzt=zDzKWlc`=+ozQi!B zC`7f!(Dbe1WSdg(ue7>g80tQr9h`9Hh$|%e0ZMT7s1bx9!6@oHpm-T#Hwu z!Jf;tbqt9ZR-cp%bZgZp8hxMqh8SI_nngO&%2y*g{zqld-J0hh5g@HYOnIKls6>g{ zu_e0pWFeU6eMeFLoizvLdvB+sd{!6Dc{@tp^j}>0P5D$SM8bi2*tlU)f0ci6aG_~3 WzwE~kLRE6~DT2P(Q1nrusrfHl&%e6> literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_equal_spacing_ref_0.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_equal_spacing_ref_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8340b251a532aa17fda0d83460d39497a4248cea GIT binary patch literal 1451 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFNB2O2`kcv5P??(6C_7HJ# z%rf|Wf77$YwhmkGPB@ulJ5x~mg1_9IB79qH zSP~{p**IU7tC-^e!?8Gbkzc|Mem(ni4PQ7jNE!av$g+@^amT?I*A>{lvOG{)96wtk zMwy{L@k6z6%XyXu>~8;kl0K+2{y6$#bH~ByFBl|jk580s-T|cNFFC59#Ng)N+ah6O z2Bf|Hdk-#VO8C zD~yw@^}x2R$!3`Izrg=J?@owqc|hBorERxAf!MZ-<-kw=+^@H$a5FSXUa00YkW(dew?BhB)sz$H)SjzZ#Sjf|%77XS+`HdGHAI6n#FU%A zfNKb4Kk!@rT0wd@)CMh}Ya_hhs>LG5|8(XD%nEB(rp<;Zf+UO$-i#j@1+JBqE=Cc( z3=;iTkh&UK6qJaTGd<8}*f4$b>{3XuK@t_vlaOdYPi@qa@MC@Owd(6XSqJBI^Ve{1 zLrgETV)!S-P`zVQC?u{RiT=h?h93eP*}HcIqKG~Pi>|u43=%aESFh1xuwywCm1X`C zV)QEJ2a*igJ2tz*wY~{ss9|r|`7ZAQBzfHBYe;7}b1|tJ8sMG`Hp~fY!e$r4LuD50 zfpP|k#ZRw6l3T=Oh6*-^__gNHSf0gxz?k9Ji;cR_^rgx$kMTm-dS7^g`oPm*R+V=W zVqGaO(7HR9tDT|NRRgVCaIWJmG_fl(0##?b)+N82Ct+8 zlh>I1y0nS$$6SRClSA46@6Kfk5MmD7a{7gLG}{6dwliBEzwo}z4rKLg`2E7WpUc6M zC*!5(VtrdP235la$AaDCyEuSiKU5OGEZxB{LB{4s@MkIt1ZXP!j=pIoep9)qxfitO{vCN_TH>Ww`9Gb8^4?opXMVbMj+0 zM=)KyT>yX?xiNez0D?~upriPZkY2eTfToBH58HO);?U!k0)6tVZ(>yg=IniDMVDg9 z-Jbr&*T4Ui6C<~dZ49c+(qGr2;o}u%HyBwAtSI1?LMRWBBvL>_gWvfiBy?N$Z9t!qwNL*Z4%Mtof&kVOLe>mx&>dmf)2>U?ld$fjA3JSFIi z$%SE+TfmP$eyv$C6Is@5(0k;qpc)V*N6PM93SR7q`P8SY5zB4k3t#j{1~zX)qc7i5 z1{0!@oy~@bV<0O}Ybgv%z{f3JB9=QSUliuC1LlFU;_~)A>TUSQwx<__Wk*Q)PeMKwpL&m!w-a)?>eeDs76#(-GUfAPhx|P*U#gBTODE+!guLod zY6~gPCgefCTYQI1?3}FZ>v70MgnVUd*-=uafZXp5+a!Q;Thgu|p!)*rRV-Yzb!fYp zH|<4M>k;u}6T3XMb1HUEh{GP6;ReM(<5o|lB;eTtz> zomaZ0*~mzz?TUZ$eBytd9cM;kj{xmtq9-8U9M(YCrvP zfB4G@^G*P@q>gj{L!i_;JUNu48C$L!DfSz-kcRDnk~SY80za0G`T&(?D9Y z84@#e2vu!l-qa$*#D=u*dM}Wf^7n@GNX(9ba}NBBz!?v9#U!rsAh7UCv;!X^@V#p8U;1@N$1rBVtcfLI5z|RT%dQ^9s#Q06Z z7ytJr;qlz0VW+^-dDL~PJ#-Ce`YN;An?`L)DTns++ySdL2C>Mw>f9pKR&mKmyaa9C z+t@ZfWS4p_r~+ZE?5yert5QMNc<-dA;K0^6;3Ym zA!bV%%8&wAoT}4K;ExTiU z?JikMy%Z>2z7G6Y(p9pC)ktzEYnX2trz)JnPP7~Jo|3T3>ovN2T#&{G($NrKq_owT x#2cxlW1>UOw=t~`uv$52j^inv-kZAY16`Z030qtK#-D76T)#Q|>e|HIe*lskAkY8+ literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_equal_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_equal_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..edcb04f806fe77134cdd23eb045d7be90361bff6 GIT binary patch literal 1464 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 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_even_spacing_ref_1.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_even_spacing_ref_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc84fb4c5b9bac8c21da90fe8db3a49c2e68d32 GIT binary patch literal 1502 zcmY+Edo-J89LIle5{XNYSxYdgOGUR%8?-Z3QkS{Rt$JLFn2DaB%}^WTZil~CEy#=a@! zqncM$QH`O)O6NE&Nv_9ggSFnmJLtK>{ffHWXda1!2IplJa}-u!c2#f9)Fn0mOgKv! zlxk9TrKO8MUmuO zasT^N?iDg$aXKQE{+Ps9WL`AP$p@y>nH^pHKe5rW!6c^!i?=i#reD)X2L=b{Y)Wmx zqd#9*Al-{_(uKA@^gKOupjq^tfD;7t3JOc3`V`R3m#I=ElOoar%DbRBVhw*O<>IG? zyp7X0?MCEl-*8`!=js5Sbjlo_a(@{WnC=EmHZbZ>K)F&LHe2|!s#Z-xBysJIgLUg; zlB#HB6v=D-(U$Q70`_AjO5%5V2b~E1B`hiH=wSI9wxDHBxuMgKXx#M}F;UBb1P3tNMcWW_jI2T2hB>+ECy;t?Bl%i?^)+tPRP5}QI zbMDViV@chILGeUXr8y3>vzWB(w)sRNAsvZJXa93k zOWpVS2*{+N+nicu8x|DZz7;o-p=A6zzrx{a2ig6x*jP=H+q>{JSh{NoZZw$}z4UIc zm|MmM&lpL*(0Fy=67q=wIlb%)h36o?92@;=V4L+;lx0(Owb&!O*^TNOs z3%=HLji5&5L68MCh56N4(nHi@QXqe+b&w{KS4dl}fb69!k}g_7PPnypk24!7y+0Gp zQM74FT*JGiy`$Sfnnk-)m5eP_7+9PVbLy$)g5{G&fOkG;M1& literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_even_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_even_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b205d3d9273b903b9ac42c77fec2d57690fd7e86 GIT binary patch literal 1519 zcmZ8hYfuws6urCIKu8dRj7k&}obXT!NNNqJhyhVxw1R>f27~~kpr8e{<<;U2Di56@ z9j!AKRDzj`7KBu!R2XGJ23ud0`Y6R(QwjowLL8z3lBD163U&HxclLhg+;i_a`xQrQ z4w=QD&j)~6VWGiW0WkE60nZ9OVh>!}4Z!_AEI2SK>+C8p%Y8G4%qAe;1_(#sxr1;MxSRnZ_ePxh*SpQQ zM{dAWCOmD*>FwyRdl?_J0@oFHHuv`EtTE-LS3h~%raF-M-%2L7^+c#))3u?BayQ#C z9tC!$`3VEzuqwm2uQ*VG|NNy^vd*^Kfh==2#U`e!;cTxy)$!;-LeDA5`#8~X9;WO= zn&-*JeKEguqo_^aFb;l`X@jyN0ePf<^`5{Y9;xj=e$**#0fdBaY-(3kfnUyst|eA? zt*OrC5C4`ay}|DMo$Z3w*;u-32f78JS)%*RqOR{(sG zNxB4tX-c?v_|k2hOx$2r@_|?|8^$DiuYyLiWo;>fH`4G%1mD}Hu0-$}8ZJlhA(M0| zvu0%jjGGJPIe(nwLJP9sQyX%^e&4IcB?88dR52o)9LR{7%UJW|BY3ga_;|A2ld-8f z8nt)Q_Faj7XPH9hju}k$N%f5@S-c}CqfT@H8Vsq~Z%s7=<)1m)!4Ahb?m6;cHFX8D z;As6c3uRT4S0VtS$r!(B)^lg+Jf`XJR`7>bu_tu>_?sk|WkyWr>_}@xS0NY5 zR*p%%X7og22H@p>N9Tzu2-rDIOT@5s6YHsE&^!2SAI{FVjdX613j1+kN7hZ)9of7iiUZp!T&f-uu*=rg>ZFqDW zHsef1Voj}c8AdMBOCmsS9Q0^HW+CaqchaW`R*r4YTm@o0LGqp;l{ESJfH#-sXqn;2 z=zACoE?s?ew^vLz6=%o1>#URpT)#;8WH(0jj7$m9qS>Er_%rY)THm*4?&F@Z7-j(4 z*JYT`_NubFnSt)(`i0P*lASt}jR20O_KELqHp%xn`sMImbld=yuf+N8V$08PRPG+g z-Z(u;gmN@|um&^O0UHF(B?m!cE_`mK*vTAOobu>^cs7({5vQ1_9v59dQ^=)~;ZYL9 z7_?zoUj=3mLA{b*uBJ#N$j+kS3)v2GT7bSP+Bbm}@Q@aeSDG!D79bp+$nuY?vlPY0 z)qZ%Ge<*U$R22ngSKhGZmln(ALr~I2o{kEb)b7I5U9F<7-RYEgiAbqTb#ac`oH7B< z#hA1@&lnQJ)rZ=q?5WhQ?UqAGA~mN;Y}yh`qeoqxOa z(DrrjfW;j?DQf9^m>jlHq&5)vPu=(>H@xY)ak1a)dLC7fv%WQBGz9WZ{A0HsxPkDV gMa28xWvkFh9JWPYlzkB2hAwglTfaHDCP79qH zSP~{p**IU7tC-^e!?8Gbkzc|Mem(ni4PQ7jNE!av$g+@^amT?I*A>{lvOG{)96wtk zMwy{L@k6z6%XyXu>~8;kl0K+2{y6$#bH~ByFBl|jk580s-T|cNFFC59#Ng)N+ah6O z2Bf|Hdk-#VO8C zD~yw@^}x2R$!3`Izrg=J?@owqc|hBorERxAf!MZ-<-kw=+^@H$a5FSXUa00YkW(dew?BhB)sz$H)SjzZ#Sjf|%77XS+`HdGHAI6n#FU%A zfNKb4Kk!@rT0wd@)CMh}Ya_hhs>LG5|8(XD%nEB(rp<;Zf+UO$-i#j@1+JBqE=Cc( z3=;iTkh&UK6qJaTGd<8}*f4$b>{3XuK@t_vlaOdYPi@qa@MC@Owd(6XSqJBI^Ve{1 zLrgETV)!S-P`zVQC?u{RiT=h?h93eP*}HcIqKG~Pi>|u43=%aESFh1xuwywCm1X`C zV)QEJ2a*igJ2tz*wY~{ss9|r|`7ZAQBzfHBYe;7}b1|tJ8sMG`Hp~fY!e$r4LuD50 zfpP|k#ZRw6l3T=Oh6*-^__gNHSf0gxz?k9Ji;cR_^rgx$kMTm-dS7^g`oPm*R+V=W zVqGaO(7HR9tDT|NRRgVCaIWJmG_fl(0##?b)+N82Ct+8 zlh>I1y0nS$$6SRClSA46@6Kfk5MmD7a{7gLG}{6dwliBEzwo}z4rKLg`2E7WpUc6M zC*!5(VtrdP235la$AaDCyEuSiKU5OGEZxB{u%vh}u6-TO+*lHU^C9N@_LeiVO0P3&)y7!&?zVDp-o$sE~ z z(7Y$_-n0@rEq8YRwCD~_SbsX?sD9=)^7LkrGZZ)hHP;vZj@f(T^MDYWQcWpv#KL*Q z8yI!>LRTWel5pL4ac=6C9-57Rog49l{WzzMMe?s-2v?+eb*7?po5&(1EVdk%A4=Pf z+0Q8i;NWje#RzPe0oSh`#3jgJ-}r-+32BKkE@J^3HoAVGdhl}86GVLjZu#}NE)*2=r<9&{*#?Sk zHNmM5yS0m~jO-2Kd)|s~JEuT{qm}XbL9M}1PBx9;C=c2otq4goYekTYsC-IoZ~gmrpnkAkeF@c wFrTMW#atz2qb_$Q(EpM$aO-e+&AG?>0JD1ydjJ3c literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_odd_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_quads_fractional_odd_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f3faa840c0d12fd311b981ec76adc03eabc28dba GIT binary patch literal 1454 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 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_equal_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_equal_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d1c1c9961b0765f6a346c83c008bc0787a632750 GIT binary patch literal 1789 zcma)7Ygm(I7=FHwZ)0P^Hc=3Y;{p=L7@E2m4HOgz86E~v0~rAxieRAFRDw?ek!#mA zvH~OrOem$L12s>GZYZP)f~JBka6%#=(bmUhT^)W@zux;j-1qamKc4$8S}hE< zwsN!r0PFCukhK5^0TG~(i6t(xb^`#pIXq;UNTz)J(+At`gfVun@%yEB(Nk6pHG}&w z_$T$?gq}2cU!^`&uxccw=j0GMWU7BS7o^SzE*5g*Kxe=5p2L7Ge$Mn|n)m8AC=%Z2X?7Rj{ zwKq*}E@9kcf%Vpe>AHNC4f1O0i56|>tac9|d9Y1BOkOd}`RwHMseFk5dDVUUXnK(@ z4wWvHo0l^8g@W+i(OggL9#xlYXI|{iErnI@js~)@q{+3{sBCk87V|D&Q`}86 z@K7$^;u3`^+`#hKS7A8M zePlmmC-TDFVJSP;rfbR`aV@1#bmm#X2gimu&>W$_A+_5==lk^{h6{d^*3mnAqniMv z3w+S)NZ8ri0bZLq)fUhjUKErHYdPE}5&QODhF9WZ6-TEIhmc|Y(M+rlt^c_tSsC5$ z$$=5gToz+4KG)ZE%aJ9)en{-&3mKIq8|Hh0^vh^>1{06w*qu1ceT#{JQ7nK3qAwa6 zI=X&9268e64m?%*IDz44ip8}vSH^B+=}WC)ytC1t2)LJ(0BR6 zts$$Pn4LngB}}gB0g=W#J34EBx9*EukEfmMfkiS{uHFCU5q^(|Zd zn#~F^33xI4L8SJ~R$mD?MF}dgrzu2<8Zid*YO=vwG<)UiJI}XT!n{LUp()I?W71KSU zKP{mGH=&3i-i9w<#C=Nx{yYXf-|c5o)qCQGz@4#PpMPUH87aqa0GjN9@TfYnR;fs6>9ecLo-GeRA^bG2}KCsfdoB zj(-lr`M6N+Ytlr*w&g)7@pidg9N@dDK24Kr-+u|OU`P*Y2;@Q_?z)MVULV^T^nZszq`B#Z6n{HNN;+S%adS5x7aPg4OIPGtIYlR=$W~tHds2sBWvh|t3M}V4Z>FlLo~}JdA|XDeYf-g literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_even_spacing_ref_0.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_even_spacing_ref_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9308abfcd5b85f21c37694a679be8ceb8625230a GIT binary patch literal 1812 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 F?;j6R((eEO literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_even_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_even_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..29a85e06fda575d5042daf650f6bcbf4ea1b6bf7 GIT binary patch literal 1815 zcmaJ?YgAKb7Craol3W5YQ4}IbLF6%mA}BS;fF?kSWUTU#3Mj=0Eui3lRV?x{5`~J6 zcC?5s$fHXgik6195(JeSvDV5XEL4z3C5&Z^7~pCUG7!kzg!V^QXU(sB*4byBZ=dg; zy}uJ-TQ{+owoCwEi9&=C00_^p!0Q9FKVL)VN+33LTk8J%o$HOyc2EE5O ztu4M=XD@c%A|La$2)PkFa)xd-m?rOkMi)+xk2pZXX%KiJ5-|!24D!tZvjW@|IPZev zh5rlSlbQa1J5$(vNb+y@S=&&2dZDDioi!VEw~~P*UusbuamKEj3uyKX z!;0nAB4GCKCi#oX)l097h5Q0GAd|D-0+L?n*%57q8lBC%g^EUt0z#y+%j)=_;` z`*Xh&Tx3J-qm58d!EAim(v7I6JA1eNIP-)D_71$rhifUIrt#Vm5-UQ;Ry*mY8L1gxNSyKce!HVP5)N&V_3og3{7Oh1j&hN#M zrfrYCbjLc(36{KtIlC`}kc>AcD?lJ?rKM*eLwln-h+zb%#o}nXAlfigcr{T$H_D`_ zA>M)m_@NlMX((*|y4=FfD4Rbe4qK;-;F=*!$}%cx@%MW-TLWJ24^Is(2e!8r&1ZSp z7SXowlK&{4W>nn|?E__Ikndq3nKF>KW3&mTtl~UIOtaVZnp9}z&D%pM^dU_(%YXFY zJbr~v;R$~)|Fh|6oaX`EN2--{Xg`&+e~C%Ksed)Hdn?tb<;tq?os%RrLlt|zo>F*f zvJuY+ZYwqM!tAUmQWMni_d0HqOp_1roGI!-p*&MR%|U9k&XW0Jza_@v#Ca~%P2RGH zaYGfKYM$)}ln?x(L}CfkUCmoc@>pBiFMsqG**1jC5Ublwm0$RMcf#U-`p;GdAxEk_ zf1}>{q*t!`qhCGw6m&etYd-N~rkQ{BuY%y*vETVw3#w`r$nM>bv1>#=fwpy7_r~P? zqiZI1>0i9M@LCyoDaNz*;YON_MR2{7_KXxtoZxv|dDV+%GY*oeEb5JUog!E$>ACjB z=X)H`ydMgsZ1P`k;PTc1*G|!(JaWV~mO$*>k%~ zjnU_amg-wfbt^`By26M-Y}uY3TEeZ1<6ZT3#CR(0X2Np?Ux-o7{a5TJ+2O{P6(U=G z&&fw*a+*;D-X8 zQ;@=)&|>06;oMf4aygtdZ<(^3-hqY*cW^DUSZG-6loxlR538)I3HQ>>;zaQF0(WSSkSL4kZX2FJYln(b9Tph`@`9D3&zU;9-$8E94x733NqIb3mYXimk{{>DV B-R1xQ literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_odd_spacing_ref_0.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_odd_spacing_ref_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d6b54283819683aed28683e3c3c120ebe3c5b26c GIT binary patch literal 1802 zcma)-dsK{h7{{M?dgqqfhA<;4L~h+@wK*MTN^}v?%9chm6%$?DCxgtqln}x?UBr@; zTMEO3Qp1}hmz2v%QO2~Hib|8(j4p5csy+7XIcv}U^?T0q{GRXc{4SsGZ{OlYp2mh| zh5%sf?d9PQfRG^q3>rBIHeL_|(4KjFxGj~QXse6a_`-*kxa7-6dF5>$f4AelqYpZt zaocAN%bc3s>+Q;{OK!-ww1gDNK+WJa^qY zW^oTH3Jtg&Z;!T&z^DO1eG%>o3nb91s#I=`wy-d2?lpa7LgpM~YV=@A!sNRZ+7R3c z7d*l6m89bo)6JaX5cKG|e7;fRrz^-5A0g48GZJq?d_~Q?Ml((&)gfIwa3X?x5{y>j zcN)hW)LP+?*kfkN?Ae5D7Js?Y+4?mIlh$rD?y9FWAtbTAfx!!Db8TIL2 zt!0^VttXf{9B$a!7^7$CXmbPO524isV0W!gB4v|-?17@H(M&&vjhh4#Jw;ikHXw2F zrlUFY#x{D|Q&duoYD{SnmTGMisxhF6dFuCNsAiwrtF$e>_J~x( z?`|?5SO_vMXI4=Q@9W9q^)uWjw)ds!fs-Im?~sBKyyvpUVqNS?%ZEzV80;OpqRc;H zq8()0XIzUr7oSMUb;47a{OeBc_9$47v$zkZ!EHcSdOytwH5YxN8$ zPNd<#$fYq|$@zoWC_<6-M9Jp^b)(1*k|*a$P$AbJTjJV48RY2}9sgodeW1pCs7&IP z8wGL1p3hzC2}7xuwq(cZtR}mHZyc_mXgYa$RZ-^!gLDRVg3G|^Ll%YFAOBe_OE``CmRWc#_@Apzo+Cz2%MhKe|-r z@RpGJQ-#snHZ|cN4y{e4hal$b3gok%7+Xu^7#64LuD{Q zk-jq%QD@i?*?m;q>a+9(=e`m&Omid(^H~<$_rjl)2(WbN4ca<7O$8?l7@RfQv+}%! zu*jY7N1ErFLO79trN)v|Zy+vAq`gMc;a5x7OhWtaecUfkV&dKm>Eu-%ej5bd*4`j}1vOVDq77RDq{((IZ$7gh}>=>8~_Kac+8-nz*0O}} z81K8wNmZF6&0eh63SB<~=kL3e689V_Geq5 o!|seGKb^E ziWaoAQi~|a)^-X)B^b+(`XfQxQYjFc1p!&|giXdw$$= zXYS{Fj>T+!mA%k?Apo!=Bf_=;AghUhNmv(=tU4Kh=!^^t7Anq8{##o9lfUynUMn*j zPFs8@C4Vn(_iET3uCG+(w_jRP&$!oSmR|`<6MRb7SuipiheP&&F9xO$IBo&YG7#_( zDaN4nPaOhf+eqetz`5||-Lq%Z_HLsm^VL5ZmgcM!dIIVS9Q{U|jwx$?sJ-Sm5eb`Q zz4!L{_7_5`xVI?KOCJs87iMO5vi3WZ$rsp`HD3B~D6f9mRDZb24z0d8NU5C<-NCD> ze<`3hGgF+&U2^W+8zC`8;L`BO=5xoZ$jifdKKMKKnvh!s^cMWK6S;t8IS`T&l*gfV z9ig?NGxrBz-A@_x2`S}{WuTjMkXKn0_-rsG9n}P4yko;2(adibldUX^=sDgg1IF5I zy0`au+a<)JVlF0f{k25Khr>!9Y{R7l{>O*gOl(TPlub&t!^bE6@* z71e5kep`-AB?Y~O2d4kJ9`Px`^ynz1O$EAe*wATybec_ZmYu!Uj}NKP)kM?mNagia zuzp$T!Imc42cnmim|NOtZ^+xrlQs9zBP*%S{D@N)884T?n;Xy>^0Gje{&H9@&NE%z zY+miygxqq6B7>G@B9b3jED(ZoI!}F4{>m<_M4t3;r!M{&Q=nt-DK7O>9fWOZ-Xkl| zR(!!I$zYs*XV&j>Hi!>btWZipe*JAxdf%^?_kjFbeBGBLEqB(zOGDmeduqWgH+gWf zSh|?Jo5sqX%(~rZ52Cj}W~MrkJJJZz7YBjGubs%4dCN{*$Q7jD)rtopOKqGu|7(0I z7pSYJkX|I3>6zZr=pg8G=(Ge>cE%ySBL9|dvbb>}@Z!!u)|xdf0TsQjNS_rvEWf`u zc{>he=X2nzQkR|C{#QmBP!apSU<`z6MfZ*|&@6hM|6My#H5Fd4qm)GsOJ0oCX59kl zTfLOL@Y!M2^Och_L{`KW32H!i#b0@48zS+Kp3T~W#f*I-c+VN}=02^F{TzjZbL>&g z6bPG{B`N#Bb70(#(m|a?8ydg`e7h?|=b7q1QYpRRh)0Ui2^PLN9peH_`97$ljYIDZ zD3J}0kc&guIyO1&kd&9k&ME`=ECw+i0N6v*=mL9UkvO1 zE9<_0!mb(w${M7!gi1F7bJJR=wD7*|h`%&nSp2#zu_3v$lsyk6_gT2l@9<4(oG)!d zbH#Z+!D5qIy1VF)ka=#qJHC5YdK04-cs@vC{Eyv@8^B@0^k;a_s@h}@4 z`sW+kD`~X;;-`zv=NL7Ms$S&6M){1_3;(B2TkSMWSmJRfmE?&x<6LK0j}5#(qsvLA=1o;{%AF{I6X~1WrRyx2+ndLS_YG)KKSBAu(bfJLpXrSmRkf1;Or67BkRtt?RME^L zYPn&7crr9|%z*V15l#DvQ}l-JaR;as`ag=|V^^m>An_#xt;}I4;>K=hSiN0}8a8!W zN>&KDbD>r4E(vP-Qvdn6G4d<|! zL(p2B3fAH^tq3i^&^u`-0&5DC-z-wF@0OX+>ft&&9=5`FQqNu!yCb>lJG=d#v*fBEz?a JT?`Q)`W>b?+mZkP literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_odd_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_cover_triangles_fractional_odd_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..58f335207de9c6593d647ea0a3c1bcbacdcbd90e GIT binary patch literal 1785 zcmb7FYgAKL7T)&~!VM4u$r4nk0u^ZyG*xR`NC+s1DDs+EY>^sdq|R6%f*|tpB1pnQ zB6Z0_g%VpWP7*ZM@~TlTwH8|t9mItoYQRUth{MC;C4^*d`lGdf+SOlYpS{1mzkSv@ z`#U935ur@m1-1ad3|k)@1AtH_0vMfIwx*p)0-zIN!9l{Tn$df4ncG|0A<<_{ua3{@%t7WU#1UR^|eCqw%3#xnt^We~_ka1jdaG&sNj8V9f?;1CXO z)qfhmGF!JsRFyu!s-EXg_#+Po;|!D2x!Ss-+cdYXm0p+UJ&%Mnnw;Ctg?t9_BuUfZ zT$qOuU&}~wBxc~?*Hxr&8)jhRn}npE=l(PlR!1dFr!s;Tp*OcQUNvvPo^kME#d1^Z zny4yR)ssBl#y*fulNY=wHCH(Fy2HWICQ{&7*hrJhi>|hLqIxXwoqu)i--yY)AY}1! zldt3ZmEe;!-o`0-h!Gx6=F~OZI&ke87KGBCu<^nz##dOoYyR6$5g+r6rZ~L?3IFF# zo!DhwC@fKvlO@DFlv{pPP>E?GfvzTZG1~PsEz_xOj$>9CXs%84EvDUY#JxT;8iKXE z(J{Bu2ZtSuo4_O*&*2ozPUZtJb1FdR5!g6aVy4hy+FWyYi8mz z0SAVqgqcA&7Z)x@#aAYDV=4g#=Ys>mlsIq2X~AB^?UOVbO?#9Nx$A2SNH`Ucb$MgW zK@y0DZ?Rw-x6y>j>Qk-KIbdAkiJnK+?;|wJ64rTGm5+($C%*cq#2$EwI_w8)kxudx z?_&3+t)SiPzs}7Y`~w1Ijd$&@(nQTR9e)1TW5PjnD&E7v5szQ!)cBkm>xe*pQyyfV zS(TAdcdo(e=IqeTwYm@P`T>!5mo87Q7^&B5l3hTX8b_D!DjR8dIGF5=%UA_@drq{C zqQFa0!XD-FoM)>fan_L4y&8EcjGyY;v9K8nta5fy^m{;5w50GqdElqH_DB&>H);i% zvl*c1n;TI-kUl{1Tm0qkvDZFyZ+8eb?q#I>?^y1f8teEIVM9`H3Z#miev7 z?~{If!Fd0PKOJz3B$Qp6$q@aeI2_N>>51R;!-b7cPVSh?wGxyv-RzZ`%R~RDP74&FAZht>?m?tzsLv7i=-DnB+2w#A r$Sf;3eU7@mJ5y~eAZuTLfwL@CI=?yiy!;OJr9oIoMDW=)q67a2s;AS( literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_equal_spacing_ref_0.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_equal_spacing_ref_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d240932a5396d3296a3a0d9312f037b4fb36a49c GIT binary patch literal 1905 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 F{{Shyc2EES literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_equal_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_equal_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..61c801dc2b371eb6f85510d5f23a93c61c7d0013 GIT binary patch literal 2747 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 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_even_spacing_ref_0.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_even_spacing_ref_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a9065f65c8b4cbca11fb336978bbca9b34c0d485 GIT binary patch literal 2018 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 IHpR*R0T-PXmjD0& literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_even_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_even_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7f37cd12a5d88e9770f5384b6dee8a79ff7c7594 GIT binary patch literal 2598 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 Dez>Bn literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_odd_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_quads_fractional_odd_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e2187947e0936ffdd9bd2df14d036405c72e08ec GIT binary patch literal 2724 zcmb_ec{r478-Lz+21Ch=eQPW;6{m2BIBJ-zgCip;K%fW#RT4maupsOz0O%zOF}p4J(mKvaqnwWx<8q!WYiA%ME_l>1K8n{w4N-}9$bmu&t><^D``24g^f#q*2mNeS(Wz}oiKc3B7u-~LQA3tKTT5)Jy^qoZGKQj zNm)g>VLqtinc1I;RV)~r8F>6Oh2w6%qxO`Fg9ZdvXD7yn@S)#AfKH+D3<_d&H z-S;*XV5Sy+9J4f+h*S_%X|1z?dJY)0-4;!>MN8lYA0jtd|7qq0M; zPaGkCW{xXq;H!FHGUJ@=_JY2$-^~UAmUXCq%Qx%oi0q75T`ult z#=kE=ij$w8)zN2^I@87;opd@|--J=OTaM(*a2pkmFLEqaAuVO^pY)4^Q?H#@j6})srqm(y`+JDIl8SuXiL7hWx z4iU{QL=0iLsw(Z*ngbtn0o#z5HEil}?J`T1*S&gnEXWgOvA{2}+fk^EkN@bdTv~r6 za_X%p_2)JMHs$WrS-C+JDl6{8`|~;0KZ#M<={i#>j>(?6rW-?B2ba-5L>pHd?l6De zDy^9U)_wNlqSDo4pBh0cdhl!>k2btiQ%3!5bp#KvSb>zDvA5dM_hsjC5O)iY#Lk&) zJIE%f)wnd|Eg!oATH_p(|LN7@temn0quhh=C615djS~dK_@>8rA%-@1)qf*Y6MQiV ze`52D){|hw7_|mwjKQoWNup#)$;rBX>$Z60nupZW5ewEBgCto{T}FeUm8&02)>Wyk z%!hdJD-K$zE=vi2Z+`Onu^&}1!8_v!?5W^ogP&36@Is3Q;3z{{{qqSttIFq<#8OS*8+Fre&jr;AE8(l;ja?+* z>NcBB-NjjPum#^4jLsQ({GLtO3~&{J>6v%BAIRyIUmri*8s;ho(~Iw==dxV2Yv=YI z_oFjfgHfBfh;v@8(BqRh zmSDT#G5lroea{a3D33!jvybGaganbNoP*m=Cj!M!fp_b(`93#10)r`WL0Ik^s*2=? z`H`jOBrI1EVsX(j`5;tTu37a+b-i9qKxnORSKJ*+&S#ibf0Pq}@tGa&Z`gmsrveYoJ(0Ua9+W zf|2trYoK{gXjk>jJVmWu-hKc_eb2WH$eJvhi$`7TglODzsxfGuv}}W@Z*f%3f<1lu znOi46lX_NNGCS3@Y2$MY!qT z9VrZp2a0HeNc_n6K_?#LeM$CAgg-^}CJBg27;#nzA}|9f++c}7 zq+$`r-O>O??kM5#tOA;K%}E|XXDFiILrJyPN4n!$4XpRZMjaY|)RwWAV@MNW=CM<3QR1ynH>DgrRMRIL9M< zG&gDT5XVN?xiglW20SaB>saP!z3I01#GFQe=R|hf*Gw^Z*4?FGk)(zd?0?=B27Xru zYDS*Pm;kM6F*M2wGJ53G6oVp4H-%@@yDzJ3b}B#@Errk8ueG9G=GCR)+nFQ)*Rl-ET4S0Ko!)oy+D#M3~)R=pvliqpd#5R zY|(i^x;eeU5Ptph8nH+Mo!%YM)Lj!&+?@*M^xrs`@1vRuK&MA5#JNBSwHA!He*vxulx_e3 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_equal_spacing_ref_0.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_equal_spacing_ref_0.png new file mode 100644 index 0000000000000000000000000000000000000000..89c3533bdf9610867d17c374d94d1ba17ab10ef4 GIT binary patch literal 8133 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 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_equal_spacing_ref_1.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_equal_spacing_ref_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd94847ad5ee8fe9de0c4127450de0eaf74cb2f5 GIT binary patch literal 7446 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 JYI-*Qe*kCp$msw8 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_equal_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_equal_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e704474a559623f84571b8621350c32817568a GIT binary patch literal 11452 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 PGNg4==SGpb^{f8{p4b6> literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_even_spacing_ref_0.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_even_spacing_ref_0.png new file mode 100644 index 0000000000000000000000000000000000000000..9336230f6766fd3c3f11e1ec9e251ed1459b6fc3 GIT binary patch literal 8311 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 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_even_spacing_ref_1.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_even_spacing_ref_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6a58a2aa939e7305e968886dd185216753ac3c54 GIT binary patch literal 7443 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 Lj~=8G{F443+tIwb literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_even_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_even_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..342e1092ac9c06b08f16a7cdc6537842895f63e9 GIT binary patch literal 12479 zcmeHu_dgYW{O>u(IUL6x2a!EH6e=miamXkcajcU0DXFYvg>#M^BSKU}vNBIbrECtF zEhi%-o9yhZb9~?WKJNV+?hp5uoJUUY@fy$9^Ywhai!nDfkYXzBIQRv)znChd`{orzjJL$)WOlX z9wlKn+R(^VD0Nd8_vY22l-;4}<-}_}=T7w3nn2hM z9yYsWyO5UP2d(}c^Tyn%T=hrNMFVu|o$H2G+ zqFtPvN%a5TWhSiDIKc`JbyNF~=R#ZzVa+hwlQ69|#rv#T214Rxd5y+K5F>sp4&uu8 z+@zTPJg%RK5Bo6dM0cYt+yqUGhH6>usvassg7vck#;o_HSRp&3f&w#kqi-DlO#fHM znF{fMIV3U~q?}HnA$-`QRJb`)MHwjpF`J2pSmYy9hX+)>dx|#ioVY4x0?~}$3Cmwj zktI#848J-2_lV@@qu%9(yXsDLGN};%!#Aim%@`x`gT~&Hf_WNLkIT!|16^H#b}G;X z6$5#(*~~Bd$%nC&vSAHkIaPt#w7riZ7MH@rN9FubIaeS<)6{@!*J7N?Za7a?Jx0Cs zfCT)XFT^)rl{E}wpQhpFfTXKs9Yxc5agvET}KX`)}C0 zt8IC*qS!`@x*Zc%lAGY=dP2{6x^?h-+IA4Pr}qN9CVMd3x#7Y>wxc1ovt^yzF;1`_ zlIAR7aj@OJ>x^8Y?bC`dM_VB^rMs-9R@9VYf@NFR!G$CQcCPMsoQ?V28#eplrU8vVxLyq%46AUrb@#c4xQi`jXEQNrB!oY7KN9i0o8b5bG zd9iWRsV`oRgp|AGCcY;gf5I4u%Y?`gkG4;`i~b!J&h+Y2-eeMdKs+L;L?%CKtCdwy zQh7~XspxjhTu}!%`i(T+-~OxMEoO^5Hq
Lyv!?;+u7D|9B$66%j0@KAx?Qr(@d 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 G3jZGhHc2J` literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_odd_spacing_ref_0.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_odd_spacing_ref_0.png new file mode 100644 index 0000000000000000000000000000000000000000..89c3533bdf9610867d17c374d94d1ba17ab10ef4 GIT binary patch literal 8133 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 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_odd_spacing_ref_1.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_odd_spacing_ref_1.png new file mode 100644 index 0000000000000000000000000000000000000000..56d0fce4028955c7a0a1ee94905ad5e9363a8a25 GIT binary patch literal 8127 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 A6#xJL literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_odd_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/fill_overlap_triangles_fractional_odd_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e704474a559623f84571b8621350c32817568a GIT binary patch literal 11452 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 PGNg4==SGpb^{f8{p4b6> literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/gl_position_ref.png b/external/vulkancts/data/vulkan/data/tessellation/gl_position_ref.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a9c571e71a4c7267fd254879e9980e9b35bb2d GIT binary patch literal 1527 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 Uy(AfTFbD8jQT=7*3)7(g1_^Nx>i_@% literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/isolines_equal_spacing_ref_1.png b/external/vulkancts/data/vulkan/data/tessellation/isolines_equal_spacing_ref_1.png new file mode 100644 index 0000000000000000000000000000000000000000..110b3cc050723cebad33792a3f0673e8ef1c1dfd GIT binary patch literal 12130 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 TYgJ%53v^HIk!q>3W!V1$w%pZl literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_even_spacing_ref_1.png b/external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_even_spacing_ref_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1659c513ea7b6ad1c7627b3c36b0c9bf739cfff4 GIT binary patch literal 8368 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 JnWkgJ{{j!7dZGXT literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_even_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_even_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9106ff572f3710dcf817f0d4b472dc801f5033cc GIT binary patch literal 5644 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 Uy(AfTFbD8jQT=7*3)7(g1_^Nx>i_@% literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_odd_spacing_ref_1.png b/external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_odd_spacing_ref_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a90a547026181d728280266c3cbc8ecdbe75f69a GIT binary patch literal 12130 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 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_odd_spacing_ref_2.png b/external/vulkancts/data/vulkan/data/tessellation/isolines_fractional_odd_spacing_ref_2.png new file mode 100644 index 0000000000000000000000000000000000000000..62e87e31f1e5f8c75e13e2428d5b5df34cc3e823 GIT binary patch literal 4143 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 literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/patch_vertices_10_in_5_out_ref.png b/external/vulkancts/data/vulkan/data/tessellation/patch_vertices_10_in_5_out_ref.png new file mode 100644 index 0000000000000000000000000000000000000000..adf9cf7aa75fa0c35e658ebf0637f3ce4e692bee GIT binary patch literal 1584 zcmb`I{ZCV86vxkP;et}26cEa5omPwxY%N3qM~mVFakM%>MAWKaaSpA6F|EX2wMc6w zgv^0NC=8>>i-OZ2x?r19F?LgNCPRgdmX5(3XzOs^Y_;8en*9gcFXy?>{hsrD&&~au zJQ_*%df)kB^8vs&Gb4R707gAx;EhvD;is4P0(id7Oi#->+%)@B)`5r=X8PmdlW%p! z1IIV@a_}HzH+fcgAuc1;mX}0jjct6PlqnpV^Zmc*V=h5GmWSkU?FX5&k&{M|G-9N z^<{ae>|zsJIS~tSmKmFWJS=_Li3~4pXH)sD-Cb5O1I{MA=QM&S>B5A#(vw*6!6~W( z5hj?Rq>U?MDM_CrKzSPlDQFWEj1Xb?zFUnwJxxYiX;L49vc`v))VPksLp|3q!iM@qjz135 zdV}mO-+Ag;Dy44-P;zoSm{`s?44Cv*Mu=fUfGa;9HZYwLIMJaJHpIXawK6pX2IuMg zLSU^%w}6V?x+QeU7n0EX5VWvzFAoAW+Gh;Cw5^>*=MmE#CMe7xb7YXcM3J`}vN?*p zV%Wi{%#%UXVnxMnc*#*z6vHu2WrYk<1Kw{ACDhtG&;5w$uPxvm?JVI#TXj!q3Kd8D z!of25u08_l29r#_ME|ZP3!NjsY@NfHtGcZgD$ZD2s5ocOvJE%5aMk~g_rC{r+`PGx z4v_-`1KdNHC}lnRqj}C63g+RVDe}u-MpWY%V=fml^T|v*!esPzFol9N>#ZB>hXZcn zUuU4g($!%Ig}7IZ2!;Hov2Lv2e2g@1a{ww!lHEnbn;PvgcW8RnLq9YP6IapnNS=R% z@=dps5#5=K5VdCo%bdn7uyjum>L7@>2vJ*p-Hm#p0BsVkyHVe?5N+hS)JWi}UCZ1< z3BgDzyz2JP%0(X~Z+w9~;;*f7XnH{2nQIXCgL!cmYHHQp(@5LV=gx2FjzGlk>$-=C zH~G1zcWs4xdQ)Z>C?{yd`3iVlq+YQ1{$k5sRwQyr3(P{J) z?P(sQTuL$>x?51Pj*MnQ0n<4`5v?V4Q#9!|gYE(JMq0)n1rk@(E|_Bn12eEdX%si%MIngw-K zm>*%Y)GnZN6y)q5%}N1{9?tlv;0E#0pjtsA#CMs1-xSXiz~=fw&D(Y8B6* zAR3Dw6jWk}R+L0z<@7=kLp&M-l;9DMF5*$+y6X<{&*01MKF@ESyzfjhS*tE3$=7G1 z4*>XTmuu1h2>z1*FOq*{fM|nishm(u5EQmx- zOgfep;IwwU%E4**y_U1#zmg(&8@9iWUfd$8q>iL8XXl(_(Jp*XNEzD~Rhr5_W zxu(F8d_S&jOnkD7GeUL}Lj}QFe{M5Nbe7QWJfc2skm`VXI%Xb>{8nZqqpl`DFx-z znXQd5Bbj-rfbwuwUOY;7h;Gj%bfunl-jT8kgz&;jP3E97(KFNtl?jY82ucH}P||#% zWy4_#gj1O+Vf>QJjpGHngLH5QjF%Rh% zeLweui26=kQRIDTET0|S7!leL~3Ua>=(61siDO3K1u-zmZ4J<;Y9PARb>1J zU2~Q|np^80AjAvnKGEP6`g3RtX#DOnlDO|bdOnYZcYBJ86wvwH=`=_J!9KDeBMUOJ cAh;l++FiRFcjwGc;eS7%U6!J`mS8OT2Q^Z!j{pDw literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/primitive_id_tcs_ref.png b/external/vulkancts/data/vulkan/data/tessellation/primitive_id_tcs_ref.png new file mode 100644 index 0000000000000000000000000000000000000000..011fc6c584120decf243dae5989f8b91f1a9ce91 GIT binary patch literal 865 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJD{4Nn)xkcv5PuWS@#aO5~* z@Z(?gKKw`TVL+~zWDX-I))v}3<7GSXfy;yUI=_+UND*Uzp7u& RCt%iL@O1TaS?83{1OVzSSF!*A literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/primitive_id_tes_ref.png b/external/vulkancts/data/vulkan/data/tessellation/primitive_id_tes_ref.png new file mode 100644 index 0000000000000000000000000000000000000000..011fc6c584120decf243dae5989f8b91f1a9ce91 GIT binary patch literal 865 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJD{4Nn)xkcv5PuWS@#aO5~* z@Z(?gKKw`TVL+~zWDX-I))v}3<7GSXfy;yUI=_+UND*Uzp7u& RCt%iL@O1TaS?83{1OVzSSF!*A literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/user_defined_io_isolines_ref.png b/external/vulkancts/data/vulkan/data/tessellation/user_defined_io_isolines_ref.png new file mode 100644 index 0000000000000000000000000000000000000000..310c9d842d56e2d833c22d3c938cf3f60f51eb78 GIT binary patch literal 903 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJD{KTj9Okcv5PuN!i?C3tJ=rgo%4g&O-@u?fn|FqpKxxfs@;OXk; Jvd$@?2>?keu5ADS literal 0 HcmV?d00001 diff --git a/external/vulkancts/data/vulkan/data/tessellation/user_defined_io_quads_ref.png b/external/vulkancts/data/vulkan/data/tessellation/user_defined_io_quads_ref.png new file mode 100644 index 0000000000000000000000000000000000000000..02bf1d5357c41e2e24bba0bd8de32a787b497a9c GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJD{15X#nkcv5PuWjUHapYlf zd|Ui;`5y7Z(M_+l;tj$U8ylB5EV=)UA)%kaVaBjVH#XZUJkH~P@cG<-bvp(Q;ZZbV pLcrR%c)L4;bq#}n8X@$JNhy-$KTEc19WVD zd%y1e`8@aJd7i!|N8Q>rg=+v{ZT$=OJpcq65|EpN9xdJ9bpWh-vfjRH@3Fw$nfmTq zwFUOr*@mU4_0p#eTSj*5{R(br7TzDcZMr$Oe_#nd&*&cjvw>h=BjKtFK2bwKK0IN9 zrUp1W2-TMV9eA)~h1hT1xpn!kDt4HA&yQP0 zW`4!NQEC~_;?2!wl%MnX@Z77CH5g5WW-&Uv8UNPY5g$$+o4kV2$^9Nwx_UdomR3eG zsL8!b18TAu=*RtS?hx*O>bEZ3KT)|6qs#qc2zd_O!zfs;$KFrbc@{m~k19*wy!CI% zbAPX(PcET8>`}ZNY{zY^`-Gq!4!$lcI`~nqtR}1TQc6Ee$0T|a+(}4LBixykqG&uJ z^%(KyoAsv^4Z+ZYVkVdhK`9`ZB0{7<>_&y<*UTH}Qp>q@p8vnNzGJf1OkIko?b_(oOOKPI-jnJ)BZW@-3XQkK}Ef za+KsZa6P#MV@nm)f__5k)q!Bi%xBL=TO`x0frU=_8q#*TSqlqo@-?IfLN2T>DvCZ%v0UMne(cI^V`jF{BGPHW~VlCKb4 zbs!CkFYADd4#Gt$^9DH`m(uF$@>Cf)JuWTx!bOWW^BfH6X{8hwc_otZ)Ig!0c4^of z2Ksjmd&WT18n)Fy=V{oDNOkNDJ>7_Wq&l`$Pp{79*KxrQRm>3~@sNsX7ZN_aO8iJm zkE0mMtzJh7oVR!#Mkq&Wg7aqYR^%fsfe_{0Y6J?Y2|`w{yBH{>$hUai$VZyJgF5C{ zC>G+pWUxam<;~HtpK-yMiYZ8SlBD^BNU4d)ut;f%h+m|>3>*LYx`^QB^Zw&KHtT8+ WtvY>fyv2|1PN;w0VIQqwPW%I)DgAK( literal 0 HcmV?d00001 diff --git a/external/vulkancts/modules/vulkan/CMakeLists.txt b/external/vulkancts/modules/vulkan/CMakeLists.txt index 6ecf784..4a5b5db 100644 --- a/external/vulkancts/modules/vulkan/CMakeLists.txt +++ b/external/vulkancts/modules/vulkan/CMakeLists.txt @@ -16,6 +16,7 @@ add_subdirectory(compute) add_subdirectory(image) add_subdirectory(wsi) add_subdirectory(sparse_resources) +add_subdirectory(tessellation) include_directories( api @@ -34,6 +35,7 @@ include_directories( image wsi sparse_resources + tessellation ) set(DEQP_VK_COMMON_SRCS @@ -75,6 +77,7 @@ set(DEQP_VK_COMMON_LIBS deqp-vk-image deqp-vk-wsi deqp-vk-sparse-resources + deqp-vk-tessellation ) add_library(deqp-vk-common STATIC ${DEQP_VK_COMMON_SRCS}) diff --git a/external/vulkancts/modules/vulkan/tessellation/CMakeLists.txt b/external/vulkancts/modules/vulkan/tessellation/CMakeLists.txt new file mode 100644 index 0000000..78b7f0e --- /dev/null +++ b/external/vulkancts/modules/vulkan/tessellation/CMakeLists.txt @@ -0,0 +1,37 @@ +include_directories(..) + +set(DEQP_VK_TESSELLATION_SRCS + vktTessellationTests.cpp + vktTessellationTests.hpp + vktTessellationUtil.cpp + vktTessellationUtil.hpp + vktTessellationLimitsTests.hpp + vktTessellationLimitsTests.cpp + vktTessellationCoordinatesTests.hpp + vktTessellationCoordinatesTests.cpp + vktTessellationWindingTests.hpp + vktTessellationWindingTests.cpp + vktTessellationShaderInputOutputTests.hpp + vktTessellationShaderInputOutputTests.cpp + vktTessellationMiscDrawTests.hpp + vktTessellationMiscDrawTests.cpp + vktTessellationCommonEdgeTests.hpp + vktTessellationCommonEdgeTests.cpp + vktTessellationFractionalSpacingTests.hpp + vktTessellationFractionalSpacingTests.cpp + vktTessellationPrimitiveDiscardTests.hpp + vktTessellationPrimitiveDiscardTests.cpp + vktTessellationInvarianceTests.hpp + vktTessellationInvarianceTests.cpp + vktTessellationUserDefinedIO.hpp + vktTessellationUserDefinedIO.cpp + ) + +set(DEQP_VK_TESSELLATION_LIBS + deqp-vk-common + tcutil + vkutil + ) + +add_library(deqp-vk-tessellation STATIC ${DEQP_VK_TESSELLATION_SRCS}) +target_link_libraries(deqp-vk-tessellation ${DEQP_VK_TESSELLATION_LIBS}) diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationCommonEdgeTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCommonEdgeTests.cpp new file mode 100644 index 0000000..db0b2d4 --- /dev/null +++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCommonEdgeTests.cpp @@ -0,0 +1,515 @@ +/*------------------------------------------------------------------------ + * Vulkan Conformance Tests + * ------------------------ + * + * Copyright (c) 2014 The Android Open Source Project + * Copyright (c) 2016 The Khronos Group Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *//*! + * \file + * \brief Tessellation Common Edge Tests + *//*--------------------------------------------------------------------*/ + +#include "vktTessellationCommonEdgeTests.hpp" +#include "vktTestCaseUtil.hpp" +#include "vktTessellationUtil.hpp" + +#include "tcuTestLog.hpp" +#include "tcuTexture.hpp" + +#include "vkDefs.hpp" +#include "vkQueryUtil.hpp" +#include "vkBuilderUtil.hpp" +#include "vkImageUtil.hpp" +#include "vkTypeUtil.hpp" +#include "vkStrUtil.hpp" + +#include "deUniquePtr.hpp" +#include "deStringUtil.hpp" + +#include +#include + +namespace vkt +{ +namespace tessellation +{ + +using namespace vk; + +namespace +{ + +enum CaseType +{ + CASETYPE_BASIC = 0, //!< Order patch vertices such that when two patches share a vertex, it's at the same index for both. + CASETYPE_PRECISE, //!< Vertex indices don't match like for CASETYPE_BASIC, but other measures are taken, using the 'precise' qualifier. + + CASETYPE_LAST +}; + +struct CaseDefinition +{ + TessPrimitiveType primitiveType; + SpacingMode spacingMode; + CaseType caseType; +}; + +//! Check that a certain rectangle in the image contains no black pixels. +//! Returns true if an image successfully passess the verification. +bool verifyResult (tcu::TestLog& log, const tcu::ConstPixelBufferAccess image) +{ + const int startX = static_cast(0.15f * image.getWidth()); + const int endX = static_cast(0.85f * image.getWidth()); + const int startY = static_cast(0.15f * image.getHeight()); + const int endY = static_cast(0.85f * image.getHeight()); + + for (int y = startY; y < endY; ++y) + for (int x = startX; x < endX; ++x) + { + const tcu::Vec4 pixel = image.getPixel(x, y); + + if (pixel.x() == 0 && pixel.y() == 0 && pixel.z() == 0) + { + log << tcu::TestLog::Message << "Failure: there seem to be cracks in the rendered result" << tcu::TestLog::EndMessage + << tcu::TestLog::Message << "Note: pixel with zero r, g and b channels found at " << tcu::IVec2(x, y) << tcu::TestLog::EndMessage; + + return false; + } + } + + log << tcu::TestLog::Message << "Success: there seem to be no cracks in the rendered result" << tcu::TestLog::EndMessage; + + return true; +} + +void initPrograms (vk::SourceCollections& programCollection, const CaseDefinition caseDef) +{ + DE_ASSERT(caseDef.primitiveType == TESSPRIMITIVETYPE_TRIANGLES || caseDef.primitiveType == TESSPRIMITIVETYPE_QUADS); + + // Vertex shader + { + std::ostringstream src; + src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n" + << "\n" + << "layout(location = 0) in highp vec2 in_v_position;\n" + << "layout(location = 1) in highp float in_v_tessParam;\n" + << "\n" + << "layout(location = 0) out highp vec2 in_tc_position;\n" + << "layout(location = 1) out highp float in_tc_tessParam;\n" + << "\n" + << "void main (void)\n" + << "{\n" + << " in_tc_position = in_v_position;\n" + << " in_tc_tessParam = in_v_tessParam;\n" + << "}\n"; + + programCollection.glslSources.add("vert") << glu::VertexSource(src.str()); + } + + // Tessellation control shader + { + const int numVertices = (caseDef.primitiveType == TESSPRIMITIVETYPE_TRIANGLES ? 3 : 4); + + std::ostringstream src; + src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n" + << "#extension GL_EXT_tessellation_shader : require\n" + << (caseDef.caseType == CASETYPE_PRECISE ? "#extension GL_EXT_gpu_shader5 : require\n" : "") + << "\n" + << "layout(vertices = " << numVertices << ") out;\n" + << "\n" + << "layout(location = 0) in highp vec2 in_tc_position[];\n" + << "layout(location = 1) in highp float in_tc_tessParam[];\n" + << "\n" + << "layout(location = 0) out highp vec2 in_te_position[];\n" + << "\n" + << (caseDef.caseType == CASETYPE_PRECISE ? "precise gl_TessLevelOuter;\n\n" : "") + << "void main (void)\n" + << "{\n" + << " in_te_position[gl_InvocationID] = in_tc_position[gl_InvocationID];\n" + << "\n" + << " gl_TessLevelInner[0] = 5.0;\n" + << " gl_TessLevelInner[1] = 5.0;\n" + << "\n" + << (caseDef.primitiveType == TESSPRIMITIVETYPE_TRIANGLES ? + " gl_TessLevelOuter[0] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[1] + in_tc_tessParam[2]);\n" + " gl_TessLevelOuter[1] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[2] + in_tc_tessParam[0]);\n" + " gl_TessLevelOuter[2] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[0] + in_tc_tessParam[1]);\n" + : caseDef.primitiveType == TESSPRIMITIVETYPE_QUADS ? + " gl_TessLevelOuter[0] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[0] + in_tc_tessParam[2]);\n" + " gl_TessLevelOuter[1] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[1] + in_tc_tessParam[0]);\n" + " gl_TessLevelOuter[2] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[3] + in_tc_tessParam[1]);\n" + " gl_TessLevelOuter[3] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[2] + in_tc_tessParam[3]);\n" + : "") + << "}\n"; + + programCollection.glslSources.add("tesc") << glu::TessellationControlSource(src.str()); + } + + // Tessellation evaluation shader + { + std::ostringstream primitiveSpecificCode; + if (caseDef.primitiveType == TESSPRIMITIVETYPE_TRIANGLES) + primitiveSpecificCode + << " highp vec2 pos = gl_TessCoord.x*in_te_position[0] + gl_TessCoord.y*in_te_position[1] + gl_TessCoord.z*in_te_position[2];\n" + << "\n" + << " highp float f = sqrt(3.0 * min(gl_TessCoord.x, min(gl_TessCoord.y, gl_TessCoord.z))) * 0.5 + 0.5;\n" + << " in_f_color = vec4(gl_TessCoord*f, 1.0);\n"; + else if (caseDef.primitiveType == TESSPRIMITIVETYPE_QUADS) + primitiveSpecificCode + << (caseDef.caseType == CASETYPE_BASIC ? + " highp vec2 pos = (1.0-gl_TessCoord.x)*(1.0-gl_TessCoord.y)*in_te_position[0]\n" + " + ( gl_TessCoord.x)*(1.0-gl_TessCoord.y)*in_te_position[1]\n" + " + (1.0-gl_TessCoord.x)*( gl_TessCoord.y)*in_te_position[2]\n" + " + ( gl_TessCoord.x)*( gl_TessCoord.y)*in_te_position[3];\n" + : caseDef.caseType == CASETYPE_PRECISE ? + " highp vec2 a = (1.0-gl_TessCoord.x)*(1.0-gl_TessCoord.y)*in_te_position[0];\n" + " highp vec2 b = ( gl_TessCoord.x)*(1.0-gl_TessCoord.y)*in_te_position[1];\n" + " highp vec2 c = (1.0-gl_TessCoord.x)*( gl_TessCoord.y)*in_te_position[2];\n" + " highp vec2 d = ( gl_TessCoord.x)*( gl_TessCoord.y)*in_te_position[3];\n" + " highp vec2 pos = a+b+c+d;\n" + : "") + << "\n" + << " highp float f = sqrt(1.0 - 2.0 * max(abs(gl_TessCoord.x - 0.5), abs(gl_TessCoord.y - 0.5)))*0.5 + 0.5;\n" + << " in_f_color = vec4(0.1, gl_TessCoord.xy*f, 1.0);\n"; + + std::ostringstream src; + src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n" + << "#extension GL_EXT_tessellation_shader : require\n" + << (caseDef.caseType == CASETYPE_PRECISE ? "#extension GL_EXT_gpu_shader5 : require\n" : "") + << "\n" + << "layout(" << getTessPrimitiveTypeShaderName(caseDef.primitiveType) << ", " + << getSpacingModeShaderName(caseDef.spacingMode) << ") in;\n" + << "\n" + << "layout(location = 0) in highp vec2 in_te_position[];\n" + << "\n" + << "layout(location = 0) out mediump vec4 in_f_color;\n" + << "\n" + << (caseDef.caseType == CASETYPE_PRECISE ? "precise gl_Position;\n\n" : "") + << "void main (void)\n" + << "{\n" + << primitiveSpecificCode.str() + << "\n" + << " // Offset the position slightly, based on the parity of the bits in the float representation.\n" + << " // This is done to detect possible small differences in edge vertex positions between patches.\n" + << " uvec2 bits = floatBitsToUint(pos);\n" + << " uint numBits = 0u;\n" + << " for (uint i = 0u; i < 32u; i++)\n" + << " numBits += ((bits[0] >> i) & 1u) + ((bits[1] >> i) & 1u);\n" + << " pos += float(numBits&1u)*0.04;\n" + << "\n" + << " gl_Position = vec4(pos, 0.0, 1.0);\n" + << "}\n"; + + programCollection.glslSources.add("tese") << glu::TessellationEvaluationSource(src.str()); + } + + // Fragment shader + { + std::ostringstream src; + src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n" + << "\n" + << "layout(location = 0) in mediump vec4 in_f_color;\n" + << "\n" + << "layout(location = 0) out mediump vec4 o_color;\n" + << "\n" + << "void main (void)\n" + << "{\n" + << " o_color = in_f_color;\n" + << "}\n"; + + programCollection.glslSources.add("frag") << glu::FragmentSource(src.str()); + } +} + +//! Generic test code used by all test cases. +tcu::TestStatus test (Context& context, const CaseDefinition caseDef) +{ + DE_ASSERT(caseDef.primitiveType == TESSPRIMITIVETYPE_TRIANGLES || caseDef.primitiveType == TESSPRIMITIVETYPE_QUADS); + DE_ASSERT(caseDef.caseType == CASETYPE_BASIC || caseDef.caseType == CASETYPE_PRECISE); + + requireFeatures(context.getInstanceInterface(), context.getPhysicalDevice(), FEATURE_TESSELLATION_SHADER); + + const DeviceInterface& vk = context.getDeviceInterface(); + const VkDevice device = context.getDevice(); + const VkQueue queue = context.getUniversalQueue(); + const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex(); + Allocator& allocator = context.getDefaultAllocator(); + + // Prepare test data + + std::vector gridPosComps; + std::vector gridTessParams; + std::vector gridIndices; + + { + const int gridWidth = 4; + const int gridHeight = 4; + const int numVertices = (gridWidth+1)*(gridHeight+1); + const int numIndices = gridWidth*gridHeight * (caseDef.primitiveType == TESSPRIMITIVETYPE_TRIANGLES ? 3*2 : 4); + const int numPosCompsPerVertex = 2; + const int totalNumPosComps = numPosCompsPerVertex*numVertices; + + gridPosComps.reserve(totalNumPosComps); + gridTessParams.reserve(numVertices); + gridIndices.reserve(numIndices); + + { + for (int i = 0; i < gridHeight+1; ++i) + for (int j = 0; j < gridWidth+1; ++j) + { + gridPosComps.push_back(-1.0f + 2.0f * ((float)j + 0.5f) / (float)(gridWidth+1)); + gridPosComps.push_back(-1.0f + 2.0f * ((float)i + 0.5f) / (float)(gridHeight+1)); + gridTessParams.push_back((float)(i*(gridWidth+1) + j) / (float)(numVertices-1)); + } + } + + // Generate patch vertex indices. + // \note If CASETYPE_BASIC, the vertices are ordered such that when multiple + // triangles/quads share a vertex, it's at the same index for everyone. + + if (caseDef.primitiveType == TESSPRIMITIVETYPE_TRIANGLES) + { + for (int i = 0; i < gridHeight; i++) + for (int j = 0; j < gridWidth; j++) + { + const deUint16 corners[4] = + { + (deUint16)((i+0)*(gridWidth+1) + j+0), + (deUint16)((i+0)*(gridWidth+1) + j+1), + (deUint16)((i+1)*(gridWidth+1) + j+0), + (deUint16)((i+1)*(gridWidth+1) + j+1) + }; + + const int secondTriangleVertexIndexOffset = caseDef.caseType == CASETYPE_BASIC ? 0 : 1; + + for (int k = 0; k < 3; k++) + gridIndices.push_back(corners[(k+0 + i + (2-j%3)) % 3]); + for (int k = 0; k < 3; k++) + gridIndices.push_back(corners[(k+2 + i + (2-j%3) + secondTriangleVertexIndexOffset) % 3 + 1]); + } + } + else if (caseDef.primitiveType == TESSPRIMITIVETYPE_QUADS) + { + for (int i = 0; i < gridHeight; ++i) + for (int j = 0; j < gridWidth; ++j) + { + for (int m = 0; m < 2; m++) + for (int n = 0; n < 2; n++) + gridIndices.push_back((deUint16)((i+(i+m)%2)*(gridWidth+1) + j+(j+n)%2)); + + if (caseDef.caseType == CASETYPE_PRECISE && (i+j) % 2 == 0) + std::reverse(gridIndices.begin() + (gridIndices.size() - 4), + gridIndices.begin() + gridIndices.size()); + } + } + else + DE_ASSERT(false); + + DE_ASSERT(static_cast(gridPosComps.size()) == totalNumPosComps); + DE_ASSERT(static_cast(gridTessParams.size()) == numVertices); + DE_ASSERT(static_cast(gridIndices.size()) == numIndices); + } + + // Vertex input buffer: we put both attributes and indices in here. + + const VkDeviceSize vertexDataSizeBytes = sizeInBytes(gridPosComps) + sizeInBytes(gridTessParams) + sizeInBytes(gridIndices); + const std::size_t vertexPositionsOffset = 0; + const std::size_t vertexTessParamsOffset = sizeInBytes(gridPosComps); + const std::size_t vertexIndicesOffset = vertexTessParamsOffset + sizeInBytes(gridTessParams); + + const Buffer vertexBuffer(vk, device, allocator, + makeBufferCreateInfo(vertexDataSizeBytes, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT), MemoryRequirement::HostVisible); + + { + const Allocation& alloc = vertexBuffer.getAllocation(); + deUint8* const pData = static_cast(alloc.getHostPtr()); + + deMemcpy(pData + vertexPositionsOffset, &gridPosComps[0], static_cast(sizeInBytes(gridPosComps))); + deMemcpy(pData + vertexTessParamsOffset, &gridTessParams[0], static_cast(sizeInBytes(gridTessParams))); + deMemcpy(pData + vertexIndicesOffset, &gridIndices[0], static_cast(sizeInBytes(gridIndices))); + + flushMappedMemoryRange(vk, device, alloc.getMemory(), alloc.getOffset(), vertexDataSizeBytes); + // No barrier needed, flushed memory is automatically visible + } + + // Color attachment + + const tcu::IVec2 renderSize = tcu::IVec2(256, 256); + const VkFormat colorFormat = VK_FORMAT_R8G8B8A8_UNORM; + const VkImageSubresourceRange colorImageSubresourceRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u); + const Image colorAttachmentImage (vk, device, allocator, + makeImageCreateInfo(renderSize, colorFormat, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT, 1u), + MemoryRequirement::Any); + + // Color output buffer: image will be copied here for verification + + const VkDeviceSize colorBufferSizeBytes = renderSize.x()*renderSize.y() * tcu::getPixelSize(mapVkFormat(colorFormat)); + const Buffer colorBuffer (vk, device, allocator, makeBufferCreateInfo(colorBufferSizeBytes, VK_BUFFER_USAGE_TRANSFER_DST_BIT), MemoryRequirement::HostVisible); + + // Pipeline + + const Unique colorAttachmentView (makeImageView (vk, device, *colorAttachmentImage, VK_IMAGE_VIEW_TYPE_2D, colorFormat, colorImageSubresourceRange)); + const Unique renderPass (makeRenderPass (vk, device, colorFormat)); + const Unique framebuffer (makeFramebuffer (vk, device, *renderPass, *colorAttachmentView, renderSize.x(), renderSize.y(), 1u)); + const Unique cmdPool (makeCommandPool (vk, device, queueFamilyIndex)); + const Unique cmdBuffer (makeCommandBuffer (vk, device, *cmdPool)); + const Unique pipelineLayout (makePipelineLayoutWithoutDescriptors(vk, device)); + + const int inPatchSize = (caseDef.primitiveType == TESSPRIMITIVETYPE_TRIANGLES ? 3 : 4); + const Unique pipeline(GraphicsPipelineBuilder() + .setRenderSize (renderSize) + .setPatchControlPoints(inPatchSize) + .addVertexBinding (makeVertexInputBindingDescription(0u, sizeof(tcu::Vec2), VK_VERTEX_INPUT_RATE_VERTEX)) + .addVertexBinding (makeVertexInputBindingDescription(1u, sizeof(float), VK_VERTEX_INPUT_RATE_VERTEX)) + .addVertexAttribute (makeVertexInputAttributeDescription(0u, 0u, VK_FORMAT_R32G32_SFLOAT, 0u)) + .addVertexAttribute (makeVertexInputAttributeDescription(1u, 1u, VK_FORMAT_R32_SFLOAT, 0u)) + .setShader (vk, device, VK_SHADER_STAGE_VERTEX_BIT, context.getBinaryCollection().get("vert"), DE_NULL) + .setShader (vk, device, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, context.getBinaryCollection().get("tesc"), DE_NULL) + .setShader (vk, device, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, context.getBinaryCollection().get("tese"), DE_NULL) + .setShader (vk, device, VK_SHADER_STAGE_FRAGMENT_BIT, context.getBinaryCollection().get("frag"), DE_NULL) + .build (vk, device, *pipelineLayout, *renderPass)); + + // Draw commands + + beginCommandBuffer(vk, *cmdBuffer); + + // Change color attachment image layout + { + const VkImageMemoryBarrier colorAttachmentLayoutBarrier = makeImageMemoryBarrier( + (VkAccessFlags)0, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, + VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + *colorAttachmentImage, colorImageSubresourceRange); + + vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0u, + 0u, DE_NULL, 0u, DE_NULL, 1u, &colorAttachmentLayoutBarrier); + } + + // Begin render pass + { + const VkRect2D renderArea = { + makeOffset2D(0, 0), + makeExtent2D(renderSize.x(), renderSize.y()), + }; + const tcu::Vec4 clearColor(0.0f, 0.0f, 0.0f, 1.0f); + + beginRenderPass(vk, *cmdBuffer, *renderPass, *framebuffer, renderArea, clearColor); + } + + vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); + { + const VkBuffer buffers[] = { *vertexBuffer, *vertexBuffer }; + const VkDeviceSize offsets[] = { vertexPositionsOffset, vertexTessParamsOffset, }; + vk.cmdBindVertexBuffers(*cmdBuffer, 0u, DE_LENGTH_OF_ARRAY(buffers), buffers, offsets); + + vk.cmdBindIndexBuffer(*cmdBuffer, *vertexBuffer, vertexIndicesOffset, VK_INDEX_TYPE_UINT16); + } + + vk.cmdDrawIndexed(*cmdBuffer, static_cast(gridIndices.size()), 1u, 0u, 0, 0u); + endRenderPass(vk, *cmdBuffer); + + // Copy render result to a host-visible buffer + { + const VkImageMemoryBarrier colorAttachmentPreCopyBarrier = makeImageMemoryBarrier( + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + *colorAttachmentImage, colorImageSubresourceRange); + + vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, + 0u, DE_NULL, 0u, DE_NULL, 1u, &colorAttachmentPreCopyBarrier); + } + { + const VkBufferImageCopy copyRegion = makeBufferImageCopy(makeExtent3D(renderSize.x(), renderSize.y(), 0), makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u)); + vk.cmdCopyImageToBuffer(*cmdBuffer, *colorAttachmentImage, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *colorBuffer, 1u, ©Region); + } + { + const VkBufferMemoryBarrier postCopyBarrier = makeBufferMemoryBarrier( + VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *colorBuffer, 0ull, colorBufferSizeBytes); + + vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, + 0u, DE_NULL, 1u, &postCopyBarrier, 0u, DE_NULL); + } + + endCommandBuffer(vk, *cmdBuffer); + submitCommandsAndWait(vk, device, queue, *cmdBuffer); + + { + // Log the result image. + + const Allocation& colorBufferAlloc = colorBuffer.getAllocation(); + invalidateMappedMemoryRange(vk, device, colorBufferAlloc.getMemory(), colorBufferAlloc.getOffset(), colorBufferSizeBytes); + const tcu::ConstPixelBufferAccess imagePixelAccess(mapVkFormat(colorFormat), renderSize.x(), renderSize.y(), 1, colorBufferAlloc.getHostPtr()); + + tcu::TestLog& log = context.getTestContext().getLog(); + log << tcu::TestLog::Image("color0", "Rendered image", imagePixelAccess) + << tcu::TestLog::Message + << "Note: coloring is done to clarify the positioning and orientation of the " + << (caseDef.primitiveType == TESSPRIMITIVETYPE_TRIANGLES ? "triangles" : + caseDef.primitiveType == TESSPRIMITIVETYPE_QUADS ? "quads" : "") + << "; the color of a vertex corresponds to the index of that vertex in the patch" + << tcu::TestLog::EndMessage; + + if (caseDef.caseType == CASETYPE_BASIC) + log << tcu::TestLog::Message << "Note: each shared vertex has the same index among the primitives it belongs to" << tcu::TestLog::EndMessage; + else if (caseDef.caseType == CASETYPE_PRECISE) + log << tcu::TestLog::Message << "Note: the 'precise' qualifier is used to avoid cracks between primitives" << tcu::TestLog::EndMessage; + else + DE_ASSERT(false); + + // Verify the result. + + const bool ok = verifyResult(log, imagePixelAccess); + return (ok ? tcu::TestStatus::pass("OK") : tcu::TestStatus::fail("Failure")); + } +} + +std::string getCaseName (const TessPrimitiveType primitiveType, const SpacingMode spacingMode, const CaseType caseType) +{ + std::ostringstream str; + str << getTessPrimitiveTypeShaderName(primitiveType) << "_" << getSpacingModeShaderName(spacingMode) + << (caseType == CASETYPE_PRECISE ? "_precise" : ""); + return str.str(); +} + +} // anonymous + +//! These tests correspond to dEQP-GLES31.functional.tessellation.common_edge.* +tcu::TestCaseGroup* createCommonEdgeTests (tcu::TestContext& testCtx) +{ + de::MovePtr group (new tcu::TestCaseGroup(testCtx, "common_edge", "Draw multiple adjacent shapes and check that no cracks appear between them")); + + static const TessPrimitiveType primitiveTypes[] = + { + TESSPRIMITIVETYPE_TRIANGLES, + TESSPRIMITIVETYPE_QUADS, + }; + + for (int primitiveTypeNdx = 0; primitiveTypeNdx < DE_LENGTH_OF_ARRAY(primitiveTypes); ++primitiveTypeNdx) + for (int caseTypeNdx = 0; caseTypeNdx < CASETYPE_LAST; ++caseTypeNdx) + for (int spacingModeNdx = 0; spacingModeNdx < SPACINGMODE_LAST; ++spacingModeNdx) + { + const TessPrimitiveType primitiveType = primitiveTypes[primitiveTypeNdx]; + const CaseType caseType = static_cast(caseTypeNdx); + const SpacingMode spacingMode = static_cast(spacingModeNdx); + const CaseDefinition caseDef = { primitiveType, spacingMode, caseType }; + + addFunctionCaseWithPrograms(group.get(), getCaseName(primitiveType, spacingMode, caseType), "", initPrograms, test, caseDef); + } + + return group.release(); +} + +} // tessellation +} // vkt diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationCommonEdgeTests.hpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCommonEdgeTests.hpp new file mode 100644 index 0000000..35e9921 --- /dev/null +++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCommonEdgeTests.hpp @@ -0,0 +1,40 @@ +#ifndef _VKTTESSELLATIONCOMMONEDGETESTS_HPP +#define _VKTTESSELLATIONCOMMONEDGETESTS_HPP +/*------------------------------------------------------------------------ + * Vulkan Conformance Tests + * ------------------------ + * + * Copyright (c) 2014 The Android Open Source Project + * Copyright (c) 2016 The Khronos Group Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *//*! + * \file + * \brief Tessellation Common Edge Tests + *//*--------------------------------------------------------------------*/ + +#include "tcuDefs.hpp" +#include "tcuTestCase.hpp" + +namespace vkt +{ +namespace tessellation +{ + +tcu::TestCaseGroup* createCommonEdgeTests (tcu::TestContext& testCtx); + +} // tessellation +} // vkt + +#endif // _VKTTESSELLATIONCOMMONEDGETESTS_HPP diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp new file mode 100644 index 0000000..67ce58e --- /dev/null +++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp @@ -0,0 +1,650 @@ +/*------------------------------------------------------------------------ + * Vulkan Conformance Tests + * ------------------------ + * + * Copyright (c) 2014 The Android Open Source Project + * Copyright (c) 2016 The Khronos Group Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *//*! + * \file + * \brief Tessellation Coordinates Tests + *//*--------------------------------------------------------------------*/ + +#include "vktTessellationCoordinatesTests.hpp" +#include "vktTestCaseUtil.hpp" +#include "vktTessellationUtil.hpp" + +#include "tcuTestLog.hpp" +#include "tcuRGBA.hpp" +#include "tcuSurface.hpp" +#include "tcuTextureUtil.hpp" +#include "tcuVectorUtil.hpp" + +#include "vkDefs.hpp" +#include "vkQueryUtil.hpp" +#include "vkBuilderUtil.hpp" +#include "vkTypeUtil.hpp" + +#include "deUniquePtr.hpp" + +#include +#include + +namespace vkt +{ +namespace tessellation +{ + +using namespace vk; + +namespace +{ + +template +class SizeLessThan +{ +public: + bool operator() (const T& a, const T& b) const { return a.size() < b.size(); } +}; + +std::string getCaseName (const TessPrimitiveType primitiveType, const SpacingMode spacingMode) +{ + std::ostringstream str; + str << getTessPrimitiveTypeShaderName(primitiveType) << "_" << getSpacingModeShaderName(spacingMode); + return str.str(); +} + +std::vector genTessLevelCases (const TessPrimitiveType primitiveType, + const SpacingMode spacingMode) +{ + static const TessLevels rawTessLevelCases[] = + { + { { 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 63.0f, 24.0f }, { 15.0f, 42.0f, 10.0f, 12.0f } }, + { { 3.0f, 2.0f }, { 6.0f, 8.0f, 7.0f, 9.0f } }, + { { 4.0f, 6.0f }, { 2.0f, 3.0f, 1.0f, 4.0f } }, + { { 2.0f, 2.0f }, { 6.0f, 8.0f, 7.0f, 9.0f } }, + { { 5.0f, 6.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 1.0f, 6.0f }, { 2.0f, 3.0f, 1.0f, 4.0f } }, + { { 5.0f, 1.0f }, { 2.0f, 3.0f, 1.0f, 4.0f } }, + { { 5.2f, 1.6f }, { 2.9f, 3.4f, 1.5f, 4.1f } } + }; + + if (spacingMode == SPACINGMODE_EQUAL) + return std::vector(DE_ARRAY_BEGIN(rawTessLevelCases), DE_ARRAY_END(rawTessLevelCases)); + else + { + std::vector result; + result.reserve(DE_LENGTH_OF_ARRAY(rawTessLevelCases)); + + for (int tessLevelCaseNdx = 0; tessLevelCaseNdx < DE_LENGTH_OF_ARRAY(rawTessLevelCases); ++tessLevelCaseNdx) + { + TessLevels curTessLevelCase = rawTessLevelCases[tessLevelCaseNdx]; + + float* const inner = &curTessLevelCase.inner[0]; + float* const outer = &curTessLevelCase.outer[0]; + + for (int j = 0; j < 2; ++j) inner[j] = static_cast(getClampedRoundedTessLevel(spacingMode, inner[j])); + for (int j = 0; j < 4; ++j) outer[j] = static_cast(getClampedRoundedTessLevel(spacingMode, outer[j])); + + if (primitiveType == TESSPRIMITIVETYPE_TRIANGLES) + { + if (outer[0] > 1.0f || outer[1] > 1.0f || outer[2] > 1.0f) + { + if (inner[0] == 1.0f) + inner[0] = static_cast(getClampedRoundedTessLevel(spacingMode, inner[0] + 0.1f)); + } + } + else if (primitiveType == TESSPRIMITIVETYPE_QUADS) + { + if (outer[0] > 1.0f || outer[1] > 1.0f || outer[2] > 1.0f || outer[3] > 1.0f) + { + if (inner[0] == 1.0f) inner[0] = static_cast(getClampedRoundedTessLevel(spacingMode, inner[0] + 0.1f)); + if (inner[1] == 1.0f) inner[1] = static_cast(getClampedRoundedTessLevel(spacingMode, inner[1] + 0.1f)); + } + } + + result.push_back(curTessLevelCase); + } + + DE_ASSERT(static_cast(result.size()) == DE_LENGTH_OF_ARRAY(rawTessLevelCases)); + return result; + } +} + +std::vector generateReferenceTessCoords (const TessPrimitiveType primitiveType, + const SpacingMode spacingMode, + const float* innerLevels, + const float* outerLevels) +{ + if (isPatchDiscarded(primitiveType, outerLevels)) + return std::vector(); + + switch (primitiveType) + { + case TESSPRIMITIVETYPE_TRIANGLES: + { + int inner; + int outer[3]; + getClampedRoundedTriangleTessLevels(spacingMode, innerLevels, outerLevels, &inner, &outer[0]); + + if (spacingMode != SPACINGMODE_EQUAL) + { + // \note For fractional spacing modes, exact results are implementation-defined except in special cases. + DE_ASSERT(de::abs(innerLevels[0] - static_cast(inner)) < 0.001f); + for (int i = 0; i < 3; ++i) + DE_ASSERT(de::abs(outerLevels[i] - static_cast(outer[i])) < 0.001f); + DE_ASSERT(inner > 1 || (outer[0] == 1 && outer[1] == 1 && outer[2] == 1)); + } + + return generateReferenceTriangleTessCoords(spacingMode, inner, outer[0], outer[1], outer[2]); + } + + case TESSPRIMITIVETYPE_QUADS: + { + int inner[2]; + int outer[4]; + getClampedRoundedQuadTessLevels(spacingMode, innerLevels, outerLevels, &inner[0], &outer[0]); + + if (spacingMode != SPACINGMODE_EQUAL) + { + // \note For fractional spacing modes, exact results are implementation-defined except in special cases. + for (int i = 0; i < 2; ++i) + DE_ASSERT(de::abs(innerLevels[i] - static_cast(inner[i])) < 0.001f); + for (int i = 0; i < 4; ++i) + DE_ASSERT(de::abs(outerLevels[i] - static_cast(outer[i])) < 0.001f); + + DE_ASSERT((inner[0] > 1 && inner[1] > 1) || (inner[0] == 1 && inner[1] == 1 && outer[0] == 1 && outer[1] == 1 && outer[2] == 1 && outer[3] == 1)); + } + + return generateReferenceQuadTessCoords(spacingMode, inner[0], inner[1], outer[0], outer[1], outer[2], outer[3]); + } + + case TESSPRIMITIVETYPE_ISOLINES: + { + int outer[2]; + getClampedRoundedIsolineTessLevels(spacingMode, &outerLevels[0], &outer[0]); + + if (spacingMode != SPACINGMODE_EQUAL) + { + // \note For fractional spacing modes, exact results are implementation-defined except in special cases. + DE_ASSERT(de::abs(outerLevels[1] - static_cast(outer[1])) < 0.001f); + } + + return generateReferenceIsolineTessCoords(outer[0], outer[1]); + } + + default: + DE_ASSERT(false); + return std::vector(); + } +} + +void drawPoint (tcu::Surface& dst, const int centerX, const int centerY, const tcu::RGBA& color, const int size) +{ + const int width = dst.getWidth(); + const int height = dst.getHeight(); + DE_ASSERT(de::inBounds(centerX, 0, width) && de::inBounds(centerY, 0, height)); + DE_ASSERT(size > 0); + + for (int yOff = -((size-1)/2); yOff <= size/2; ++yOff) + for (int xOff = -((size-1)/2); xOff <= size/2; ++xOff) + { + const int pixX = centerX + xOff; + const int pixY = centerY + yOff; + if (de::inBounds(pixX, 0, width) && de::inBounds(pixY, 0, height)) + dst.setPixel(pixX, pixY, color); + } +} + +void drawTessCoordPoint (tcu::Surface& dst, const TessPrimitiveType primitiveType, const tcu::Vec3& pt, const tcu::RGBA& color, const int size) +{ + // \note These coordinates should match the description in the log message in TessCoordTestInstance::iterate. + + static const tcu::Vec2 triangleCorners[3] = + { + tcu::Vec2(0.95f, 0.95f), + tcu::Vec2(0.5f, 0.95f - 0.9f*deFloatSqrt(3.0f/4.0f)), + tcu::Vec2(0.05f, 0.95f) + }; + + static const float quadIsolineLDRU[4] = + { + 0.1f, 0.9f, 0.9f, 0.1f + }; + + const tcu::Vec2 dstPos = primitiveType == TESSPRIMITIVETYPE_TRIANGLES ? pt.x()*triangleCorners[0] + + pt.y()*triangleCorners[1] + + pt.z()*triangleCorners[2] + + : primitiveType == TESSPRIMITIVETYPE_QUADS || + primitiveType == TESSPRIMITIVETYPE_ISOLINES ? tcu::Vec2((1.0f - pt.x())*quadIsolineLDRU[0] + pt.x()*quadIsolineLDRU[2], + (1.0f - pt.y())*quadIsolineLDRU[1] + pt.y()*quadIsolineLDRU[3]) + + : tcu::Vec2(-1.0f); + + drawPoint(dst, static_cast(dstPos.x() * dst.getWidth()), static_cast(dstPos.y() * dst.getHeight()), color, size); +} + +void drawTessCoordVisualization (tcu::Surface& dst, const TessPrimitiveType primitiveType, const std::vector& coords) +{ + const int imageWidth = 256; + const int imageHeight = 256; + dst.setSize(imageWidth, imageHeight); + + tcu::clear(dst.getAccess(), tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); + + for (int i = 0; i < static_cast(coords.size()); ++i) + drawTessCoordPoint(dst, primitiveType, coords[i], tcu::RGBA::white(), 2); +} + +inline bool vec3XLessThan (const tcu::Vec3& a, const tcu::Vec3& b) +{ + return a.x() < b.x(); +} + +int binarySearchFirstVec3WithXAtLeast (const std::vector& sorted, float x) +{ + const tcu::Vec3 ref(x, 0.0f, 0.0f); + const std::vector::const_iterator first = std::lower_bound(sorted.begin(), sorted.end(), ref, vec3XLessThan); + if (first == sorted.end()) + return -1; + return static_cast(std::distance(sorted.begin(), first)); +} + +// Check that all points in subset are (approximately) present also in superset. +bool oneWayComparePointSets (tcu::TestLog& log, + tcu::Surface& errorDst, + const TessPrimitiveType primitiveType, + const std::vector& subset, + const std::vector& superset, + const char* subsetName, + const char* supersetName, + const tcu::RGBA& errorColor) +{ + const std::vector supersetSorted = sorted(superset, vec3XLessThan); + const float epsilon = 0.01f; + const int maxNumFailurePrints = 5; + int numFailuresDetected = 0; + + for (int subNdx = 0; subNdx < static_cast(subset.size()); ++subNdx) + { + const tcu::Vec3& subPt = subset[subNdx]; + + bool matchFound = false; + + { + // Binary search the index of the first point in supersetSorted with x in the [subPt.x() - epsilon, subPt.x() + epsilon] range. + const tcu::Vec3 matchMin = subPt - epsilon; + const tcu::Vec3 matchMax = subPt + epsilon; + const int firstCandidateNdx = binarySearchFirstVec3WithXAtLeast(supersetSorted, matchMin.x()); + + if (firstCandidateNdx >= 0) + { + // Compare subPt to all points in supersetSorted with x in the [subPt.x() - epsilon, subPt.x() + epsilon] range. + for (int superNdx = firstCandidateNdx; superNdx < static_cast(supersetSorted.size()) && supersetSorted[superNdx].x() <= matchMax.x(); ++superNdx) + { + const tcu::Vec3& superPt = supersetSorted[superNdx]; + + if (tcu::boolAll(tcu::greaterThanEqual (superPt, matchMin)) && + tcu::boolAll(tcu::lessThanEqual (superPt, matchMax))) + { + matchFound = true; + break; + } + } + } + } + + if (!matchFound) + { + ++numFailuresDetected; + if (numFailuresDetected < maxNumFailurePrints) + log << tcu::TestLog::Message << "Failure: no matching " << supersetName << " point found for " << subsetName << " point " << subPt << tcu::TestLog::EndMessage; + else if (numFailuresDetected == maxNumFailurePrints) + log << tcu::TestLog::Message << "Note: More errors follow" << tcu::TestLog::EndMessage; + + drawTessCoordPoint(errorDst, primitiveType, subPt, errorColor, 4); + } + } + + return numFailuresDetected == 0; +} + +//! Returns true on matching coordinate sets. +bool compareTessCoords (tcu::TestLog& log, + TessPrimitiveType primitiveType, + const std::vector& refCoords, + const std::vector& resCoords) +{ + tcu::Surface refVisual; + tcu::Surface resVisual; + bool success = true; + + drawTessCoordVisualization(refVisual, primitiveType, refCoords); + drawTessCoordVisualization(resVisual, primitiveType, resCoords); + + // Check that all points in reference also exist in result. + success = oneWayComparePointSets(log, refVisual, primitiveType, refCoords, resCoords, "reference", "result", tcu::RGBA::blue()) && success; + // Check that all points in result also exist in reference. + success = oneWayComparePointSets(log, resVisual, primitiveType, resCoords, refCoords, "result", "reference", tcu::RGBA::red()) && success; + + if (!success) + { + log << tcu::TestLog::Message << "Note: in the following reference visualization, points that are missing in result point set are blue (if any)" << tcu::TestLog::EndMessage + << tcu::TestLog::Image("RefTessCoordVisualization", "Reference tessCoord visualization", refVisual) + << tcu::TestLog::Message << "Note: in the following result visualization, points that are missing in reference point set are red (if any)" << tcu::TestLog::EndMessage; + } + + log << tcu::TestLog::Image("ResTessCoordVisualization", "Result tessCoord visualization", resVisual); + + return success; +} + +class TessCoordTest : public TestCase +{ +public: + TessCoordTest (tcu::TestContext& testCtx, + const TessPrimitiveType primitiveType, + const SpacingMode spacingMode); + + void initPrograms (SourceCollections& programCollection) const; + TestInstance* createInstance (Context& context) const; + +private: + const TessPrimitiveType m_primitiveType; + const SpacingMode m_spacingMode; +}; + +TessCoordTest::TessCoordTest (tcu::TestContext& testCtx, + const TessPrimitiveType primitiveType, + const SpacingMode spacingMode) + : TestCase (testCtx, getCaseName(primitiveType, spacingMode), "") + , m_primitiveType (primitiveType) + , m_spacingMode (spacingMode) +{ +} + +void TessCoordTest::initPrograms (SourceCollections& programCollection) const +{ + // Vertex shader - no inputs + { + std::ostringstream src; + src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n" + << "\n" + << "void main (void)\n" + << "{\n" + << "}\n"; + + programCollection.glslSources.add("vert") << glu::VertexSource(src.str()); + } + + // Tessellation control shader + { + std::ostringstream src; + src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n" + << "#extension GL_EXT_tessellation_shader : require\n" + << "\n" + << "layout(vertices = 1) out;\n" + << "\n" + << "layout(set = 0, binding = 0, std430) readonly restrict buffer TessLevels {\n" + << " float inner0;\n" + << " float inner1;\n" + << " float outer0;\n" + << " float outer1;\n" + << " float outer2;\n" + << " float outer3;\n" + << "} sb_levels;\n" + << "\n" + << "void main (void)\n" + << "{\n" + << " gl_TessLevelInner[0] = sb_levels.inner0;\n" + << " gl_TessLevelInner[1] = sb_levels.inner1;\n" + << "\n" + << " gl_TessLevelOuter[0] = sb_levels.outer0;\n" + << " gl_TessLevelOuter[1] = sb_levels.outer1;\n" + << " gl_TessLevelOuter[2] = sb_levels.outer2;\n" + << " gl_TessLevelOuter[3] = sb_levels.outer3;\n" + << "}\n"; + + programCollection.glslSources.add("tesc") << glu::TessellationControlSource(src.str()); + } + + // Tessellation evaluation shader + { + std::ostringstream src; + src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n" + << "#extension GL_EXT_tessellation_shader : require\n" + << "\n" + << "layout(" << getTessPrimitiveTypeShaderName(m_primitiveType) << ", " + << getSpacingModeShaderName(m_spacingMode) << ", point_mode) in;\n" + << "\n" + << "layout(set = 0, binding = 1, std430) coherent restrict buffer Output {\n" + << " int numInvocations;\n" + << " vec3 tessCoord[];\n" // alignment is 16 bytes, same as vec4 + << "} sb_out;\n" + << "\n" + << "void main (void)\n" + << "{\n" + << " int index = atomicAdd(sb_out.numInvocations, 1);\n" + << " sb_out.tessCoord[index] = gl_TessCoord;\n" + << "}\n"; + + programCollection.glslSources.add("tese") << glu::TessellationEvaluationSource(src.str()); + } +} + +class TessCoordTestInstance : public TestInstance +{ +public: + TessCoordTestInstance (Context& context, + const TessPrimitiveType primitiveType, + const SpacingMode spacingMode); + + tcu::TestStatus iterate (void); + +private: + const TessPrimitiveType m_primitiveType; + const SpacingMode m_spacingMode; +}; + +TessCoordTestInstance::TessCoordTestInstance (Context& context, + const TessPrimitiveType primitiveType, + const SpacingMode spacingMode) + : TestInstance (context) + , m_primitiveType (primitiveType) + , m_spacingMode (spacingMode) +{ +} + +tcu::TestStatus TessCoordTestInstance::iterate (void) +{ + const DeviceInterface& vk = m_context.getDeviceInterface(); + const VkDevice device = m_context.getDevice(); + const VkQueue queue = m_context.getUniversalQueue(); + const deUint32 queueFamilyIndex = m_context.getUniversalQueueFamilyIndex(); + Allocator& allocator = m_context.getDefaultAllocator(); + + // Test data + + const std::vector tessLevelCases = genTessLevelCases(m_primitiveType, m_spacingMode); + std::vector > allReferenceTessCoords (tessLevelCases.size()); + + for (deUint32 i = 0; i < tessLevelCases.size(); ++i) + allReferenceTessCoords[i] = generateReferenceTessCoords(m_primitiveType, m_spacingMode, &tessLevelCases[i].inner[0], &tessLevelCases[i].outer[0]); + + const int maxNumVertices = static_cast(std::max_element(allReferenceTessCoords.begin(), allReferenceTessCoords.end(), SizeLessThan >())->size()); + + // Input buffer: tessellation levels. Data is filled in later. + + const Buffer tessLevelsBuffer(vk, device, allocator, + makeBufferCreateInfo(sizeof(TessLevels), VK_BUFFER_USAGE_STORAGE_BUFFER_BIT), MemoryRequirement::HostVisible); + + // Output buffer: number of invocations + padding + tessellation coordinates. Initialized later. + + const int resultBufferTessCoordsOffset = 4 * sizeof(deInt32); + const int extraneousVertices = 16; // allow some room for extraneous vertices from duplicate shader invocations (number is arbitrary) + const VkDeviceSize resultBufferSizeBytes = resultBufferTessCoordsOffset + (maxNumVertices + extraneousVertices)*sizeof(tcu::Vec4); + const Buffer resultBuffer (vk, device, allocator, makeBufferCreateInfo(resultBufferSizeBytes, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT), MemoryRequirement::HostVisible); + + // Descriptors + + const Unique descriptorSetLayout(DescriptorSetLayoutBuilder() + .addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) + .addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) + .build(vk, device)); + + const Unique descriptorPool(DescriptorPoolBuilder() + .addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) + .addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) + .build(vk, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u)); + + const Unique descriptorSet(makeDescriptorSet(vk, device, *descriptorPool, *descriptorSetLayout)); + + const VkDescriptorBufferInfo tessLevelsBufferInfo = makeDescriptorBufferInfo(tessLevelsBuffer.get(), 0ull, sizeof(TessLevels)); + const VkDescriptorBufferInfo resultBufferInfo = makeDescriptorBufferInfo(resultBuffer.get(), 0ull, resultBufferSizeBytes); + + DescriptorSetUpdateBuilder() + .writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &tessLevelsBufferInfo) + .writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &resultBufferInfo) + .update(vk, device); + + // Pipeline: set up vertex processing without rasterization + + const Unique renderPass (makeRenderPassWithoutAttachments (vk, device)); + const Unique framebuffer (makeFramebufferWithoutAttachments(vk, device, *renderPass)); + const Unique pipelineLayout(makePipelineLayout (vk, device, *descriptorSetLayout)); + const Unique cmdPool (makeCommandPool (vk, device, queueFamilyIndex)); + const Unique cmdBuffer (makeCommandBuffer (vk, device, *cmdPool)); + + const Unique pipeline(GraphicsPipelineBuilder() + .setShader(vk, device, VK_SHADER_STAGE_VERTEX_BIT, m_context.getBinaryCollection().get("vert"), DE_NULL) + .setShader(vk, device, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, m_context.getBinaryCollection().get("tesc"), DE_NULL) + .setShader(vk, device, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, m_context.getBinaryCollection().get("tese"), DE_NULL) + .build (vk, device, *pipelineLayout, *renderPass)); + + deUint32 numPassedCases = 0; + + // Repeat the test for all tessellation coords cases + for (deUint32 tessLevelCaseNdx = 0; tessLevelCaseNdx < tessLevelCases.size(); ++tessLevelCaseNdx) + { + m_context.getTestContext().getLog() + << tcu::TestLog::Message + << "Tessellation levels: " << getTessellationLevelsString(tessLevelCases[tessLevelCaseNdx], m_primitiveType) + << tcu::TestLog::EndMessage; + + // Upload tessellation levels data to the input buffer + { + const Allocation& alloc = tessLevelsBuffer.getAllocation(); + TessLevels* const bufferTessLevels = static_cast(alloc.getHostPtr()); + *bufferTessLevels = tessLevelCases[tessLevelCaseNdx]; + flushMappedMemoryRange(vk, device, alloc.getMemory(), alloc.getOffset(), sizeof(TessLevels)); + } + + // Clear the results buffer + { + const Allocation& alloc = resultBuffer.getAllocation(); + deMemset(alloc.getHostPtr(), 0, static_cast(resultBufferSizeBytes)); + flushMappedMemoryRange(vk, device, alloc.getMemory(), alloc.getOffset(), resultBufferSizeBytes); + } + + // Reset the command buffer and begin recording. + beginCommandBuffer(vk, *cmdBuffer); + beginRenderPassWithRasterizationDisabled(vk, *cmdBuffer, *renderPass, *framebuffer); + + vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); + vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL); + + // Process a single abstract vertex. + vk.cmdDraw(*cmdBuffer, 1u, 1u, 0u, 0u); + endRenderPass(vk, *cmdBuffer); + + { + const VkBufferMemoryBarrier shaderWriteBarrier = makeBufferMemoryBarrier( + VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, *resultBuffer, 0ull, resultBufferSizeBytes); + + vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, + 0u, DE_NULL, 1u, &shaderWriteBarrier, 0u, DE_NULL); + } + + endCommandBuffer(vk, *cmdBuffer); + submitCommandsAndWait(vk, device, queue, *cmdBuffer); + + // Verify results + { + const Allocation& resultAlloc = resultBuffer.getAllocation(); + invalidateMappedMemoryRange(vk, device, resultAlloc.getMemory(), resultAlloc.getOffset(), resultBufferSizeBytes); + + const deInt32 numResults = *static_cast(resultAlloc.getHostPtr()); + const std::vector resultTessCoords = readInterleavedData(numResults, resultAlloc.getHostPtr(), resultBufferTessCoordsOffset, sizeof(tcu::Vec4)); + const std::vector& referenceTessCoords = allReferenceTessCoords[tessLevelCaseNdx]; + const int numExpectedResults = static_cast(referenceTessCoords.size()); + tcu::TestLog& log = m_context.getTestContext().getLog(); + + if (numResults < numExpectedResults) + { + log << tcu::TestLog::Message + << "Failure: generated " << numResults << " coordinates, but the expected reference value is " << numExpectedResults + << tcu::TestLog::EndMessage; + } + else if (numResults == numExpectedResults) + log << tcu::TestLog::Message << "Note: generated " << numResults << " tessellation coordinates" << tcu::TestLog::EndMessage; + else + { + log << tcu::TestLog::Message + << "Note: generated " << numResults << " coordinates (out of which " << numExpectedResults << " must be unique)" + << tcu::TestLog::EndMessage; + } + + if (m_primitiveType == TESSPRIMITIVETYPE_TRIANGLES) + log << tcu::TestLog::Message << "Note: in the following visualization(s), the u=1, v=1, w=1 corners are at the right, top, and left corners, respectively" << tcu::TestLog::EndMessage; + else if (m_primitiveType == TESSPRIMITIVETYPE_QUADS || m_primitiveType == TESSPRIMITIVETYPE_ISOLINES) + log << tcu::TestLog::Message << "Note: in the following visualization(s), u and v coordinate go left-to-right and bottom-to-top, respectively" << tcu::TestLog::EndMessage; + else + DE_ASSERT(false); + + if (compareTessCoords(log, m_primitiveType, referenceTessCoords, resultTessCoords) && (numResults >= numExpectedResults)) + ++numPassedCases; + } + } // for tessLevelCaseNdx + + return (numPassedCases == tessLevelCases.size() ? tcu::TestStatus::pass("OK") : tcu::TestStatus::fail("Some cases have failed")); +} + +TestInstance* TessCoordTest::createInstance (Context& context) const +{ + requireFeatures(context.getInstanceInterface(), context.getPhysicalDevice(), FEATURE_TESSELLATION_SHADER | FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS); + + return new TessCoordTestInstance(context, m_primitiveType, m_spacingMode); +} + +} // anonymous + +//! Based on dEQP-GLES31.functional.tessellation.tesscoord.* +//! \note Transform feedback is replaced with SSBO. Because of that, this version allows duplicate coordinates from shader invocations. +//! The test still fails if not enough coordinates are generated, or if coordinates don't match the reference data. +tcu::TestCaseGroup* createCoordinatesTests (tcu::TestContext& testCtx) +{ + de::MovePtr group (new tcu::TestCaseGroup(testCtx, "tesscoord", "Tessellation coordinates tests")); + + for (int primitiveTypeNdx = 0; primitiveTypeNdx < TESSPRIMITIVETYPE_LAST; ++primitiveTypeNdx) + for (int spacingModeNdx = 0; spacingModeNdx < SPACINGMODE_LAST; ++spacingModeNdx) + group->addChild(new TessCoordTest(testCtx, (TessPrimitiveType)primitiveTypeNdx, (SpacingMode)spacingModeNdx)); + + return group.release(); +} + +} // tessellation +} // vkt diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.hpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.hpp new file mode 100644 index 0000000..3dc7feb --- /dev/null +++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.hpp @@ -0,0 +1,40 @@ +#ifndef _VKTTESSELLATIONCOORDINATESTESTS_HPP +#define _VKTTESSELLATIONCOORDINATESTESTS_HPP +/*------------------------------------------------------------------------ + * Vulkan Conformance Tests + * ------------------------ + * + * Copyright (c) 2014 The Android Open Source Project + * Copyright (c) 2016 The Khronos Group Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *//*! + * \file + * \brief Tessellation Coordinates Tests + *//*--------------------------------------------------------------------*/ + +#include "tcuDefs.hpp" +#include "tcuTestCase.hpp" + +namespace vkt +{ +namespace tessellation +{ + +tcu::TestCaseGroup* createCoordinatesTests (tcu::TestContext& testCtx); + +} // tessellation +} // vkt + +#endif // _VKTTESSELLATIONCOORDINATESTESTS_HPP diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationFractionalSpacingTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationFractionalSpacingTests.cpp new file mode 100644 index 0000000..b3f9392 --- /dev/null +++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationFractionalSpacingTests.cpp @@ -0,0 +1,582 @@ +/*------------------------------------------------------------------------ + * Vulkan Conformance Tests + * ------------------------ + * + * Copyright (c) 2014 The Android Open Source Project + * Copyright (c) 2016 The Khronos Group Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *//*! + * \file + * \brief Tessellation Fractional Spacing Tests + *//*--------------------------------------------------------------------*/ + +#include "vktTessellationFractionalSpacingTests.hpp" +#include "vktTestCaseUtil.hpp" +#include "vktTessellationUtil.hpp" + +#include "tcuTestLog.hpp" + +#include "vkDefs.hpp" +#include "vkQueryUtil.hpp" +#include "vkBuilderUtil.hpp" +#include "vkTypeUtil.hpp" + +#include "deUniquePtr.hpp" +#include "deStringUtil.hpp" + +#include +#include + +namespace vkt +{ +namespace tessellation +{ + +using namespace vk; + +namespace +{ + +template +std::vector members (const std::vector& objs, MembT T::* membP) +{ + std::vector result(objs.size()); + for (int i = 0; i < static_cast(objs.size()); ++i) + result[i] = objs[i].*membP; + return result; +} + +//! Predicate functor for comparing structs by their members. +template +class MemberPred +{ +public: + MemberPred (MembT T::* membP) : m_membP(membP), m_pred(Pred()) {} + bool operator() (const T& a, const T& b) const { return m_pred(a.*m_membP, b.*m_membP); } + +private: + MembT T::* m_membP; + Pred m_pred; +}; + +//! Convenience wrapper for MemberPred, because class template arguments aren't deduced based on constructor arguments. +template