From 40611a3ddec63fdac2aeceaa25379cb4502da5e1 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 12 Mar 2020 15:42:45 +0000 Subject: [PATCH] Test subresource rendering in overlay tests, remove png comparisons --- .../DebugOverlay.BackfaceCull.png | Bin 1229 -> 0 bytes .../DebugOverlay.ClearBeforeDraw.Depth.png | Bin 1689 -> 0 bytes .../DebugOverlay.ClearBeforeDraw.png | Bin 2275 -> 0 bytes .../DebugOverlay.ClearBeforePass.png | Bin 3225 -> 0 bytes .../D3D11_Overlay_Test/DebugOverlay.Depth.png | Bin 1423 -> 0 bytes .../DebugOverlay.Drawcall.png | Bin 1432 -> 0 bytes .../DebugOverlay.QuadOverdrawDraw.png | Bin 1250 -> 0 bytes .../DebugOverlay.QuadOverdrawPass.png | Bin 1991 -> 0 bytes .../DebugOverlay.Stencil.png | Bin 1324 -> 0 bytes .../DebugOverlay.TriangleSizeDraw.png | Bin 1112 -> 0 bytes .../DebugOverlay.TriangleSizePass.png | Bin 1721 -> 0 bytes .../DebugOverlay.ViewportScissor.png | Bin 954 -> 0 bytes util/test/data/D3D11_Overlay_Test/depth.png | Bin 2633 -> 0 bytes util/test/data/D3D11_Overlay_Test/stencil.png | Bin 1480 -> 0 bytes .../DebugOverlay.BackfaceCull.png | Bin 1229 -> 0 bytes .../DebugOverlay.ClearBeforeDraw.Depth.png | Bin 1689 -> 0 bytes .../DebugOverlay.ClearBeforeDraw.png | Bin 2275 -> 0 bytes .../DebugOverlay.ClearBeforePass.png | Bin 3225 -> 0 bytes .../D3D12_Overlay_Test/DebugOverlay.Depth.png | Bin 1423 -> 0 bytes .../DebugOverlay.Drawcall.png | Bin 1432 -> 0 bytes .../DebugOverlay.QuadOverdrawDraw.png | Bin 1250 -> 0 bytes .../DebugOverlay.QuadOverdrawPass.png | Bin 1991 -> 0 bytes .../DebugOverlay.Stencil.png | Bin 1324 -> 0 bytes .../DebugOverlay.TriangleSizeDraw.png | Bin 1112 -> 0 bytes .../DebugOverlay.TriangleSizePass.png | Bin 1721 -> 0 bytes .../DebugOverlay.ViewportScissor.png | Bin 1210 -> 0 bytes util/test/data/D3D12_Overlay_Test/depth.png | Bin 2633 -> 0 bytes util/test/data/D3D12_Overlay_Test/stencil.png | Bin 1480 -> 0 bytes .../DebugOverlay.BackfaceCull.png | Bin 1229 -> 0 bytes .../DebugOverlay.ClearBeforeDraw.Depth.png | Bin 1689 -> 0 bytes .../DebugOverlay.ClearBeforeDraw.png | Bin 2275 -> 0 bytes .../DebugOverlay.ClearBeforePass.png | Bin 3225 -> 0 bytes .../GL_Overlay_Test/DebugOverlay.Depth.png | Bin 1423 -> 0 bytes .../GL_Overlay_Test/DebugOverlay.Drawcall.png | Bin 1432 -> 0 bytes .../DebugOverlay.QuadOverdrawDraw.png | Bin 1250 -> 0 bytes .../DebugOverlay.QuadOverdrawPass.png | Bin 1991 -> 0 bytes .../GL_Overlay_Test/DebugOverlay.Stencil.png | Bin 1324 -> 0 bytes .../DebugOverlay.TriangleSizeDraw.png | Bin 1112 -> 0 bytes .../DebugOverlay.TriangleSizePass.png | Bin 1721 -> 0 bytes .../DebugOverlay.ViewportScissor.png | Bin 954 -> 0 bytes util/test/data/GL_Overlay_Test/depth.png | Bin 2633 -> 0 bytes util/test/data/GL_Overlay_Test/stencil.png | Bin 1480 -> 0 bytes .../DebugOverlay.BackfaceCull.png | Bin 1229 -> 0 bytes .../DebugOverlay.ClearBeforeDraw.Depth.png | Bin 1689 -> 0 bytes .../DebugOverlay.ClearBeforeDraw.png | Bin 2275 -> 0 bytes .../DebugOverlay.ClearBeforePass.png | Bin 3225 -> 0 bytes .../VK_Overlay_Test/DebugOverlay.Depth.png | Bin 1423 -> 0 bytes .../VK_Overlay_Test/DebugOverlay.Drawcall.png | Bin 1432 -> 0 bytes .../DebugOverlay.QuadOverdrawDraw.png | Bin 1250 -> 0 bytes .../DebugOverlay.QuadOverdrawPass.png | Bin 1991 -> 0 bytes .../VK_Overlay_Test/DebugOverlay.Stencil.png | Bin 1324 -> 0 bytes .../DebugOverlay.TriangleSizeDraw.png | Bin 1112 -> 0 bytes .../DebugOverlay.TriangleSizePass.png | Bin 1721 -> 0 bytes .../DebugOverlay.ViewportScissor.png | Bin 1210 -> 0 bytes util/test/data/VK_Overlay_Test/depth.png | Bin 2633 -> 0 bytes util/test/data/VK_Overlay_Test/stencil.png | Bin 1480 -> 0 bytes util/test/demos/d3d11/d3d11_overlay_test.cpp | 40 +- util/test/demos/d3d11/d3d11_test.cpp | 5 + util/test/demos/d3d11/d3d11_test.h | 1 + util/test/demos/d3d12/d3d12_overlay_test.cpp | 44 +- util/test/demos/gl/gl_overlay_test.cpp | 41 +- util/test/demos/vk/vk_overlay_test.cpp | 89 ++- util/test/rdtest/__init__.py | 1 + util/test/rdtest/shared/Overlay_Test.py | 553 ++++++++++++++++++ util/test/tests/D3D11/D3D11_Overlay_Test.py | 148 +---- util/test/tests/D3D12/D3D12_Overlay_Test.py | 150 +---- util/test/tests/GL/GL_Overlay_Test.py | 148 +---- util/test/tests/Vulkan/VK_Overlay_Test.py | 148 +---- 68 files changed, 767 insertions(+), 601 deletions(-) delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.BackfaceCull.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.ClearBeforeDraw.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.ClearBeforePass.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.Depth.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.Drawcall.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.QuadOverdrawPass.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.Stencil.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.TriangleSizeDraw.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.TriangleSizePass.png delete mode 100644 util/test/data/D3D11_Overlay_Test/DebugOverlay.ViewportScissor.png delete mode 100644 util/test/data/D3D11_Overlay_Test/depth.png delete mode 100644 util/test/data/D3D11_Overlay_Test/stencil.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.BackfaceCull.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.ClearBeforeDraw.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.ClearBeforePass.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.Depth.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.Drawcall.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.QuadOverdrawPass.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.Stencil.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.TriangleSizeDraw.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.TriangleSizePass.png delete mode 100644 util/test/data/D3D12_Overlay_Test/DebugOverlay.ViewportScissor.png delete mode 100644 util/test/data/D3D12_Overlay_Test/depth.png delete mode 100644 util/test/data/D3D12_Overlay_Test/stencil.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.BackfaceCull.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.ClearBeforeDraw.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.ClearBeforePass.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.Depth.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.Drawcall.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.QuadOverdrawPass.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.Stencil.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.TriangleSizeDraw.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.TriangleSizePass.png delete mode 100644 util/test/data/GL_Overlay_Test/DebugOverlay.ViewportScissor.png delete mode 100644 util/test/data/GL_Overlay_Test/depth.png delete mode 100644 util/test/data/GL_Overlay_Test/stencil.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.BackfaceCull.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.ClearBeforeDraw.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.ClearBeforePass.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.Depth.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.Drawcall.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.QuadOverdrawPass.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.Stencil.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.TriangleSizeDraw.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.TriangleSizePass.png delete mode 100644 util/test/data/VK_Overlay_Test/DebugOverlay.ViewportScissor.png delete mode 100644 util/test/data/VK_Overlay_Test/depth.png delete mode 100644 util/test/data/VK_Overlay_Test/stencil.png create mode 100644 util/test/rdtest/shared/Overlay_Test.py diff --git a/util/test/data/D3D11_Overlay_Test/DebugOverlay.BackfaceCull.png b/util/test/data/D3D11_Overlay_Test/DebugOverlay.BackfaceCull.png deleted file mode 100644 index 6ecd1dfd9d37de54ea36bc0866681916c9aa4b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%nd0f<7*cWT?OpGnrw%-> zj^FlYCOEM$vrT!WzS1av1LO9$&X3!F{s3yA9$>4f<7aSU{3*%M!la~x#axG~xJ4WX zLL6LJut;hg^cG>{V0Uq0s43@jSoZ#0D@#LxLkmm8%7zY3hRckCLJZ58lvEgeSY13A zW^i>(VBk10iBUlziRr-H1`f^!AZGXuQos~sr1FUMf{MaFcP5auf`Sv1!$YVNurgO> zB{c@HQjl^W-XkTT$S45DhG6=^RV4KwJq;j7AZr1$lbql-fNW7vP*Z7Wm@z@eW^0Qu z%aN881*!e}gXVt*YW7^0v4pQfUbm@%!}DGS2M0$7r>BLCCiA16A{-qPp7gn$YWPvW z3}W`TH8eEbXjY6A?F(W2D3~oEaJzVOv}`Ys^D#?6AiDbSZAo56M#hb4ik70iCX64w z=P4+dm4DtX*!P<8<1z*Tf$q0yCM+y0M~*B>bJ&x_#&YCU`;tFDc{n=ma(Z?bO9}{B z%L@SwFjPD#E0FKS#<(#~F|(A9nJMXcl9B?*50=cI4$PkD=L3JM4a zY!2|aHE%o6arY){u}gP!IP>kOi-Uv187IZe`h86eGv0EZ6n?J7(GmHnfq^Nhu7#DO z&pRB~(Q_SSrKhW(%Q~loCIDKKHi7^E diff --git a/util/test/data/D3D11_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png b/util/test/data/D3D11_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png deleted file mode 100644 index 01f2f422a31d373c36d36d25a5764425d3beec9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1689 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 diff --git a/util/test/data/D3D11_Overlay_Test/DebugOverlay.Drawcall.png b/util/test/data/D3D11_Overlay_Test/DebugOverlay.Drawcall.png deleted file mode 100644 index be31d5b0fe30f3abe1ad1d241e42ed0b00a034bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1432 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%jrVkM45_&F_AaB}Y6lUA zz^pqhzhC@Y^ZT{kowlnjF4A2k5(&@t77GbaTAyjH79;=Rp$X67RE7riy%9_dEG!I+ zj1CSA0sR;-egJ^5wVEjXVr9z%B!8g1Zxi zm(gwgv8my}s|gXTKThARU^HlCP*7mt;9y{40-}Zn4BiC=^FS6xM#08YcY3FXT3`G8 z{O4h>22PePrAPWD0s;a;2^+(`9o|mpxy_f~$jRcP+R&h&g1`+E9JtmUTGR=YUw4N| zm}7>QgM)(y1EV7tf2)jL&3_qauwMB(zio#<#cMn z)h~JqPAa_3S#HqSuoCEPkk=s?(ZBurbqVL_6| zvE1;yL?%WbRhYRDx?#eEj@26;JOI1%5DU``F987u50G0y_)&e@{-570JNf3m4Ou)d z=e?rT#d>xorp|v>?`z$!U0(9>_ujhv?v93rl`bY4Ph>b)I6YrmKbv>{sn6bgMU%#c z&Ldj_|443}`>`=%Xkm&~VE7 zpN^oQfP;E$9s&Xhffmp9h5GaQ0+=o=faw^7O+fS-CZHeKL0CZnhCA4RsY?cg48NMt?i5xg*!|kIn4_J~+`3=k#nt?fP{l|bME`z75pUXO@geCyh CM0v;n diff --git a/util/test/data/D3D11_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png b/util/test/data/D3D11_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png deleted file mode 100644 index 731190007c9b80d175df7864c9d75da31a7ae3b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1250 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%S?THG7*cWT?cLkChYTbd z0$1!}iEaMtp1`}yt=C0`#h0T`_Wrp_M-LBOHU9tV&BYc#t<(ZMuS(KYA6%WT%Aj!U zqR@e&MjN~Tylc2L1h81Jz|rqAObcTgHG~2b7&HVl!WFt$L^v3@SWby{C^51!H83?6 zu?Fq(SoVEo3sCI>2Z@aiS(?HS=1vC@PM`xtIJjIULX7NS1sl1*ApmBMn~s1h6Bi2u zYZFtT+5!iL0EGn}P+eYNT@H;4T#haC09p^!r2@5G6>5ybL=9oE!=^x8!w8hAD&x!R zpMD?Q`E|>fs zd;_^nLm(npsaV*wE9LBO7f?7PL{FSyAlmr}EEk}(SJYEKb<qm4|A4vh}nPZyd@VFUS%>E&tXObtG8w2HJt^(_4qAl1bTj^Hmql_Kn5 zm0ix6;5fPvR0%hz>iGdJsP0R%zFEApUx%bi}=7z%X4h1SKY3sm;&^lS4~D}ZBV ziALYnD$U6^_VNPb9q5_^a!)T-&0O-!Y$}r@DD)P%6kdr_*;%)LAuy!?19!zr8?UJ+ z1{cshqlQjB1{hx0Hw%wr+oT^kFo5U@eGOJ^*6E_!2 z!?Byp3$wbIA)&+$v6K%Sz7B=p#NG4=n7DvBV<{uhynzHBFZgFyZ-1ER|05FQ3{O`- Jmvv4FO#nz5URD4A diff --git a/util/test/data/D3D11_Overlay_Test/DebugOverlay.QuadOverdrawPass.png b/util/test/data/D3D11_Overlay_Test/DebugOverlay.QuadOverdrawPass.png deleted file mode 100644 index 402d112007ed32433dff8488bd4f32cff0d5036e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1991 zcma)7X;4#F7`+Ke2mvKxq-qgEfHo}Rf(t0(QxgHT7|^K}nQ|L-eq^p3r7T>o4(7&1QCS5#Y;5NiU; zgE*g|Z zcBk~0X1-KDJQT}kIZd_4L&7J&F=utjI&<}&CNLypo{>)gC0{cq{rtnBx9ae@Z2$a) zessX37ENn-n)$2#5POa}I}gc6cuuoaQu4b~?-$O2kL$xo86^bX))nm@kJRC1F6=O* zJ0_wkF-vY!{@&9}#GjJXNo=cT6-|@i4f-_r(bt{{NPmy9MEy)E+rQXbh9oBDVUhj} z_v0*)K`hD{5GA7I$6lT z8g$;ME>9esq4^=x^$UiFVk@&(vc>{&lrp6s1&iSmYeBd zVL#21;3zGvFLXoP39@5t(?1`JLIN|X9IMmEZ3h$`)5!2azSa8rB}JLr1hO_f;VXHv z!BuZv%nRmMxyi(c8K%{7tfEqkhb|EXWX&;}I$Ix<9~w znCkK9+tm_SgAzeG?yt)2-6JDGOV%}GiRDqA0aj1S9x8*dp}u*h1`Eo5lItP_!`1lGL;W0_ zN5YQPTx{3+?=ZO7kKf{TqVKZ4)#;>_cB6uda{R1sxlG<=_@>~NL#%d>kEIw6pJ&q* z=JoUYh8#}1Yr{Xpb~vI~sMR+SOSY>HHkQn)P~O!MP`l|3W=VHx#z+(IxxCpaN3Uz+ zKcuA?y_ZMW2ajSv={JL=aa+ejCRVG;U5FteXyg@)JAT_W6msOGnsJ? z>S;*@&JfLgVg|wK1&{s}{0)Kf0{y>&j}a&?>PFyQ%5+L8DtQXuP! diff --git a/util/test/data/D3D11_Overlay_Test/DebugOverlay.Stencil.png b/util/test/data/D3D11_Overlay_Test/DebugOverlay.Stencil.png deleted file mode 100644 index 4b7c7ed8e973d1fdfbc0c34d6c271aadf246be6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmcgreM}o=7=PdEb>3BI-)q-ZMf>pne4i6h7DWG4Zal9yo z1X`$MBuQrIR_@X_eR-?XSW0rw&3DdOrhDY!l}LEUeqhfzbN_{MMGWC^_fFsAXYVqM z&a&R#?a#Cbd;f&OTQ^)!e?0r`q)XCDMR{|sdn_?P=%vH$TEn?f`-DrXT`kJd+*Osc zO$T?W+}9>mEpbH05`B7??=P+7l~C^aa^=|bIQ&C{FYA+@YdWV;l=?$2CwlZIwX2g? zpSnCaPB{Njt@DkG>ylrHWmpNyzO@&#=QASI?|#k4vaI3@yLV#qR?8;Snk*z7cSOxe zBy6`**KUJQ|6!LN*513@d*q=JwA=C`c}*OwtAoGf=uJ1qjVJa)p0Fuq*+0%QVHIbl(Jsp3vXz9>#P zcnH05M88u~{u3-4JM(2GLN+s1;=O_>XJ)EVpUbxrzyyAelw*vmi&+*SO2XLFR77uz ztxbIOtVbl|dZaPPwHcN%fyhuYSnVu8Xot1q^otW@FR44VecWz)AdQW^+d8?$r`Iy9 z9p8DI1~G1^FK&s&paGtY$JPD1$4M*_Qwpyz+~*6oHrnJ)E4f| zA!LC(+Po36O0hiZz&M=U{2>jBOsXJE;Y|Yr4l(zz e#IydtQjG`lXEKirT_0+z(pUN`YLs5Ne&63KZC0oN diff --git a/util/test/data/D3D11_Overlay_Test/DebugOverlay.TriangleSizeDraw.png b/util/test/data/D3D11_Overlay_Test/DebugOverlay.TriangleSizeDraw.png deleted file mode 100644 index 10d16dd38b23cdb494520d2ac38ad268ab56e8b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 zcmchWT}TvB6vxlp8FxohcXpMs#dLODLea=T(r}e=9oscFGl?KF$W6otMI(eQ6mPb& zqa|(+ks+3Sy-J4pQJA)_9}y)*l33vf`4F+?+SWr6b!T0DvbSj9$2s%=pZ~e{VWy?H z$PyKyj{tzELaS5)K)DHNtcobUfn^T>lUOL_9dXS0-aTn^rbmj0=N1m+1PU$$#ww%Z zE&6!&^y>8ws=J5@h9Ys8BE zg(0GXV>fR`JfD((KkcG}3UFNGWnkqFf*agfK~M3`NPI8RZ#$S%qIo%$Tl5Aa;VrkB26*$cf;h)mHJ`9w5fx$02=>Il z4nnO`Wz||Aw+P-1V_j4Rh{0(H(V?oLC@z|yN#bG2z=MaN)L>u6FrtZ&6{@C77(7Je zG@6GPWY-$3HL3jp2G;7QckzHq0_j`W(NXGYf6N;-Yn`0eF--RuE}y^hiDt_0)u<72 zC-XUl(=CV5uBY-WOTl9PtJH&EZG6qUfX*a0RkI10=+Q zX&ZMujN@Ly!Zke0lb9N&!@LtP7|V5{g%Yuf#Ur#m6-p!IYN$=&`#1S3{-5-El{z;( U(G?l!^C^cG78FT6=95i-098#6-2eap diff --git a/util/test/data/D3D11_Overlay_Test/DebugOverlay.TriangleSizePass.png b/util/test/data/D3D11_Overlay_Test/DebugOverlay.TriangleSizePass.png deleted file mode 100644 index aa3e72a3ff9be82c7c8ed40bf871f0feed1baee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1721 zcmcgtYfKbZ6uvV%%ib*2y|ZO0L0M)OR4k<0#8hflye!KrHlRpxp;Q(mp-F#;50cS> z4hwW=v09C>wKlC96S3jlNAT^enu=AxwghQu1=i9Mw}eGXw_;0sXP{J*HnIKDN$#D= zH|Kok`_7!1aj(fpouduc0s!Wur`fUqp!Sg!2ZIPQ(l&GnfFL2=mYB_dJ@Tz*?Yz|? zHHCY2N1yA-YK>X4;A9v~dgh#`S13$5oX|EJcyYV#i{rmP-&j%}PtqUfkn-C4Mt-;+ z+02~VG^UpxjPc`DAI5cUFz`Ot+W-VJ#+HNzgpfT#$5!q-eTkOn%G4%ZEW(v9O~UzVK;GHY47Cnj^ygj{6fl6DZTHztWCt&Vk5CXzv&Wh9_+%P1v|PYTdahU z@GaR=qZZWk@mnr~QxJF&{_0Zb(sCnnAWeHsWUR|L9wHv&qh$opDmER8bJ0cA z4?YZN%+~nzb^u||)${Lll{B*u5t$bF0K;=dxEh3NAD? z7QD;z9SDU-hQFHRQ&blsFgFf>naqPT&r_Z$6?}oJX zmvtAK4G5jst~IdDi)rVgavMW=5^2&9F%ZF2H@e)aWE;k%M*-~=vo~9e=llKC#XW6< zg#*inpPQrtzTy__-&Pw4r#v1S!igwzv@w(QQSY8`+}N4OV6gxVxyz2TV-%#*qM}BushKG>S(%Yz`ScLRrVLx8m^{F(hiE_27ooc!@bAr%72;F>j zX^k4{X*zzGML3>#96YrDqI>QWcXlCGHazQ++=?ZlZDipYlfOBM^G16KrwILjYW~@#e~_%S zVYW^G#%IM-4O5mDvc&qP#>{o=kf3y!Ca)W&z)e@Ns?+c+o|mE2=N}DJS(4IX*o(!`5VVIR5~h CpE@f5 diff --git a/util/test/data/D3D11_Overlay_Test/DebugOverlay.ViewportScissor.png b/util/test/data/D3D11_Overlay_Test/DebugOverlay.ViewportScissor.png deleted file mode 100644 index 32c978829f3dc8507e661b10a38a6bb0f58ea002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 954 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 Rv(LZ{jjYew%{?Zk=U>BSg%1D# diff --git a/util/test/data/D3D12_Overlay_Test/DebugOverlay.BackfaceCull.png b/util/test/data/D3D12_Overlay_Test/DebugOverlay.BackfaceCull.png deleted file mode 100644 index 6ecd1dfd9d37de54ea36bc0866681916c9aa4b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%nd0f<7*cWT?OpGnrw%-> zj^FlYCOEM$vrT!WzS1av1LO9$&X3!F{s3yA9$>4f<7aSU{3*%M!la~x#axG~xJ4WX zLL6LJut;hg^cG>{V0Uq0s43@jSoZ#0D@#LxLkmm8%7zY3hRckCLJZ58lvEgeSY13A zW^i>(VBk10iBUlziRr-H1`f^!AZGXuQos~sr1FUMf{MaFcP5auf`Sv1!$YVNurgO> zB{c@HQjl^W-XkTT$S45DhG6=^RV4KwJq;j7AZr1$lbql-fNW7vP*Z7Wm@z@eW^0Qu z%aN881*!e}gXVt*YW7^0v4pQfUbm@%!}DGS2M0$7r>BLCCiA16A{-qPp7gn$YWPvW z3}W`TH8eEbXjY6A?F(W2D3~oEaJzVOv}`Ys^D#?6AiDbSZAo56M#hb4ik70iCX64w z=P4+dm4DtX*!P<8<1z*Tf$q0yCM+y0M~*B>bJ&x_#&YCU`;tFDc{n=ma(Z?bO9}{B z%L@SwFjPD#E0FKS#<(#~F|(A9nJMXcl9B?*50=cI4$PkD=L3JM4a zY!2|aHE%o6arY){u}gP!IP>kOi-Uv187IZe`h86eGv0EZ6n?J7(GmHnfq^Nhu7#DO z&pRB~(Q_SSrKhW(%Q~loCIDKKHi7^E diff --git a/util/test/data/D3D12_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png b/util/test/data/D3D12_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png deleted file mode 100644 index 01f2f422a31d373c36d36d25a5764425d3beec9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1689 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%OYn4Y45_&F_O7F!QnX0J zLngt;LIr1pW>}{my2ENvaBj+irgx2J7o{$L<6YY68hVrK`EQ}gMt4tkKQBFZ|GQUm z{&zLz2Ia54Kyw)#92f)y7+6?9h?YEvB`_OMcpX_=qa>L)I86FGCNwlOT;?cQvb{Q) zhryzeK|z6mgM)#I35XgRFnAw!SE$Dc2xQ0#CCo2>%zA(m;RO^6pgv@5j6X43qp6{x z!{PWIY5lcgtDkcDDJUp4G$^PX_%1EM7~8(&m1F@E<8mPf2LUAP;PD`*QdDfel1k|L z24N11sX$jwU|?zjR;wzrrt*|`#G;8DG^PjbJ{OsbAnCuUWilqw*3o zjqqFn#g$cTa~uw=WMN@xfnxyy0ihQy;fV*;;nGo`^7fQ`GcS!d=HQ4}u`f?RKqolf znuBB7%Js4=EZtXl92^cXnXSv#}Xl9`9{#{z_ z%71IjW^-~xbfq2J9~T$*?NK1#$r3A3feiv@duv}_4Yibe`T6bJwG9oe8D)P0V`61@ z?em(iKG}1J%Xo ztSmZ?#ywhlcde4{`%-Bl)jD&kwvLXyU0Oz8e6$K8h)13eT&no`igTu?d|(={nB%f zISvBCPUlVc@3MM!rSQdf*PXkB1azzqoi_s-`)hCCs{7)-4G9+o%Z?pgz3$c=tFGsD z_V>zxQR&?`!B}tIx?MZ=b(NK>Dnt}036-5YdNuTRu=|zO+Q5XsY5n}q@ylgjH{I=+yhDAVpsIdVBbF?=wbg(foaj>Ie1sM(w1t}l~(O|5gpdbS@Edz)PU>KMM3Lu!l z^v<0-DW8AdQ4kPVP-g)wP#(fCuta$X#210Mg&Br{$(|X4U4XOzA28`7VT;n2{(o=h zZ3jAx>Fc72UiCr?W+*5enEud0L|D<$!NEeRPzyvw2@3-aarSX=c<{gNaez+?3(%ed zpi~dTLjhp{0gJ{0nXb+WAgBAOa&U08&j4m~sU#+*rUI9#$3XcG>WCI*0Ra$pfzlAi z01E&fC5%|#8*M2-~&NP6k|~oPzZv(C(xh%yz9n0+tzKjxV&*f!&<+2 zXqmlPT&==;ClB9Gk_QPHZX^`)?H1`~VFya=mcgf5$Nn4NVM)zIf6B5ycvG{=vZ zY_=^H^!gt6B3#)M?6RZk9s?NXfA%OOv3VcqAVxZ>cg_azBNTqXHMQJnaBN^G#t7l- z%VZxQAg3PRh%p942r0w}iHV7csXcNH?P^S!I8#w!Y=ji($o=xILc+rr^ASEv)N$OS zG@?2>L?Ust)yhFZLE|qUMu`xSDeajyB^+og?n&^ycM!dO$a87FIm^{XmR@=FPz?5}$Q$iH(JM0Dn_@EHhGoNxRR4-0tp{mNRfsEtO;Cv9c{^J~yU4&xAW` z9j|O_oqVmFvzFJ_3v2_62tI-qI1rAGj?VFeLLT7IQm}RV_FVtNw#>O~qoSe$kGl)X z0*e>f&T_*}ug%?hr)&;ZjH~a&z%c)0yX)!ABA0DH(ug*Lo5wv?J-u0MGZ$jl&>y+U zV^9Avo7RlQ{QjLz&CbW(&a*+qzitU}h`tmlLb?i1Q4Zo-{(H@kH4lgadeGWLbywv1 z*kT%y^Rj`sDK)twvc?-S=~k*@ef^5hE5Cr3v+##Msfy^vl|2<=?zY}46D}pMwW4?b z)zdol=C5>&D6i0yUd=G5iC37MLIR@N~F9U&Vn_g z&%8WtJ_l-z=L z8hStT?nxbA2b**O{;mYu%3YSpw*K)(tugyi2gaYF-1m;3nUQ5Ck@vXt6-@P7+5TE} z?Qqi6_||gAPyj}4h;)|Xm(3mb^OKOT0!V!e8g8{c+svuqd4dW1q!N?=43agYU%fNr zoOED{9y3Paj*@1kc1J|k4FY)pd5BBH{97Je*s*Gx=8#^n8yb3)N)?RsH)c%BE0WVC|3^V}{Q&crH zG@PlfW&@2gA;|C{so1lXl?FiLN+hq=O3&di#udF(B4LT5Qoj?PX(g~fdBl-BIP`U| z^WvTn4xPJIYdQM4M6%Gu#pU}ql(CjwSRLKC*SCiedU+>~2Or=2c6h$nKxA0LBS?)J z9?-h*a9>kKs7i}^F0;3{$p&h0m)@Uct>f@Hha|gjQJbF=K~X9TPM98tzJzYN z52ttp891LLNA+cD6cubz{fbMH65@Av(_``vrL znXf*b8)ReUXaxYUQBn#O02qV*?v@tF(vsJ74FKU%rD9sJrmCf;GWl+oOHq4%k4Ib8 zh5U|^EW%BBW1P_2|hLWygo#!z-pvWKsb3Lwx)_b0O>XE7S3{I3mD z=!5N9hc;R(#kf#!I9!j|5(beq9wHuzd@Dh|ua>ft%P?GmLfoD%Rd!wF5PB|>VMiiC zZ9fbK(2xo}z{P{!$~i?WLQEsScl5?_B+)m6kDdpOB3WD8X9uJO2qmR~LjOK263sHb zXGhXl7)z%AVrP;0{+Q_quM>#1RA!`S-{?!DW*=m#^DhSQ#7Z8fCkQuscKT$`QF9Jg z{8~u^iIT_BI}&+#d0m~$*Q4jP_HBo>)}RMUf&Mf&BwI04C={A1jQ{fYbK?TS7(uGY z#<}$DZzfIne%?`Mv@!-0FgohyVuw7#XOyP`mU}Hxr zB2G#d@F@m7^9#y82NWk! zne@7c=R7AxR&hmIY8;1g*BV4-lvDW40~6YSmdjK?qcvQdw|;MA_1VIjm^vGY5-2g9 zAFjR~&||vPQ)`V3MmxP9Cuc{0_qi9B`vD<<3t%~y-17SaiGNJ%f3#9M^(*RYQ2F!P zg%9K3z834aj0~J3!-smHzh7lxev~rRd0S8GZWN~R^d!8)WIxaJ^}Hzpq^meQ zlG|uJaU|))(KtthFMnQTW%jx)x4%85f1SMN;YL=;9fk6n11zb_*?k zJJ1+!VD6OgJ+e)PbHOnA}0!uCf+t_YHWAhzb49#@=BUF@(TrC8%!j`;zd zJ~^70dqmC(&;J$3CczVPGm?HiF^^TX-iO{}YtA}#+40n+Zb!wqc;D_`UrT5d!90Fr z*Zr^*pIVJuS-LNW`2y{1pzj0fRb<(b0DnI%P~hfx3#JUjcHZ&{;_J#;fGQC)Y$VGv z{2ex2>KaCtpp%GGOArc+?Qh9@lo3FiX+Wj?5`|^9h~OoT8g2YLJ35L-M=GT1!(8UP z2=;=GrzeiySao#Ay(CxyOmPPgwObeEW z+rnPFqtGGDlol3OIfSftr608LnE|Z#S=Ol;3&R!25VDFxdD7cocinHlFqr=F~_nn*d`|3tAWZL*2TZwG0=A17PA$=y(7pZUSp9{ZmErroJB1#(?s3n8AsRd(+$eswpiDceW!Pedtt<*&K(0y=uv;!yz(x(W%zv z7gyd+@zYRXjR~lx!1#gopaGN_W;^yu-Hx7E9)~&xbYOW?>Ee*R+pTBe+M)g~-}&@? zvPl3BydChWRby-F&s2=0bEDt5EsLeSU;X=;9a%LgY=ue$ZQ}Nw=Q3w+rHwtnp{$P_ zpNJXebZ%~K+Mcn^r_(PD=wHe|&3wq8i79Z(?Xm7`)0FaI1k!aHoqEgw$c_XKn(C|3 z6}9~Ny_2ALI78I4*F(hF*v^%7qma@?k;vDsI(LmdspcBoCqn`=!eX*3@|U!WT4DAuV>9GDULx~~g7l`yIGG$Os0x22^jByar)ax0K7 zm<)(6EuXwmclhJApqvAZ*D;APNDgG(pPl;LhS@_`2+-XHiX*c=JDK$Dx32Ui0kz}~ z&{lAqLGP;Z3$wXY8tsiC%0GQ8*(#w8MhfOPqrf!@lZv+0HW1w*e6tN(L@1V!j<#mh6~n7?*PP@_Hw?x*c85mI zGS`{;uAU`Mxq-`8l%(E6oyrmH)Piz~?Cb9j?`SMO$u-RW(_=n8`>?lhKOKzmQPKPW}`#6yVgBQLEbT!}PaFBKAKhEiF+ z5=i7|HV6QoUK~q#X(_7oL8PDMcn2tjxUJWFZx(Q98W*ly33etP`oBTaWFjmg4!DzVH%Znbg|6RpNlbZqjGY~3(& zZ4M|JBVe}FO{R$3SQJA{7z3F$SiZKXaWFSj+zJy^0$bfirZCxiP_zBPpUW=!CHFkf z@A*9+m*;9cOy}m(v(yw*A`l=#{rVq9Og# z_FD^;hqKRo(zUbA5wzo-i6bo;I~#mro)pFKa=9{vXAca@R00$Md0+TFE| zu*twO@@L#fqdk>|1FNo96U&5;RmhK%`%#!7Jbl8gg=M5ZmO9i<;CQ0cRmZZP)2u6m zBz3`zg{F_iQzjh8UjULY2#bV#oT7qTO;eB{fJ6$Ri(K;YtWw0f{lRDc4S;WJy#5SH@D5w&QaXzUA8ji(nvv^3R)@M zd9Py~GeDFLf2dBbvdc7W-77C0+@N-SvG=5G)n*(g2kZUry9`5P3M0au*B|^j*IJ&T z!0}Ni8@W_4nnw+Gt;zT$=36>kEUroC*VmUg76BE4aG|~O7fa{l9(qM z7y&`}ZKK9L-QV@Tu_5`Z$~8FNQ<|yYyD&UnZgR4e{FJai)8a*6*}ygXzUf6TdZzjQ z^?kK0YbX1SNs=%Cd{CSff;;VGjhmue!2)hP*UB+`4;QkP6eaIbs7P|mfr4akp6T+8 z7>ohr09*SK6F7m^LCMiA$mz)&JtjRSMFBVJ*F!k%7@8IsI;*NmFctI)U;qOH3l2|z z<~c*op4s(}Q&d}uEDs&c*$e)eUxXoOf-Cdwc}|us;jiyVv^dF#dP)DQ6Ai=`xu55! z=Z^sN_-B4hh$Ts~=5w@BA4EsUn5{p3SrAgOu{i(GGodQPv<9U_SM-97?_wh@31 nLkgHplTj74%%9?abE$t9ot!Lv`_=GmS$xg3jp@v3lg;@zl81kF diff --git a/util/test/data/D3D12_Overlay_Test/DebugOverlay.Drawcall.png b/util/test/data/D3D12_Overlay_Test/DebugOverlay.Drawcall.png deleted file mode 100644 index be31d5b0fe30f3abe1ad1d241e42ed0b00a034bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1432 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%jrVkM45_&F_AaB}Y6lUA zz^pqhzhC@Y^ZT{kowlnjF4A2k5(&@t77GbaTAyjH79;=Rp$X67RE7riy%9_dEG!I+ zj1CSA0sR;-egJ^5wVEjXVr9z%B!8g1Zxi zm(gwgv8my}s|gXTKThARU^HlCP*7mt;9y{40-}Zn4BiC=^FS6xM#08YcY3FXT3`G8 z{O4h>22PePrAPWD0s;a;2^+(`9o|mpxy_f~$jRcP+R&h&g1`+E9JtmUTGR=YUw4N| zm}7>QgM)(y1EV7tf2)jL&3_qauwMB(zio#<#cMn z)h~JqPAa_3S#HqSuoCEPkk=s?(ZBurbqVL_6| zvE1;yL?%WbRhYRDx?#eEj@26;JOI1%5DU``F987u50G0y_)&e@{-570JNf3m4Ou)d z=e?rT#d>xorp|v>?`z$!U0(9>_ujhv?v93rl`bY4Ph>b)I6YrmKbv>{sn6bgMU%#c z&Ldj_|443}`>`=%Xkm&~VE7 zpN^oQfP;E$9s&Xhffmp9h5GaQ0+=o=faw^7O+fS-CZHeKL0CZnhCA4RsY?cg48NMt?i5xg*!|kIn4_J~+`3=k#nt?fP{l|bME`z75pUXO@geCyh CM0v;n diff --git a/util/test/data/D3D12_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png b/util/test/data/D3D12_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png deleted file mode 100644 index 731190007c9b80d175df7864c9d75da31a7ae3b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1250 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%S?THG7*cWT?cLkChYTbd z0$1!}iEaMtp1`}yt=C0`#h0T`_Wrp_M-LBOHU9tV&BYc#t<(ZMuS(KYA6%WT%Aj!U zqR@e&MjN~Tylc2L1h81Jz|rqAObcTgHG~2b7&HVl!WFt$L^v3@SWby{C^51!H83?6 zu?Fq(SoVEo3sCI>2Z@aiS(?HS=1vC@PM`xtIJjIULX7NS1sl1*ApmBMn~s1h6Bi2u zYZFtT+5!iL0EGn}P+eYNT@H;4T#haC09p^!r2@5G6>5ybL=9oE!=^x8!w8hAD&x!R zpMD?Q`E|>fs zd;_^nLm(npsaV*wE9LBO7f?7PL{FSyAlmr}EEk}(SJYEKb<qm4|A4vh}nPZyd@VFUS%>E&tXObtG8w2HJt^(_4qAl1bTj^Hmql_Kn5 zm0ix6;5fPvR0%hz>iGdJsP0R%zFEApUx%bi}=7z%X4h1SKY3sm;&^lS4~D}ZBV ziALYnD$U6^_VNPb9q5_^a!)T-&0O-!Y$}r@DD)P%6kdr_*;%)LAuy!?19!zr8?UJ+ z1{cshqlQjB1{hx0Hw%wr+oT^kFo5U@eGOJ^*6E_!2 z!?Byp3$wbIA)&+$v6K%Sz7B=p#NG4=n7DvBV<{uhynzHBFZgFyZ-1ER|05FQ3{O`- Jmvv4FO#nz5URD4A diff --git a/util/test/data/D3D12_Overlay_Test/DebugOverlay.QuadOverdrawPass.png b/util/test/data/D3D12_Overlay_Test/DebugOverlay.QuadOverdrawPass.png deleted file mode 100644 index 402d112007ed32433dff8488bd4f32cff0d5036e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1991 zcma)7X;4#F7`+Ke2mvKxq-qgEfHo}Rf(t0(QxgHT7|^K}nQ|L-eq^p3r7T>o4(7&1QCS5#Y;5NiU; zgE*g|Z zcBk~0X1-KDJQT}kIZd_4L&7J&F=utjI&<}&CNLypo{>)gC0{cq{rtnBx9ae@Z2$a) zessX37ENn-n)$2#5POa}I}gc6cuuoaQu4b~?-$O2kL$xo86^bX))nm@kJRC1F6=O* zJ0_wkF-vY!{@&9}#GjJXNo=cT6-|@i4f-_r(bt{{NPmy9MEy)E+rQXbh9oBDVUhj} z_v0*)K`hD{5GA7I$6lT z8g$;ME>9esq4^=x^$UiFVk@&(vc>{&lrp6s1&iSmYeBd zVL#21;3zGvFLXoP39@5t(?1`JLIN|X9IMmEZ3h$`)5!2azSa8rB}JLr1hO_f;VXHv z!BuZv%nRmMxyi(c8K%{7tfEqkhb|EXWX&;}I$Ix<9~w znCkK9+tm_SgAzeG?yt)2-6JDGOV%}GiRDqA0aj1S9x8*dp}u*h1`Eo5lItP_!`1lGL;W0_ zN5YQPTx{3+?=ZO7kKf{TqVKZ4)#;>_cB6uda{R1sxlG<=_@>~NL#%d>kEIw6pJ&q* z=JoUYh8#}1Yr{Xpb~vI~sMR+SOSY>HHkQn)P~O!MP`l|3W=VHx#z+(IxxCpaN3Uz+ zKcuA?y_ZMW2ajSv={JL=aa+ejCRVG;U5FteXyg@)JAT_W6msOGnsJ? z>S;*@&JfLgVg|wK1&{s}{0)Kf0{y>&j}a&?>PFyQ%5+L8DtQXuP! diff --git a/util/test/data/D3D12_Overlay_Test/DebugOverlay.Stencil.png b/util/test/data/D3D12_Overlay_Test/DebugOverlay.Stencil.png deleted file mode 100644 index 4b7c7ed8e973d1fdfbc0c34d6c271aadf246be6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmcgreM}o=7=PdEb>3BI-)q-ZMf>pne4i6h7DWG4Zal9yo z1X`$MBuQrIR_@X_eR-?XSW0rw&3DdOrhDY!l}LEUeqhfzbN_{MMGWC^_fFsAXYVqM z&a&R#?a#Cbd;f&OTQ^)!e?0r`q)XCDMR{|sdn_?P=%vH$TEn?f`-DrXT`kJd+*Osc zO$T?W+}9>mEpbH05`B7??=P+7l~C^aa^=|bIQ&C{FYA+@YdWV;l=?$2CwlZIwX2g? zpSnCaPB{Njt@DkG>ylrHWmpNyzO@&#=QASI?|#k4vaI3@yLV#qR?8;Snk*z7cSOxe zBy6`**KUJQ|6!LN*513@d*q=JwA=C`c}*OwtAoGf=uJ1qjVJa)p0Fuq*+0%QVHIbl(Jsp3vXz9>#P zcnH05M88u~{u3-4JM(2GLN+s1;=O_>XJ)EVpUbxrzyyAelw*vmi&+*SO2XLFR77uz ztxbIOtVbl|dZaPPwHcN%fyhuYSnVu8Xot1q^otW@FR44VecWz)AdQW^+d8?$r`Iy9 z9p8DI1~G1^FK&s&paGtY$JPD1$4M*_Qwpyz+~*6oHrnJ)E4f| zA!LC(+Po36O0hiZz&M=U{2>jBOsXJE;Y|Yr4l(zz e#IydtQjG`lXEKirT_0+z(pUN`YLs5Ne&63KZC0oN diff --git a/util/test/data/D3D12_Overlay_Test/DebugOverlay.TriangleSizeDraw.png b/util/test/data/D3D12_Overlay_Test/DebugOverlay.TriangleSizeDraw.png deleted file mode 100644 index 10d16dd38b23cdb494520d2ac38ad268ab56e8b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 zcmchWT}TvB6vxlp8FxohcXpMs#dLODLea=T(r}e=9oscFGl?KF$W6otMI(eQ6mPb& zqa|(+ks+3Sy-J4pQJA)_9}y)*l33vf`4F+?+SWr6b!T0DvbSj9$2s%=pZ~e{VWy?H z$PyKyj{tzELaS5)K)DHNtcobUfn^T>lUOL_9dXS0-aTn^rbmj0=N1m+1PU$$#ww%Z zE&6!&^y>8ws=J5@h9Ys8BE zg(0GXV>fR`JfD((KkcG}3UFNGWnkqFf*agfK~M3`NPI8RZ#$S%qIo%$Tl5Aa;VrkB26*$cf;h)mHJ`9w5fx$02=>Il z4nnO`Wz||Aw+P-1V_j4Rh{0(H(V?oLC@z|yN#bG2z=MaN)L>u6FrtZ&6{@C77(7Je zG@6GPWY-$3HL3jp2G;7QckzHq0_j`W(NXGYf6N;-Yn`0eF--RuE}y^hiDt_0)u<72 zC-XUl(=CV5uBY-WOTl9PtJH&EZG6qUfX*a0RkI10=+Q zX&ZMujN@Ly!Zke0lb9N&!@LtP7|V5{g%Yuf#Ur#m6-p!IYN$=&`#1S3{-5-El{z;( U(G?l!^C^cG78FT6=95i-098#6-2eap diff --git a/util/test/data/D3D12_Overlay_Test/DebugOverlay.TriangleSizePass.png b/util/test/data/D3D12_Overlay_Test/DebugOverlay.TriangleSizePass.png deleted file mode 100644 index aa3e72a3ff9be82c7c8ed40bf871f0feed1baee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1721 zcmcgtYfKbZ6uvV%%ib*2y|ZO0L0M)OR4k<0#8hflye!KrHlRpxp;Q(mp-F#;50cS> z4hwW=v09C>wKlC96S3jlNAT^enu=AxwghQu1=i9Mw}eGXw_;0sXP{J*HnIKDN$#D= zH|Kok`_7!1aj(fpouduc0s!Wur`fUqp!Sg!2ZIPQ(l&GnfFL2=mYB_dJ@Tz*?Yz|? zHHCY2N1yA-YK>X4;A9v~dgh#`S13$5oX|EJcyYV#i{rmP-&j%}PtqUfkn-C4Mt-;+ z+02~VG^UpxjPc`DAI5cUFz`Ot+W-VJ#+HNzgpfT#$5!q-eTkOn%G4%ZEW(v9O~UzVK;GHY47Cnj^ygj{6fl6DZTHztWCt&Vk5CXzv&Wh9_+%P1v|PYTdahU z@GaR=qZZWk@mnr~QxJF&{_0Zb(sCnnAWeHsWUR|L9wHv&qh$opDmER8bJ0cA z4?YZN%+~nzb^u||)${Lll{B*u5t$bF0K;=dxEh3NAD? z7QD;z9SDU-hQFHRQ&blsFgFf>naqPT&r_Z$6?}oJX zmvtAK4G5jst~IdDi)rVgavMW=5^2&9F%ZF2H@e)aWE;k%M*-~=vo~9e=llKC#XW6< zg#*inpPQrtzTy__-&Pw4r#v1S!igwzv@w(QQSY8`+}N4OV6gxVxyz2TV-%#*qM}BushKG>S(%Yz`ScLRrVLx8m^{F(hiE_27ooc!@bAr%72;F>j zX^k4{X*zzGML3>#96YrDqI>QWcXlCGHazQ++=?ZlZDipYlfOBM^G16KrwILjYW~@#e~_%S zVYW^G#%IM-4O5mDvc&qP#>{o=kf3y!Ca)W&z)e@Ns?+c+o|mE2=N}DJS(4IX*o(!`5VVIR5~h CpE@f5 diff --git a/util/test/data/D3D12_Overlay_Test/DebugOverlay.ViewportScissor.png b/util/test/data/D3D12_Overlay_Test/DebugOverlay.ViewportScissor.png deleted file mode 100644 index 151d70852eb50b19c4f2b1ac95e763aee90e7c69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%Y4mh)45_&F_O4-;oFh-e z#k&S`{WqBVPE`uc+ofKx)+B9Bivds658orzcO7yL-mf`v#Pe|4q}+UAGZ zm>fDA7!(v3I5-%Xm>L=wfCxL!pz90i6cFbxpZIC)>p?=UbXgky0u z(A`L0K;kw0b8|Vdg0o^L4w3vu>T<&2g7a>LtH7z?hYGcf+}gzdze>%q3kJX zA?|XdW(P0R0WZ>`w@q4s;ms-1LcF8nXMr?J!&K6um)G2Z;l@Sv3-AFu!VUoUO#=U%Y?_rCCQyEJaMBkAJMxa;4*pkb-}^vRYch7I=| z4zV#EPzL8vSVClw|M$c6-X-&jAG7!KAD^AS@8`4G|6M=lg46K&&(gNjmbK-(Zg>tX PlNdZ*{an^LB{Ts5DoGVG diff --git a/util/test/data/D3D12_Overlay_Test/depth.png b/util/test/data/D3D12_Overlay_Test/depth.png deleted file mode 100644 index 1c4c2c5c2ad23c1c6376a80a34ef53994ab85d93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2633 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 Rv(LZ{jjYew%{?Zk=U>BSg%1D# diff --git a/util/test/data/GL_Overlay_Test/DebugOverlay.BackfaceCull.png b/util/test/data/GL_Overlay_Test/DebugOverlay.BackfaceCull.png deleted file mode 100644 index 6ecd1dfd9d37de54ea36bc0866681916c9aa4b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%nd0f<7*cWT?OpGnrw%-> zj^FlYCOEM$vrT!WzS1av1LO9$&X3!F{s3yA9$>4f<7aSU{3*%M!la~x#axG~xJ4WX zLL6LJut;hg^cG>{V0Uq0s43@jSoZ#0D@#LxLkmm8%7zY3hRckCLJZ58lvEgeSY13A zW^i>(VBk10iBUlziRr-H1`f^!AZGXuQos~sr1FUMf{MaFcP5auf`Sv1!$YVNurgO> zB{c@HQjl^W-XkTT$S45DhG6=^RV4KwJq;j7AZr1$lbql-fNW7vP*Z7Wm@z@eW^0Qu z%aN881*!e}gXVt*YW7^0v4pQfUbm@%!}DGS2M0$7r>BLCCiA16A{-qPp7gn$YWPvW z3}W`TH8eEbXjY6A?F(W2D3~oEaJzVOv}`Ys^D#?6AiDbSZAo56M#hb4ik70iCX64w z=P4+dm4DtX*!P<8<1z*Tf$q0yCM+y0M~*B>bJ&x_#&YCU`;tFDc{n=ma(Z?bO9}{B z%L@SwFjPD#E0FKS#<(#~F|(A9nJMXcl9B?*50=cI4$PkD=L3JM4a zY!2|aHE%o6arY){u}gP!IP>kOi-Uv187IZe`h86eGv0EZ6n?J7(GmHnfq^Nhu7#DO z&pRB~(Q_SSrKhW(%Q~loCIDKKHi7^E diff --git a/util/test/data/GL_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png b/util/test/data/GL_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png deleted file mode 100644 index 01f2f422a31d373c36d36d25a5764425d3beec9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1689 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%OYn4Y45_&F_O7F!QnX0J zLngt;LIr1pW>}{my2ENvaBj+irgx2J7o{$L<6YY68hVrK`EQ}gMt4tkKQBFZ|GQUm z{&zLz2Ia54Kyw)#92f)y7+6?9h?YEvB`_OMcpX_=qa>L)I86FGCNwlOT;?cQvb{Q) zhryzeK|z6mgM)#I35XgRFnAw!SE$Dc2xQ0#CCo2>%zA(m;RO^6pgv@5j6X43qp6{x z!{PWIY5lcgtDkcDDJUp4G$^PX_%1EM7~8(&m1F@E<8mPf2LUAP;PD`*QdDfel1k|L z24N11sX$jwU|?zjR;wzrrt*|`#G;8DG^PjbJ{OsbAnCuUWilqw*3o zjqqFn#g$cTa~uw=WMN@xfnxyy0ihQy;fV*;;nGo`^7fQ`GcS!d=HQ4}u`f?RKqolf znuBB7%Js4=EZtXl92^cXnXSv#}Xl9`9{#{z_ z%71IjW^-~xbfq2J9~T$*?NK1#$r3A3feiv@duv}_4Yibe`T6bJwG9oe8D)P0V`61@ z?em(iKG}1J%Xo ztSmZ?#ywhlcde4{`%-Bl)jD&kwvLXyU0Oz8e6$K8h)13eT&no`igTu?d|(={nB%f zISvBCPUlVc@3MM!rSQdf*PXkB1azzqoi_s-`)hCCs{7)-4G9+o%Z?pgz3$c=tFGsD z_V>zxQR&?`!B}tIx?MZ=b(NK>Dnt}036-5YdNuTRu=|zO+Q5XsY5n}q@ylgjH{I=+yhDAVpsIdVBbF?=wbg(foaj>Ie1sM(w1t}l~(O|5gpdbS@Edz)PU>KMM3Lu!l z^v<0-DW8AdQ4kPVP-g)wP#(fCuta$X#210Mg&Br{$(|X4U4XOzA28`7VT;n2{(o=h zZ3jAx>Fc72UiCr?W+*5enEud0L|D<$!NEeRPzyvw2@3-aarSX=c<{gNaez+?3(%ed zpi~dTLjhp{0gJ{0nXb+WAgBAOa&U08&j4m~sU#+*rUI9#$3XcG>WCI*0Ra$pfzlAi z01E&fC5%|#8*M2-~&NP6k|~oPzZv(C(xh%yz9n0+tzKjxV&*f!&<+2 zXqmlPT&==;ClB9Gk_QPHZX^`)?H1`~VFya=mcgf5$Nn4NVM)zIf6B5ycvG{=vZ zY_=^H^!gt6B3#)M?6RZk9s?NXfA%OOv3VcqAVxZ>cg_azBNTqXHMQJnaBN^G#t7l- z%VZxQAg3PRh%p942r0w}iHV7csXcNH?P^S!I8#w!Y=ji($o=xILc+rr^ASEv)N$OS zG@?2>L?Ust)yhFZLE|qUMu`xSDeajyB^+og?n&^ycM!dO$a87FIm^{XmR@=FPz?5}$Q$iH(JM0Dn_@EHhGoNxRR4-0tp{mNRfsEtO;Cv9c{^J~yU4&xAW` z9j|O_oqVmFvzFJ_3v2_62tI-qI1rAGj?VFeLLT7IQm}RV_FVtNw#>O~qoSe$kGl)X z0*e>f&T_*}ug%?hr)&;ZjH~a&z%c)0yX)!ABA0DH(ug*Lo5wv?J-u0MGZ$jl&>y+U zV^9Avo7RlQ{QjLz&CbW(&a*+qzitU}h`tmlLb?i1Q4Zo-{(H@kH4lgadeGWLbywv1 z*kT%y^Rj`sDK)twvc?-S=~k*@ef^5hE5Cr3v+##Msfy^vl|2<=?zY}46D}pMwW4?b z)zdol=C5>&D6i0yUd=G5iC37MLIR@N~F9U&Vn_g z&%8WtJ_l-z=L z8hStT?nxbA2b**O{;mYu%3YSpw*K)(tugyi2gaYF-1m;3nUQ5Ck@vXt6-@P7+5TE} z?Qqi6_||gAPyj}4h;)|Xm(3mb^OKOT0!V!e8g8{c+svuqd4dW1q!N?=43agYU%fNr zoOED{9y3Paj*@1kc1J|k4FY)pd5BBH{97Je*s*Gx=8#^n8yb3)N)?RsH)c%BE0WVC|3^V}{Q&crH zG@PlfW&@2gA;|C{so1lXl?FiLN+hq=O3&di#udF(B4LT5Qoj?PX(g~fdBl-BIP`U| z^WvTn4xPJIYdQM4M6%Gu#pU}ql(CjwSRLKC*SCiedU+>~2Or=2c6h$nKxA0LBS?)J z9?-h*a9>kKs7i}^F0;3{$p&h0m)@Uct>f@Hha|gjQJbF=K~X9TPM98tzJzYN z52ttp891LLNA+cD6cubz{fbMH65@Av(_``vrL znXf*b8)ReUXaxYUQBn#O02qV*?v@tF(vsJ74FKU%rD9sJrmCf;GWl+oOHq4%k4Ib8 zh5U|^EW%BBW1P_2|hLWygo#!z-pvWKsb3Lwx)_b0O>XE7S3{I3mD z=!5N9hc;R(#kf#!I9!j|5(beq9wHuzd@Dh|ua>ft%P?GmLfoD%Rd!wF5PB|>VMiiC zZ9fbK(2xo}z{P{!$~i?WLQEsScl5?_B+)m6kDdpOB3WD8X9uJO2qmR~LjOK263sHb zXGhXl7)z%AVrP;0{+Q_quM>#1RA!`S-{?!DW*=m#^DhSQ#7Z8fCkQuscKT$`QF9Jg z{8~u^iIT_BI}&+#d0m~$*Q4jP_HBo>)}RMUf&Mf&BwI04C={A1jQ{fYbK?TS7(uGY z#<}$DZzfIne%?`Mv@!-0FgohyVuw7#XOyP`mU}Hxr zB2G#d@F@m7^9#y82NWk! zne@7c=R7AxR&hmIY8;1g*BV4-lvDW40~6YSmdjK?qcvQdw|;MA_1VIjm^vGY5-2g9 zAFjR~&||vPQ)`V3MmxP9Cuc{0_qi9B`vD<<3t%~y-17SaiGNJ%f3#9M^(*RYQ2F!P zg%9K3z834aj0~J3!-smHzh7lxev~rRd0S8GZWN~R^d!8)WIxaJ^}Hzpq^meQ zlG|uJaU|))(KtthFMnQTW%jx)x4%85f1SMN;YL=;9fk6n11zb_*?k zJJ1+!VD6OgJ+e)PbHOnA}0!uCf+t_YHWAhzb49#@=BUF@(TrC8%!j`;zd zJ~^70dqmC(&;J$3CczVPGm?HiF^^TX-iO{}YtA}#+40n+Zb!wqc;D_`UrT5d!90Fr z*Zr^*pIVJuS-LNW`2y{1pzj0fRb<(b0DnI%P~hfx3#JUjcHZ&{;_J#;fGQC)Y$VGv z{2ex2>KaCtpp%GGOArc+?Qh9@lo3FiX+Wj?5`|^9h~OoT8g2YLJ35L-M=GT1!(8UP z2=;=GrzeiySao#Ay(CxyOmPPgwObeEW z+rnPFqtGGDlol3OIfSftr608LnE|Z#S=Ol;3&R!25VDFxdD7cocinHlFqr=F~_nn*d`|3tAWZL*2TZwG0=A17PA$=y(7pZUSp9{ZmErroJB1#(?s3n8AsRd(+$eswpiDceW!Pedtt<*&K(0y=uv;!yz(x(W%zv z7gyd+@zYRXjR~lx!1#gopaGN_W;^yu-Hx7E9)~&xbYOW?>Ee*R+pTBe+M)g~-}&@? zvPl3BydChWRby-F&s2=0bEDt5EsLeSU;X=;9a%LgY=ue$ZQ}Nw=Q3w+rHwtnp{$P_ zpNJXebZ%~K+Mcn^r_(PD=wHe|&3wq8i79Z(?Xm7`)0FaI1k!aHoqEgw$c_XKn(C|3 z6}9~Ny_2ALI78I4*F(hF*v^%7qma@?k;vDsI(LmdspcBoCqn`=!eX*3@|U!WT4DAuV>9GDULx~~g7l`yIGG$Os0x22^jByar)ax0K7 zm<)(6EuXwmclhJApqvAZ*D;APNDgG(pPl;LhS@_`2+-XHiX*c=JDK$Dx32Ui0kz}~ z&{lAqLGP;Z3$wXY8tsiC%0GQ8*(#w8MhfOPqrf!@lZv+0HW1w*e6tN(L@1V!j<#mh6~n7?*PP@_Hw?x*c85mI zGS`{;uAU`Mxq-`8l%(E6oyrmH)Piz~?Cb9j?`SMO$u-RW(_=n8`>?lhKOKzmQPKPW}`#6yVgBQLEbT!}PaFBKAKhEiF+ z5=i7|HV6QoUK~q#X(_7oL8PDMcn2tjxUJWFZx(Q98W*ly33etP`oBTaWFjmg4!DzVH%Znbg|6RpNlbZqjGY~3(& zZ4M|JBVe}FO{R$3SQJA{7z3F$SiZKXaWFSj+zJy^0$bfirZCxiP_zBPpUW=!CHFkf z@A*9+m*;9cOy}m(v(yw*A`l=#{rVq9Og# z_FD^;hqKRo(zUbA5wzo-i6bo;I~#mro)pFKa=9{vXAca@R00$Md0+TFE| zu*twO@@L#fqdk>|1FNo96U&5;RmhK%`%#!7Jbl8gg=M5ZmO9i<;CQ0cRmZZP)2u6m zBz3`zg{F_iQzjh8UjULY2#bV#oT7qTO;eB{fJ6$Ri(K;YtWw0f{lRDc4S;WJy#5SH@D5w&QaXzUA8ji(nvv^3R)@M zd9Py~GeDFLf2dBbvdc7W-77C0+@N-SvG=5G)n*(g2kZUry9`5P3M0au*B|^j*IJ&T z!0}Ni8@W_4nnw+Gt;zT$=36>kEUroC*VmUg76BE4aG|~O7fa{l9(qM z7y&`}ZKK9L-QV@Tu_5`Z$~8FNQ<|yYyD&UnZgR4e{FJai)8a*6*}ygXzUf6TdZzjQ z^?kK0YbX1SNs=%Cd{CSff;;VGjhmue!2)hP*UB+`4;QkP6eaIbs7P|mfr4akp6T+8 z7>ohr09*SK6F7m^LCMiA$mz)&JtjRSMFBVJ*F!k%7@8IsI;*NmFctI)U;qOH3l2|z z<~c*op4s(}Q&d}uEDs&c*$e)eUxXoOf-Cdwc}|us;jiyVv^dF#dP)DQ6Ai=`xu55! z=Z^sN_-B4hh$Ts~=5w@BA4EsUn5{p3SrAgOu{i(GGodQPv<9U_SM-97?_wh@31 nLkgHplTj74%%9?abE$t9ot!Lv`_=GmS$xg3jp@v3lg;@zl81kF diff --git a/util/test/data/GL_Overlay_Test/DebugOverlay.Drawcall.png b/util/test/data/GL_Overlay_Test/DebugOverlay.Drawcall.png deleted file mode 100644 index be31d5b0fe30f3abe1ad1d241e42ed0b00a034bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1432 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%jrVkM45_&F_AaB}Y6lUA zz^pqhzhC@Y^ZT{kowlnjF4A2k5(&@t77GbaTAyjH79;=Rp$X67RE7riy%9_dEG!I+ zj1CSA0sR;-egJ^5wVEjXVr9z%B!8g1Zxi zm(gwgv8my}s|gXTKThARU^HlCP*7mt;9y{40-}Zn4BiC=^FS6xM#08YcY3FXT3`G8 z{O4h>22PePrAPWD0s;a;2^+(`9o|mpxy_f~$jRcP+R&h&g1`+E9JtmUTGR=YUw4N| zm}7>QgM)(y1EV7tf2)jL&3_qauwMB(zio#<#cMn z)h~JqPAa_3S#HqSuoCEPkk=s?(ZBurbqVL_6| zvE1;yL?%WbRhYRDx?#eEj@26;JOI1%5DU``F987u50G0y_)&e@{-570JNf3m4Ou)d z=e?rT#d>xorp|v>?`z$!U0(9>_ujhv?v93rl`bY4Ph>b)I6YrmKbv>{sn6bgMU%#c z&Ldj_|443}`>`=%Xkm&~VE7 zpN^oQfP;E$9s&Xhffmp9h5GaQ0+=o=faw^7O+fS-CZHeKL0CZnhCA4RsY?cg48NMt?i5xg*!|kIn4_J~+`3=k#nt?fP{l|bME`z75pUXO@geCyh CM0v;n diff --git a/util/test/data/GL_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png b/util/test/data/GL_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png deleted file mode 100644 index 731190007c9b80d175df7864c9d75da31a7ae3b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1250 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%S?THG7*cWT?cLkChYTbd z0$1!}iEaMtp1`}yt=C0`#h0T`_Wrp_M-LBOHU9tV&BYc#t<(ZMuS(KYA6%WT%Aj!U zqR@e&MjN~Tylc2L1h81Jz|rqAObcTgHG~2b7&HVl!WFt$L^v3@SWby{C^51!H83?6 zu?Fq(SoVEo3sCI>2Z@aiS(?HS=1vC@PM`xtIJjIULX7NS1sl1*ApmBMn~s1h6Bi2u zYZFtT+5!iL0EGn}P+eYNT@H;4T#haC09p^!r2@5G6>5ybL=9oE!=^x8!w8hAD&x!R zpMD?Q`E|>fs zd;_^nLm(npsaV*wE9LBO7f?7PL{FSyAlmr}EEk}(SJYEKb<qm4|A4vh}nPZyd@VFUS%>E&tXObtG8w2HJt^(_4qAl1bTj^Hmql_Kn5 zm0ix6;5fPvR0%hz>iGdJsP0R%zFEApUx%bi}=7z%X4h1SKY3sm;&^lS4~D}ZBV ziALYnD$U6^_VNPb9q5_^a!)T-&0O-!Y$}r@DD)P%6kdr_*;%)LAuy!?19!zr8?UJ+ z1{cshqlQjB1{hx0Hw%wr+oT^kFo5U@eGOJ^*6E_!2 z!?Byp3$wbIA)&+$v6K%Sz7B=p#NG4=n7DvBV<{uhynzHBFZgFyZ-1ER|05FQ3{O`- Jmvv4FO#nz5URD4A diff --git a/util/test/data/GL_Overlay_Test/DebugOverlay.QuadOverdrawPass.png b/util/test/data/GL_Overlay_Test/DebugOverlay.QuadOverdrawPass.png deleted file mode 100644 index 402d112007ed32433dff8488bd4f32cff0d5036e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1991 zcma)7X;4#F7`+Ke2mvKxq-qgEfHo}Rf(t0(QxgHT7|^K}nQ|L-eq^p3r7T>o4(7&1QCS5#Y;5NiU; zgE*g|Z zcBk~0X1-KDJQT}kIZd_4L&7J&F=utjI&<}&CNLypo{>)gC0{cq{rtnBx9ae@Z2$a) zessX37ENn-n)$2#5POa}I}gc6cuuoaQu4b~?-$O2kL$xo86^bX))nm@kJRC1F6=O* zJ0_wkF-vY!{@&9}#GjJXNo=cT6-|@i4f-_r(bt{{NPmy9MEy)E+rQXbh9oBDVUhj} z_v0*)K`hD{5GA7I$6lT z8g$;ME>9esq4^=x^$UiFVk@&(vc>{&lrp6s1&iSmYeBd zVL#21;3zGvFLXoP39@5t(?1`JLIN|X9IMmEZ3h$`)5!2azSa8rB}JLr1hO_f;VXHv z!BuZv%nRmMxyi(c8K%{7tfEqkhb|EXWX&;}I$Ix<9~w znCkK9+tm_SgAzeG?yt)2-6JDGOV%}GiRDqA0aj1S9x8*dp}u*h1`Eo5lItP_!`1lGL;W0_ zN5YQPTx{3+?=ZO7kKf{TqVKZ4)#;>_cB6uda{R1sxlG<=_@>~NL#%d>kEIw6pJ&q* z=JoUYh8#}1Yr{Xpb~vI~sMR+SOSY>HHkQn)P~O!MP`l|3W=VHx#z+(IxxCpaN3Uz+ zKcuA?y_ZMW2ajSv={JL=aa+ejCRVG;U5FteXyg@)JAT_W6msOGnsJ? z>S;*@&JfLgVg|wK1&{s}{0)Kf0{y>&j}a&?>PFyQ%5+L8DtQXuP! diff --git a/util/test/data/GL_Overlay_Test/DebugOverlay.Stencil.png b/util/test/data/GL_Overlay_Test/DebugOverlay.Stencil.png deleted file mode 100644 index 4b7c7ed8e973d1fdfbc0c34d6c271aadf246be6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmcgreM}o=7=PdEb>3BI-)q-ZMf>pne4i6h7DWG4Zal9yo z1X`$MBuQrIR_@X_eR-?XSW0rw&3DdOrhDY!l}LEUeqhfzbN_{MMGWC^_fFsAXYVqM z&a&R#?a#Cbd;f&OTQ^)!e?0r`q)XCDMR{|sdn_?P=%vH$TEn?f`-DrXT`kJd+*Osc zO$T?W+}9>mEpbH05`B7??=P+7l~C^aa^=|bIQ&C{FYA+@YdWV;l=?$2CwlZIwX2g? zpSnCaPB{Njt@DkG>ylrHWmpNyzO@&#=QASI?|#k4vaI3@yLV#qR?8;Snk*z7cSOxe zBy6`**KUJQ|6!LN*513@d*q=JwA=C`c}*OwtAoGf=uJ1qjVJa)p0Fuq*+0%QVHIbl(Jsp3vXz9>#P zcnH05M88u~{u3-4JM(2GLN+s1;=O_>XJ)EVpUbxrzyyAelw*vmi&+*SO2XLFR77uz ztxbIOtVbl|dZaPPwHcN%fyhuYSnVu8Xot1q^otW@FR44VecWz)AdQW^+d8?$r`Iy9 z9p8DI1~G1^FK&s&paGtY$JPD1$4M*_Qwpyz+~*6oHrnJ)E4f| zA!LC(+Po36O0hiZz&M=U{2>jBOsXJE;Y|Yr4l(zz e#IydtQjG`lXEKirT_0+z(pUN`YLs5Ne&63KZC0oN diff --git a/util/test/data/GL_Overlay_Test/DebugOverlay.TriangleSizeDraw.png b/util/test/data/GL_Overlay_Test/DebugOverlay.TriangleSizeDraw.png deleted file mode 100644 index 10d16dd38b23cdb494520d2ac38ad268ab56e8b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 zcmchWT}TvB6vxlp8FxohcXpMs#dLODLea=T(r}e=9oscFGl?KF$W6otMI(eQ6mPb& zqa|(+ks+3Sy-J4pQJA)_9}y)*l33vf`4F+?+SWr6b!T0DvbSj9$2s%=pZ~e{VWy?H z$PyKyj{tzELaS5)K)DHNtcobUfn^T>lUOL_9dXS0-aTn^rbmj0=N1m+1PU$$#ww%Z zE&6!&^y>8ws=J5@h9Ys8BE zg(0GXV>fR`JfD((KkcG}3UFNGWnkqFf*agfK~M3`NPI8RZ#$S%qIo%$Tl5Aa;VrkB26*$cf;h)mHJ`9w5fx$02=>Il z4nnO`Wz||Aw+P-1V_j4Rh{0(H(V?oLC@z|yN#bG2z=MaN)L>u6FrtZ&6{@C77(7Je zG@6GPWY-$3HL3jp2G;7QckzHq0_j`W(NXGYf6N;-Yn`0eF--RuE}y^hiDt_0)u<72 zC-XUl(=CV5uBY-WOTl9PtJH&EZG6qUfX*a0RkI10=+Q zX&ZMujN@Ly!Zke0lb9N&!@LtP7|V5{g%Yuf#Ur#m6-p!IYN$=&`#1S3{-5-El{z;( U(G?l!^C^cG78FT6=95i-098#6-2eap diff --git a/util/test/data/GL_Overlay_Test/DebugOverlay.TriangleSizePass.png b/util/test/data/GL_Overlay_Test/DebugOverlay.TriangleSizePass.png deleted file mode 100644 index aa3e72a3ff9be82c7c8ed40bf871f0feed1baee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1721 zcmcgtYfKbZ6uvV%%ib*2y|ZO0L0M)OR4k<0#8hflye!KrHlRpxp;Q(mp-F#;50cS> z4hwW=v09C>wKlC96S3jlNAT^enu=AxwghQu1=i9Mw}eGXw_;0sXP{J*HnIKDN$#D= zH|Kok`_7!1aj(fpouduc0s!Wur`fUqp!Sg!2ZIPQ(l&GnfFL2=mYB_dJ@Tz*?Yz|? zHHCY2N1yA-YK>X4;A9v~dgh#`S13$5oX|EJcyYV#i{rmP-&j%}PtqUfkn-C4Mt-;+ z+02~VG^UpxjPc`DAI5cUFz`Ot+W-VJ#+HNzgpfT#$5!q-eTkOn%G4%ZEW(v9O~UzVK;GHY47Cnj^ygj{6fl6DZTHztWCt&Vk5CXzv&Wh9_+%P1v|PYTdahU z@GaR=qZZWk@mnr~QxJF&{_0Zb(sCnnAWeHsWUR|L9wHv&qh$opDmER8bJ0cA z4?YZN%+~nzb^u||)${Lll{B*u5t$bF0K;=dxEh3NAD? z7QD;z9SDU-hQFHRQ&blsFgFf>naqPT&r_Z$6?}oJX zmvtAK4G5jst~IdDi)rVgavMW=5^2&9F%ZF2H@e)aWE;k%M*-~=vo~9e=llKC#XW6< zg#*inpPQrtzTy__-&Pw4r#v1S!igwzv@w(QQSY8`+}N4OV6gxVxyz2TV-%#*qM}BushKG>S(%Yz`ScLRrVLx8m^{F(hiE_27ooc!@bAr%72;F>j zX^k4{X*zzGML3>#96YrDqI>QWcXlCGHazQ++=?ZlZDipYlfOBM^G16KrwILjYW~@#e~_%S zVYW^G#%IM-4O5mDvc&qP#>{o=kf3y!Ca)W&z)e@Ns?+c+o|mE2=N}DJS(4IX*o(!`5VVIR5~h CpE@f5 diff --git a/util/test/data/GL_Overlay_Test/DebugOverlay.ViewportScissor.png b/util/test/data/GL_Overlay_Test/DebugOverlay.ViewportScissor.png deleted file mode 100644 index 32c978829f3dc8507e661b10a38a6bb0f58ea002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 954 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 Rv(LZ{jjYew%{?Zk=U>BSg%1D# diff --git a/util/test/data/VK_Overlay_Test/DebugOverlay.BackfaceCull.png b/util/test/data/VK_Overlay_Test/DebugOverlay.BackfaceCull.png deleted file mode 100644 index 6ecd1dfd9d37de54ea36bc0866681916c9aa4b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%nd0f<7*cWT?OpGnrw%-> zj^FlYCOEM$vrT!WzS1av1LO9$&X3!F{s3yA9$>4f<7aSU{3*%M!la~x#axG~xJ4WX zLL6LJut;hg^cG>{V0Uq0s43@jSoZ#0D@#LxLkmm8%7zY3hRckCLJZ58lvEgeSY13A zW^i>(VBk10iBUlziRr-H1`f^!AZGXuQos~sr1FUMf{MaFcP5auf`Sv1!$YVNurgO> zB{c@HQjl^W-XkTT$S45DhG6=^RV4KwJq;j7AZr1$lbql-fNW7vP*Z7Wm@z@eW^0Qu z%aN881*!e}gXVt*YW7^0v4pQfUbm@%!}DGS2M0$7r>BLCCiA16A{-qPp7gn$YWPvW z3}W`TH8eEbXjY6A?F(W2D3~oEaJzVOv}`Ys^D#?6AiDbSZAo56M#hb4ik70iCX64w z=P4+dm4DtX*!P<8<1z*Tf$q0yCM+y0M~*B>bJ&x_#&YCU`;tFDc{n=ma(Z?bO9}{B z%L@SwFjPD#E0FKS#<(#~F|(A9nJMXcl9B?*50=cI4$PkD=L3JM4a zY!2|aHE%o6arY){u}gP!IP>kOi-Uv187IZe`h86eGv0EZ6n?J7(GmHnfq^Nhu7#DO z&pRB~(Q_SSrKhW(%Q~loCIDKKHi7^E diff --git a/util/test/data/VK_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png b/util/test/data/VK_Overlay_Test/DebugOverlay.ClearBeforeDraw.Depth.png deleted file mode 100644 index 01f2f422a31d373c36d36d25a5764425d3beec9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1689 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 diff --git a/util/test/data/VK_Overlay_Test/DebugOverlay.Drawcall.png b/util/test/data/VK_Overlay_Test/DebugOverlay.Drawcall.png deleted file mode 100644 index be31d5b0fe30f3abe1ad1d241e42ed0b00a034bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1432 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%jrVkM45_&F_AaB}Y6lUA zz^pqhzhC@Y^ZT{kowlnjF4A2k5(&@t77GbaTAyjH79;=Rp$X67RE7riy%9_dEG!I+ zj1CSA0sR;-egJ^5wVEjXVr9z%B!8g1Zxi zm(gwgv8my}s|gXTKThARU^HlCP*7mt;9y{40-}Zn4BiC=^FS6xM#08YcY3FXT3`G8 z{O4h>22PePrAPWD0s;a;2^+(`9o|mpxy_f~$jRcP+R&h&g1`+E9JtmUTGR=YUw4N| zm}7>QgM)(y1EV7tf2)jL&3_qauwMB(zio#<#cMn z)h~JqPAa_3S#HqSuoCEPkk=s?(ZBurbqVL_6| zvE1;yL?%WbRhYRDx?#eEj@26;JOI1%5DU``F987u50G0y_)&e@{-570JNf3m4Ou)d z=e?rT#d>xorp|v>?`z$!U0(9>_ujhv?v93rl`bY4Ph>b)I6YrmKbv>{sn6bgMU%#c z&Ldj_|443}`>`=%Xkm&~VE7 zpN^oQfP;E$9s&Xhffmp9h5GaQ0+=o=faw^7O+fS-CZHeKL0CZnhCA4RsY?cg48NMt?i5xg*!|kIn4_J~+`3=k#nt?fP{l|bME`z75pUXO@geCyh CM0v;n diff --git a/util/test/data/VK_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png b/util/test/data/VK_Overlay_Test/DebugOverlay.QuadOverdrawDraw.png deleted file mode 100644 index 731190007c9b80d175df7864c9d75da31a7ae3b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1250 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%S?THG7*cWT?cLkChYTbd z0$1!}iEaMtp1`}yt=C0`#h0T`_Wrp_M-LBOHU9tV&BYc#t<(ZMuS(KYA6%WT%Aj!U zqR@e&MjN~Tylc2L1h81Jz|rqAObcTgHG~2b7&HVl!WFt$L^v3@SWby{C^51!H83?6 zu?Fq(SoVEo3sCI>2Z@aiS(?HS=1vC@PM`xtIJjIULX7NS1sl1*ApmBMn~s1h6Bi2u zYZFtT+5!iL0EGn}P+eYNT@H;4T#haC09p^!r2@5G6>5ybL=9oE!=^x8!w8hAD&x!R zpMD?Q`E|>fs zd;_^nLm(npsaV*wE9LBO7f?7PL{FSyAlmr}EEk}(SJYEKb<qm4|A4vh}nPZyd@VFUS%>E&tXObtG8w2HJt^(_4qAl1bTj^Hmql_Kn5 zm0ix6;5fPvR0%hz>iGdJsP0R%zFEApUx%bi}=7z%X4h1SKY3sm;&^lS4~D}ZBV ziALYnD$U6^_VNPb9q5_^a!)T-&0O-!Y$}r@DD)P%6kdr_*;%)LAuy!?19!zr8?UJ+ z1{cshqlQjB1{hx0Hw%wr+oT^kFo5U@eGOJ^*6E_!2 z!?Byp3$wbIA)&+$v6K%Sz7B=p#NG4=n7DvBV<{uhynzHBFZgFyZ-1ER|05FQ3{O`- Jmvv4FO#nz5URD4A diff --git a/util/test/data/VK_Overlay_Test/DebugOverlay.QuadOverdrawPass.png b/util/test/data/VK_Overlay_Test/DebugOverlay.QuadOverdrawPass.png deleted file mode 100644 index 402d112007ed32433dff8488bd4f32cff0d5036e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1991 zcma)7X;4#F7`+Ke2mvKxq-qgEfHo}Rf(t0(QxgHT7|^K}nQ|L-eq^p3r7T>o4(7&1QCS5#Y;5NiU; zgE*g|Z zcBk~0X1-KDJQT}kIZd_4L&7J&F=utjI&<}&CNLypo{>)gC0{cq{rtnBx9ae@Z2$a) zessX37ENn-n)$2#5POa}I}gc6cuuoaQu4b~?-$O2kL$xo86^bX))nm@kJRC1F6=O* zJ0_wkF-vY!{@&9}#GjJXNo=cT6-|@i4f-_r(bt{{NPmy9MEy)E+rQXbh9oBDVUhj} z_v0*)K`hD{5GA7I$6lT z8g$;ME>9esq4^=x^$UiFVk@&(vc>{&lrp6s1&iSmYeBd zVL#21;3zGvFLXoP39@5t(?1`JLIN|X9IMmEZ3h$`)5!2azSa8rB}JLr1hO_f;VXHv z!BuZv%nRmMxyi(c8K%{7tfEqkhb|EXWX&;}I$Ix<9~w znCkK9+tm_SgAzeG?yt)2-6JDGOV%}GiRDqA0aj1S9x8*dp}u*h1`Eo5lItP_!`1lGL;W0_ zN5YQPTx{3+?=ZO7kKf{TqVKZ4)#;>_cB6uda{R1sxlG<=_@>~NL#%d>kEIw6pJ&q* z=JoUYh8#}1Yr{Xpb~vI~sMR+SOSY>HHkQn)P~O!MP`l|3W=VHx#z+(IxxCpaN3Uz+ zKcuA?y_ZMW2ajSv={JL=aa+ejCRVG;U5FteXyg@)JAT_W6msOGnsJ? z>S;*@&JfLgVg|wK1&{s}{0)Kf0{y>&j}a&?>PFyQ%5+L8DtQXuP! diff --git a/util/test/data/VK_Overlay_Test/DebugOverlay.Stencil.png b/util/test/data/VK_Overlay_Test/DebugOverlay.Stencil.png deleted file mode 100644 index 4b7c7ed8e973d1fdfbc0c34d6c271aadf246be6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmcgreM}o=7=PdEb>3BI-)q-ZMf>pne4i6h7DWG4Zal9yo z1X`$MBuQrIR_@X_eR-?XSW0rw&3DdOrhDY!l}LEUeqhfzbN_{MMGWC^_fFsAXYVqM z&a&R#?a#Cbd;f&OTQ^)!e?0r`q)XCDMR{|sdn_?P=%vH$TEn?f`-DrXT`kJd+*Osc zO$T?W+}9>mEpbH05`B7??=P+7l~C^aa^=|bIQ&C{FYA+@YdWV;l=?$2CwlZIwX2g? zpSnCaPB{Njt@DkG>ylrHWmpNyzO@&#=QASI?|#k4vaI3@yLV#qR?8;Snk*z7cSOxe zBy6`**KUJQ|6!LN*513@d*q=JwA=C`c}*OwtAoGf=uJ1qjVJa)p0Fuq*+0%QVHIbl(Jsp3vXz9>#P zcnH05M88u~{u3-4JM(2GLN+s1;=O_>XJ)EVpUbxrzyyAelw*vmi&+*SO2XLFR77uz ztxbIOtVbl|dZaPPwHcN%fyhuYSnVu8Xot1q^otW@FR44VecWz)AdQW^+d8?$r`Iy9 z9p8DI1~G1^FK&s&paGtY$JPD1$4M*_Qwpyz+~*6oHrnJ)E4f| zA!LC(+Po36O0hiZz&M=U{2>jBOsXJE;Y|Yr4l(zz e#IydtQjG`lXEKirT_0+z(pUN`YLs5Ne&63KZC0oN diff --git a/util/test/data/VK_Overlay_Test/DebugOverlay.TriangleSizeDraw.png b/util/test/data/VK_Overlay_Test/DebugOverlay.TriangleSizeDraw.png deleted file mode 100644 index 10d16dd38b23cdb494520d2ac38ad268ab56e8b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 zcmchWT}TvB6vxlp8FxohcXpMs#dLODLea=T(r}e=9oscFGl?KF$W6otMI(eQ6mPb& zqa|(+ks+3Sy-J4pQJA)_9}y)*l33vf`4F+?+SWr6b!T0DvbSj9$2s%=pZ~e{VWy?H z$PyKyj{tzELaS5)K)DHNtcobUfn^T>lUOL_9dXS0-aTn^rbmj0=N1m+1PU$$#ww%Z zE&6!&^y>8ws=J5@h9Ys8BE zg(0GXV>fR`JfD((KkcG}3UFNGWnkqFf*agfK~M3`NPI8RZ#$S%qIo%$Tl5Aa;VrkB26*$cf;h)mHJ`9w5fx$02=>Il z4nnO`Wz||Aw+P-1V_j4Rh{0(H(V?oLC@z|yN#bG2z=MaN)L>u6FrtZ&6{@C77(7Je zG@6GPWY-$3HL3jp2G;7QckzHq0_j`W(NXGYf6N;-Yn`0eF--RuE}y^hiDt_0)u<72 zC-XUl(=CV5uBY-WOTl9PtJH&EZG6qUfX*a0RkI10=+Q zX&ZMujN@Ly!Zke0lb9N&!@LtP7|V5{g%Yuf#Ur#m6-p!IYN$=&`#1S3{-5-El{z;( U(G?l!^C^cG78FT6=95i-098#6-2eap diff --git a/util/test/data/VK_Overlay_Test/DebugOverlay.TriangleSizePass.png b/util/test/data/VK_Overlay_Test/DebugOverlay.TriangleSizePass.png deleted file mode 100644 index aa3e72a3ff9be82c7c8ed40bf871f0feed1baee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1721 zcmcgtYfKbZ6uvV%%ib*2y|ZO0L0M)OR4k<0#8hflye!KrHlRpxp;Q(mp-F#;50cS> z4hwW=v09C>wKlC96S3jlNAT^enu=AxwghQu1=i9Mw}eGXw_;0sXP{J*HnIKDN$#D= zH|Kok`_7!1aj(fpouduc0s!Wur`fUqp!Sg!2ZIPQ(l&GnfFL2=mYB_dJ@Tz*?Yz|? zHHCY2N1yA-YK>X4;A9v~dgh#`S13$5oX|EJcyYV#i{rmP-&j%}PtqUfkn-C4Mt-;+ z+02~VG^UpxjPc`DAI5cUFz`Ot+W-VJ#+HNzgpfT#$5!q-eTkOn%G4%ZEW(v9O~UzVK;GHY47Cnj^ygj{6fl6DZTHztWCt&Vk5CXzv&Wh9_+%P1v|PYTdahU z@GaR=qZZWk@mnr~QxJF&{_0Zb(sCnnAWeHsWUR|L9wHv&qh$opDmER8bJ0cA z4?YZN%+~nzb^u||)${Lll{B*u5t$bF0K;=dxEh3NAD? z7QD;z9SDU-hQFHRQ&blsFgFf>naqPT&r_Z$6?}oJX zmvtAK4G5jst~IdDi)rVgavMW=5^2&9F%ZF2H@e)aWE;k%M*-~=vo~9e=llKC#XW6< zg#*inpPQrtzTy__-&Pw4r#v1S!igwzv@w(QQSY8`+}N4OV6gxVxyz2TV-%#*qM}BushKG>S(%Yz`ScLRrVLx8m^{F(hiE_27ooc!@bAr%72;F>j zX^k4{X*zzGML3>#96YrDqI>QWcXlCGHazQ++=?ZlZDipYlfOBM^G16KrwILjYW~@#e~_%S zVYW^G#%IM-4O5mDvc&qP#>{o=kf3y!Ca)W&z)e@Ns?+c+o|mE2=N}DJS(4IX*o(!`5VVIR5~h CpE@f5 diff --git a/util/test/data/VK_Overlay_Test/DebugOverlay.ViewportScissor.png b/util/test/data/VK_Overlay_Test/DebugOverlay.ViewportScissor.png deleted file mode 100644 index 151d70852eb50b19c4f2b1ac95e763aee90e7c69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKNIvi|3k+<8Q9%5i%Y4mh)45_&F_O4-;oFh-e z#k&S`{WqBVPE`uc+ofKx)+B9Bivds658orzcO7yL-mf`v#Pe|4q}+UAGZ zm>fDA7!(v3I5-%Xm>L=wfCxL!pz90i6cFbxpZIC)>p?=UbXgky0u z(A`L0K;kw0b8|Vdg0o^L4w3vu>T<&2g7a>LtH7z?hYGcf+}gzdze>%q3kJX zA?|XdW(P0R0WZ>`w@q4s;ms-1LcF8nXMr?J!&K6um)G2Z;l@Sv3-AFu!VUoUO#=U%Y?_rCCQyEJaMBkAJMxa;4*pkb-}^vRYch7I=| z4zV#EPzL8vSVClw|M$c6-X-&jAG7!KAD^AS@8`4G|6M=lg46K&&(gNjmbK-(Zg>tX PlNdZ*{an^LB{Ts5DoGVG diff --git a/util/test/data/VK_Overlay_Test/depth.png b/util/test/data/VK_Overlay_Test/depth.png deleted file mode 100644 index 1c4c2c5c2ad23c1c6376a80a34ef53994ab85d93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2633 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 Rv(LZ{jjYew%{?Zk=U>BSg%1D# diff --git a/util/test/demos/d3d11/d3d11_overlay_test.cpp b/util/test/demos/d3d11/d3d11_overlay_test.cpp index 1c1f06e1b..8c6894023 100644 --- a/util/test/demos/d3d11/d3d11_overlay_test.cpp +++ b/util/test/demos/d3d11/d3d11_overlay_test.cpp @@ -29,6 +29,15 @@ RD_TEST(D3D11_Overlay_Test, D3D11GraphicsTest) static constexpr const char *Description = "Makes a couple of draws that show off all the overlays in some way"; + std::string whitePixel = R"EOSHADER( + +float4 main() : SV_Target0 +{ + return float4(1, 1, 1, 1); +} + +)EOSHADER"; + int main() { // initialise, create window, create device, etc @@ -42,6 +51,7 @@ RD_TEST(D3D11_Overlay_Test, D3D11GraphicsTest) ID3D11VertexShaderPtr vs = CreateVS(vsblob); ID3D11PixelShaderPtr ps = CreatePS(psblob); + ID3D11PixelShaderPtr whiteps = CreatePS(Compile(whitePixel, "main", "ps_4_0")); const DefaultA2V VBData[] = { // this triangle occludes in depth @@ -108,6 +118,11 @@ RD_TEST(D3D11_Overlay_Test, D3D11GraphicsTest) MakeTexture(DXGI_FORMAT_D32_FLOAT_S8X24_UINT, screenWidth, screenHeight).DSV(); ID3D11DepthStencilViewPtr dsv = MakeDSV(depthtex); + ID3D11Texture2DPtr subtex = + MakeTexture(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, screenWidth, screenHeight).RTV().Array(5).Mips(4); + ID3D11RenderTargetViewPtr subrtv = + MakeRTV(subtex).FirstSlice(2).NumSlices(1).FirstMip(2).NumMips(1); + while(Running()) { IASetVertexBuffer(vb, sizeof(DefaultA2V), 0); @@ -126,8 +141,15 @@ RD_TEST(D3D11_Overlay_Test, D3D11GraphicsTest) SetDepthState(depth); SetStencilRef(0x55); + D3D11_RASTERIZER_DESC raster = GetRasterState(); + + raster.ScissorEnable = TRUE; + + SetRasterState(raster); + RSSetViewport( {10.0f, 10.0f, (float)screenWidth - 20.0f, (float)screenHeight - 20.0f, 0.0f, 1.0f}); + RSSetScissor({0, 0, screenWidth, screenHeight}); ctx->OMSetRenderTargets(1, &bbRTV.GetInterfacePtr(), dsv); @@ -153,13 +175,29 @@ RD_TEST(D3D11_Overlay_Test, D3D11GraphicsTest) ctx->Draw(3, 6); // add a marker so we can easily locate this draw - annot->SetMarker(L"Test Begin"); + setMarker("Test Begin"); depth.StencilEnable = TRUE; depth.FrontFace.StencilFunc = D3D11_COMPARISON_GREATER; SetDepthState(depth); ctx->Draw(24, 9); + depth.StencilEnable = FALSE; + depth.DepthFunc = D3D11_COMPARISON_ALWAYS; + SetDepthState(depth); + + ctx->PSSetShader(whiteps, NULL, 0); + + RSSetViewport({5.0f, 5.0f, float(screenWidth) / 4.0f - 10.0f, + float(screenHeight) / 4.0f - 10.0f, 0.0f, 1.0f}); + RSSetScissor({0, 0, screenWidth / 4, screenHeight / 4}); + + ClearRenderTargetView(subrtv, {0.0f, 0.0f, 0.0f, 1.0f}); + + ctx->OMSetRenderTargets(1, &subrtv.GetInterfacePtr(), NULL); + setMarker("Subresources"); + ctx->Draw(24, 9); + Present(); } diff --git a/util/test/demos/d3d11/d3d11_test.cpp b/util/test/demos/d3d11/d3d11_test.cpp index 78b65faf0..7ea434b76 100644 --- a/util/test/demos/d3d11/d3d11_test.cpp +++ b/util/test/demos/d3d11/d3d11_test.cpp @@ -418,6 +418,11 @@ void D3D11GraphicsTest::RSSetViewport(D3D11_VIEWPORT view) ctx->RSSetViewports(1, &view); } +void D3D11GraphicsTest::RSSetScissor(D3D11_RECT scissor) +{ + ctx->RSSetScissorRects(1, &scissor); +} + D3D11_RASTERIZER_DESC D3D11GraphicsTest::GetRasterState() { ID3D11RasterizerState *state = NULL; diff --git a/util/test/demos/d3d11/d3d11_test.h b/util/test/demos/d3d11/d3d11_test.h index 960aeb6a7..43694d8d5 100644 --- a/util/test/demos/d3d11/d3d11_test.h +++ b/util/test/demos/d3d11/d3d11_test.h @@ -146,6 +146,7 @@ struct D3D11GraphicsTest : public GraphicsTest D3D11_RASTERIZER_DESC GetRasterState(); void SetRasterState(const D3D11_RASTERIZER_DESC &desc); void RSSetViewport(D3D11_VIEWPORT view); + void RSSetScissor(D3D11_RECT scissor); D3D11_DEPTH_STENCIL_DESC GetDepthState(); void SetDepthState(const D3D11_DEPTH_STENCIL_DESC &desc); diff --git a/util/test/demos/d3d12/d3d12_overlay_test.cpp b/util/test/demos/d3d12/d3d12_overlay_test.cpp index dce99ac81..1d27750a2 100644 --- a/util/test/demos/d3d12/d3d12_overlay_test.cpp +++ b/util/test/demos/d3d12/d3d12_overlay_test.cpp @@ -29,6 +29,15 @@ RD_TEST(D3D12_Overlay_Test, D3D12GraphicsTest) static constexpr const char *Description = "Makes a couple of draws that show off all the overlays in some way"; + std::string whitePixel = R"EOSHADER( + +float4 main() : SV_Target0 +{ + return float4(1, 1, 1, 1); +} + +)EOSHADER"; + int main() { // initialise, create window, create device, etc @@ -37,6 +46,7 @@ RD_TEST(D3D12_Overlay_Test, D3D12GraphicsTest) ID3DBlobPtr vsblob = Compile(D3DDefaultVertex, "main", "vs_4_0"); ID3DBlobPtr psblob = Compile(D3DDefaultPixel, "main", "ps_4_0"); + ID3DBlobPtr whitepsblob = Compile(whitePixel, "main", "ps_4_0"); const DefaultA2V VBData[] = { // this triangle occludes in depth @@ -133,12 +143,23 @@ RD_TEST(D3D12_Overlay_Test, D3D12GraphicsTest) creator.GraphicsDesc.DepthStencilState.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_GREATER; ID3D12PipelineStatePtr pipe = creator; + creator.GraphicsDesc.DepthStencilState.StencilEnable = FALSE; + creator.GraphicsDesc.DepthStencilState.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; + creator.PS(whitepsblob); + ID3D12PipelineStatePtr whitepipe = creator; + ResourceBarrier(vb, D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER); ID3D12ResourcePtr dsv = MakeTexture(DXGI_FORMAT_D32_FLOAT_S8X24_UINT, screenWidth, screenHeight) .DSV() .InitialState(D3D12_RESOURCE_STATE_DEPTH_WRITE); + ID3D12ResourcePtr subtex = MakeTexture(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, screenWidth, screenHeight) + .RTV() + .Array(5) + .Mips(4) + .InitialState(D3D12_RESOURCE_STATE_RENDER_TARGET); + while(Running()) { ID3D12GraphicsCommandListPtr cmd = GetCommandBuffer(); @@ -177,11 +198,32 @@ RD_TEST(D3D12_Overlay_Test, D3D12GraphicsTest) cmd->DrawInstanced(3, 1, 6, 0); // add a marker so we can easily locate this draw - cmd->SetMarker(1, "Test Begin", sizeof("Test Begin") - 1); + setMarker(cmd, "Test Begin"); cmd->SetPipelineState(pipe); cmd->DrawInstanced(24, 1, 9, 0); + D3D12_CPU_DESCRIPTOR_HANDLE subrtv = MakeRTV(subtex) + .Format(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) + .FirstSlice(2) + .NumSlices(1) + .FirstMip(2) + .NumMips(1) + .CreateCPU(1); + + RSSetViewport(cmd, {5.0f, 5.0f, float(screenWidth) / 4.0f - 10.0f, + float(screenHeight) / 4.0f - 10.0f, 0.0f, 1.0f}); + RSSetScissorRect(cmd, {0, 0, screenWidth / 4, screenHeight / 4}); + + OMSetRenderTargets(cmd, {subrtv}, {}); + + ClearRenderTargetView(cmd, subrtv, {0.0f, 0.0f, 0.0f, 1.0f}); + + cmd->SetPipelineState(whitepipe); + + setMarker(cmd, "Subresources"); + cmd->DrawInstanced(24, 1, 9, 0); + FinishUsingBackbuffer(cmd, D3D12_RESOURCE_STATE_RENDER_TARGET); cmd->Close(); diff --git a/util/test/demos/gl/gl_overlay_test.cpp b/util/test/demos/gl/gl_overlay_test.cpp index 62b6f2748..9c8212a54 100644 --- a/util/test/demos/gl/gl_overlay_test.cpp +++ b/util/test/demos/gl/gl_overlay_test.cpp @@ -71,6 +71,18 @@ void main() Color = vertIn.col; } +)EOSHADER"; + + std::string whitepixel = R"EOSHADER( +#version 420 core + +layout(location = 0, index = 0) out vec4 Color; + +void main() +{ + Color = vec4(1,1,1,1); +} + )EOSHADER"; int main() @@ -157,6 +169,7 @@ void main() glEnableVertexAttribArray(2); GLuint program = MakeProgram(common + vertex, common + pixel); + GLuint whiteprogram = MakeProgram(common + vertex, whitepixel); GLuint fbo = MakeFBO(); glBindFramebuffer(GL_FRAMEBUFFER, fbo); @@ -173,6 +186,14 @@ void main() glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, attachments[1], 0); + GLuint subtex = MakeTexture(); + glBindTexture(GL_TEXTURE_2D_ARRAY, subtex); + glTexStorage3D(GL_TEXTURE_2D_ARRAY, 4, GL_SRGB8_ALPHA8, screenWidth, screenHeight, 5); + + GLuint subfbo = MakeFBO(); + glBindFramebuffer(GL_FRAMEBUFFER, subfbo); + glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, subtex, 2, 2); + while(Running()) { glBindVertexArray(vao); @@ -184,12 +205,14 @@ void main() glDepthMask(GL_TRUE); glEnable(GL_DEPTH_TEST); + glEnable(GL_SCISSOR_TEST); glDisable(GL_DEPTH_CLAMP); glDisable(GL_STENCIL_TEST); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glStencilFunc(GL_ALWAYS, 0x55, 0xff); glViewport(10, 10, GLsizei(screenWidth) - 20, GLsizei(screenHeight) - 20); + glScissor(0, 0, screenWidth, screenHeight); glBindFramebuffer(GL_FRAMEBUFFER, fbo); float col[] = {0.2f, 0.2f, 0.2f, 1.0f}; @@ -210,8 +233,7 @@ void main() glDrawArrays(GL_TRIANGLES, 6, 3); // add a marker so we can easily locate this draw - glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0, - GL_DEBUG_SEVERITY_HIGH, -1, "Test Begin"); + setMarker("Test Begin"); glEnable(GL_STENCIL_TEST); glStencilFunc(GL_GREATER, 0x55, 0xff); @@ -222,6 +244,21 @@ void main() glBlitFramebuffer(0, 0, screenWidth, screenHeight, 0, 0, screenWidth, screenHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR); + glBindFramebuffer(GL_FRAMEBUFFER, subfbo); + float col2[] = {0.0f, 0.0f, 0.0f, 1.0f}; + glClearBufferfv(GL_COLOR, 0, col2); + + glDepthFunc(GL_ALWAYS); + glDisable(GL_STENCIL_TEST); + + glUseProgram(whiteprogram); + + glViewport(5, 5, GLsizei(screenWidth) / 4 - 10, GLsizei(screenHeight) / 4 - 10); + glScissor(0, 0, screenWidth / 4, screenHeight / 4); + + setMarker("Subresources"); + glDrawArrays(GL_TRIANGLES, 9, 24); + Present(); } diff --git a/util/test/demos/vk/vk_overlay_test.cpp b/util/test/demos/vk/vk_overlay_test.cpp index 7c3cd1065..ba6e18fea 100644 --- a/util/test/demos/vk/vk_overlay_test.cpp +++ b/util/test/demos/vk/vk_overlay_test.cpp @@ -71,6 +71,18 @@ void main() Color = vertIn.col; } +)EOSHADER"; + + std::string whitepixel = R"EOSHADER( +#version 420 core + +layout(location = 0, index = 0) out vec4 Color; + +void main() +{ + Color = vec4(1,1,1,1); +} + )EOSHADER"; int main() @@ -176,7 +188,8 @@ void main() vkh::RenderPassCreator renderPassCreateInfo; renderPassCreateInfo.attachments.push_back(vkh::AttachmentDescription( - mainWindow->format, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_GENERAL)); + mainWindow->format, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, + VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE)); renderPassCreateInfo.attachments.push_back(vkh::AttachmentDescription( VK_FORMAT_D32_SFLOAT_S8_UINT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE, VK_SAMPLE_COUNT_1_BIT, @@ -239,14 +252,39 @@ void main() pipeCreateInfo.depthStencilState.front.compareOp = VK_COMPARE_OP_GREATER; VkPipeline pipe = createGraphicsPipeline(pipeCreateInfo); + renderPassCreateInfo.attachments.pop_back(); + renderPassCreateInfo.subpasses[0].pDepthStencilAttachment = NULL; + + VkRenderPass subrp = createRenderPass(renderPassCreateInfo); + + pipeCreateInfo.stages[1] = + CompileShaderModule(whitepixel, ShaderLang::glsl, ShaderStage::frag, "main"); + pipeCreateInfo.renderPass = subrp; + pipeCreateInfo.depthStencilState.stencilTestEnable = VK_FALSE; + pipeCreateInfo.depthStencilState.depthCompareOp = VK_COMPARE_OP_ALWAYS; + VkPipeline whitepipe = createGraphicsPipeline(pipeCreateInfo); + + AllocatedImage subimg( + this, + vkh::ImageCreateInfo(mainWindow->scissor.extent.width, mainWindow->scissor.extent.height, 0, + mainWindow->format, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, 4, 5), + VmaAllocationCreateInfo({0, VMA_MEMORY_USAGE_GPU_ONLY})); + + VkImageView subview = createImageView(vkh::ImageViewCreateInfo( + subimg.image, VK_IMAGE_VIEW_TYPE_2D, mainWindow->format, {}, + vkh::ImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 2, 1, 2, 1))); + + VkFramebuffer subfb = createFramebuffer(vkh::FramebufferCreateInfo( + subrp, {subview}, + {mainWindow->scissor.extent.width / 4, mainWindow->scissor.extent.height / 4})); + while(Running()) { VkCommandBuffer cmd = GetCommandBuffer(); vkBeginCommandBuffer(cmd, vkh::CommandBufferBeginInfo()); - VkImage swapimg = - StartUsingBackbuffer(cmd, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_GENERAL); + StartUsingBackbuffer(cmd, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_GENERAL); VkViewport v = mainWindow->viewport; v.x += 10.0f; @@ -265,14 +303,11 @@ void main() vkCmdSetScissor(cmd, 0, 1, &mainWindow->scissor); vkh::cmdBindVertexBuffers(cmd, 0, {vb.buffer}, {0}); - vkCmdClearColorImage(cmd, swapimg, VK_IMAGE_LAYOUT_GENERAL, - vkh::ClearColorValue(0.2f, 0.2f, 0.2f, 1.0f), 1, - vkh::ImageSubresourceRange()); - - vkCmdBeginRenderPass( - cmd, vkh::RenderPassBeginInfo(renderPass, fbs[mainWindow->imgIndex], mainWindow->scissor, - {vkh::ClearValue(), vkh::ClearValue(1.0f, 0)}), - VK_SUBPASS_CONTENTS_INLINE); + vkCmdBeginRenderPass(cmd, + vkh::RenderPassBeginInfo( + renderPass, fbs[mainWindow->imgIndex], mainWindow->scissor, + {vkh::ClearValue(0.2f, 0.2f, 0.2f, 1.0f), vkh::ClearValue(1.0f, 0)}), + VK_SUBPASS_CONTENTS_INLINE); // draw the setup triangles @@ -293,6 +328,38 @@ void main() vkCmdEndRenderPass(cmd); + v = mainWindow->viewport; + v.width /= 4.0f; + v.height /= 4.0f; + v.x += 5.0f; + v.y += 5.0f; + v.width -= 10.0f; + v.height -= 10.0f; + + if(KHR_maintenance1) + { + v.y += v.height; + v.height = -v.height; + } + + VkRect2D s = mainWindow->scissor; + s.extent.width /= 4; + s.extent.height /= 4; + + vkCmdSetViewport(cmd, 0, 1, &v); + vkCmdSetScissor(cmd, 0, 1, &s); + + vkCmdBeginRenderPass( + cmd, vkh::RenderPassBeginInfo(subrp, subfb, s, {vkh::ClearValue(0.0f, 0.0f, 0.0f, 1.0f)}), + VK_SUBPASS_CONTENTS_INLINE); + + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, whitepipe); + + setMarker(cmd, "Subresources"); + vkCmdDraw(cmd, 24, 1, 9, 0); + + vkCmdEndRenderPass(cmd); + FinishUsingBackbuffer(cmd, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_GENERAL); vkEndCommandBuffer(cmd); diff --git a/util/test/rdtest/__init__.py b/util/test/rdtest/__init__.py index a549272db..078c48f44 100644 --- a/util/test/rdtest/__init__.py +++ b/util/test/rdtest/__init__.py @@ -5,3 +5,4 @@ from .analyse import * from .testcase import * from .shared.Texture_Zoo import * from .shared.Mesh_Zoo import * +from .shared.Overlay_Test import * diff --git a/util/test/rdtest/shared/Overlay_Test.py b/util/test/rdtest/shared/Overlay_Test.py new file mode 100644 index 000000000..b80f0cbb3 --- /dev/null +++ b/util/test/rdtest/shared/Overlay_Test.py @@ -0,0 +1,553 @@ +import renderdoc as rd +import rdtest +from typing import List, Tuple +import time +import os + + +# Not a direct test, re-used by API-specific tests +class Overlay_Test(rdtest.TestCase): + internal = True + + def check_capture(self): + out: rd.ReplayOutput = self.controller.CreateOutput(rd.CreateHeadlessWindowingData(100, 100), rd.ReplayOutputType.Texture) + + self.check(out is not None) + + test_marker: rd.DrawcallDescription = self.find_draw("Test") + + self.controller.SetFrameEvent(test_marker.next.eventId, True) + + pipe: rd.PipeState = self.controller.GetPipelineState() + + col_tex: rd.ResourceId = pipe.GetOutputTargets()[0].resourceId + + tex = rd.TextureDisplay() + tex.resourceId = col_tex + + # Check the actual output is as expected first. + + # Background around the outside + self.check_pixel_value(col_tex, 0.1, 0.1, [0.2, 0.2, 0.2, 1.0]) + self.check_pixel_value(col_tex, 0.8, 0.1, [0.2, 0.2, 0.2, 1.0]) + self.check_pixel_value(col_tex, 0.5, 0.95, [0.2, 0.2, 0.2, 1.0]) + + # Large dark grey triangle + self.check_pixel_value(col_tex, 0.5, 0.1, [0.1, 0.1, 0.1, 1.0]) + self.check_pixel_value(col_tex, 0.5, 0.9, [0.1, 0.1, 0.1, 1.0]) + self.check_pixel_value(col_tex, 0.2, 0.9, [0.1, 0.1, 0.1, 1.0]) + self.check_pixel_value(col_tex, 0.8, 0.9, [0.1, 0.1, 0.1, 1.0]) + + # Red upper half triangle + self.check_pixel_value(col_tex, 0.3, 0.4, [1.0, 0.0, 0.0, 1.0]) + # Blue lower half triangle + self.check_pixel_value(col_tex, 0.3, 0.6, [0.0, 0.0, 1.0, 1.0]) + + # Floating clipped triangle + self.check_pixel_value(col_tex, 335, 140, [0.0, 0.0, 0.0, 1.0]) + self.check_pixel_value(col_tex, 340, 140, [0.2, 0.2, 0.2, 1.0]) + + # Triangle size triangles + self.check_pixel_value(col_tex, 200, 51, [1.0, 0.5, 1.0, 1.0]) + self.check_pixel_value(col_tex, 200, 65, [1.0, 1.0, 0.0, 1.0]) + self.check_pixel_value(col_tex, 200, 79, [0.0, 1.0, 1.0, 1.0]) + self.check_pixel_value(col_tex, 200, 93, [0.0, 1.0, 0.0, 1.0]) + + for overlay in rd.DebugOverlay: + if overlay == rd.DebugOverlay.NoOverlay: + continue + + # These overlays are just displaymodes really, not actually separate overlays + if overlay == rd.DebugOverlay.NaN or overlay == rd.DebugOverlay.Clipping: + continue + + # We'll test the clear-before-X overlays seperately, for both colour and depth + if overlay == rd.DebugOverlay.ClearBeforeDraw or overlay == rd.DebugOverlay.ClearBeforePass: + continue + + rdtest.log.print("Checking overlay {} in main draw".format(str(overlay))) + + tex.overlay = overlay + out.SetTextureDisplay(tex) + + out.Display() + + eps = 1.0 / 256.0 + + overlay_id: rd.ResourceId = out.GetDebugOverlayTexID() + + save_data = rd.TextureSave() + save_data.resourceId = overlay_id + save_data.destType = rd.FileType.PNG + + self.controller.SaveTexture(save_data, rdtest.get_tmp_path('asdf.png')) + + # We test a few key spots: + # 4 points along the left side of the big triangle, above/in/below its intersection with the tri behind + # 4 points outside all triangles + # The overlap between the big tri and the bottom tri, and between it and the right backface culled tri + # The bottom tri's part that sticks out + # The two parts of the backface culled tri that stick out + # The depth clipped tri, in and out of clipping + # The 4 triangle size test triangles + + if overlay == rd.DebugOverlay.Drawcall: + self.check_pixel_value(overlay_id, 150, 90, [0.8, 0.1, 0.8, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 130, [0.8, 0.1, 0.8, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 160, [0.8, 0.1, 0.8, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 200, [0.8, 0.1, 0.8, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 125, 60, [0.0, 0.0, 0.0, 0.5], eps=eps) + self.check_pixel_value(overlay_id, 125, 250, [0.0, 0.0, 0.0, 0.5], eps=eps) + self.check_pixel_value(overlay_id, 250, 60, [0.0, 0.0, 0.0, 0.5], eps=eps) + self.check_pixel_value(overlay_id, 250, 250, [0.0, 0.0, 0.0, 0.5], eps=eps) + + self.check_pixel_value(overlay_id, 220, 175, [0.8, 0.1, 0.8, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 150, [0.8, 0.1, 0.8, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 190, [0.8, 0.1, 0.8, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 285, 135, [0.8, 0.1, 0.8, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 285, 165, [0.8, 0.1, 0.8, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 330, 145, [0.8, 0.1, 0.8, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 340, 145, [0.8, 0.1, 0.8, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 200, 51, [0.8, 0.1, 0.8, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 65, [0.8, 0.1, 0.8, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 79, [0.8, 0.1, 0.8, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 93, [0.8, 0.1, 0.8, 1.0], eps=eps) + elif overlay == rd.DebugOverlay.Wireframe: + # Wireframe we only test a limited set to avoid hitting implementation variations of line raster + # We also have to fudge a little because the lines might land on adjacent pixels + + x = 142 + picked: rd.PixelValue = self.controller.PickPixel(overlay_id, x, 150, rd.Subresource(), rd.CompType.Typeless) + if picked.floatValue[3] == 0.0: + x = 141 + + self.check_pixel_value(overlay_id, x, 90, [200.0/255.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, x, 130, [200.0/255.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, x, 160, [200.0/255.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, x, 200, [200.0/255.0, 1.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 125, 60, [200.0/255.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 125, 250, [200.0/255.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 60, [200.0/255.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 250, [200.0/255.0, 1.0, 0.0, 0.0], eps=eps) + + y = 149 + picked: rd.PixelValue = self.controller.PickPixel(overlay_id, 325, y, rd.Subresource(), rd.CompType.Typeless) + if picked.floatValue[3] == 0.0: + y = 150 + + self.check_pixel_value(overlay_id, 325, y, [200.0/255.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 340, y, [200.0/255.0, 1.0, 0.0, 1.0], eps=eps) + elif overlay == rd.DebugOverlay.Depth: + self.check_pixel_value(overlay_id, 150, 90, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 130, [0.0, 1.0, 0.0, 1.0], eps=eps) + # Intersection with lesser depth - depth fail + self.check_pixel_value(overlay_id, 150, 160, [1.0, 0.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 200, [0.0, 1.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 125, 60, [0.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 125, 250, [0.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 60, [0.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 250, [0.0, 1.0, 0.0, 0.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 175, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 150, [0.0, 1.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 190, [0.0, 1.0, 0.0, 1.0], eps=eps) + + # Backface culled triangle + self.check_pixel_value(overlay_id, 285, 135, [1.0, 0.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 285, 165, [1.0, 0.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 330, 145, [0.0, 1.0, 0.0, 1.0], eps=eps) + # Depth clipped part of tri + self.check_pixel_value(overlay_id, 340, 145, [1.0, 0.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 200, 51, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 65, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 79, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 93, [0.0, 1.0, 0.0, 1.0], eps=eps) + elif overlay == rd.DebugOverlay.Stencil: + self.check_pixel_value(overlay_id, 150, 90, [0.0, 1.0, 0.0, 1.0], eps=eps) + # Intersection with different stencil - stencil fail + self.check_pixel_value(overlay_id, 150, 130, [1.0, 0.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 160, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 200, [0.0, 1.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 125, 60, [0.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 125, 250, [0.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 60, [0.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 250, [0.0, 1.0, 0.0, 0.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 175, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 150, [0.0, 1.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 190, [0.0, 1.0, 0.0, 1.0], eps=eps) + + # Backface culled triangle + self.check_pixel_value(overlay_id, 285, 135, [1.0, 0.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 285, 165, [1.0, 0.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 330, 145, [0.0, 1.0, 0.0, 1.0], eps=eps) + # Depth clipped part of tri + self.check_pixel_value(overlay_id, 340, 145, [1.0, 0.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 200, 51, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 65, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 79, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 93, [0.0, 1.0, 0.0, 1.0], eps=eps) + elif overlay == rd.DebugOverlay.BackfaceCull: + self.check_pixel_value(overlay_id, 150, 90, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 130, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 160, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 200, [0.0, 1.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 125, 60, [0.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 125, 250, [0.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 60, [0.0, 1.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 250, [0.0, 1.0, 0.0, 0.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 175, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 150, [0.0, 1.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 190, [0.0, 1.0, 0.0, 1.0], eps=eps) + + # Backface culled triangle + self.check_pixel_value(overlay_id, 285, 135, [1.0, 0.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 285, 165, [1.0, 0.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 330, 145, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 340, 145, [0.0, 1.0, 0.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 200, 51, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 65, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 79, [0.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 93, [0.0, 1.0, 0.0, 1.0], eps=eps) + elif overlay == rd.DebugOverlay.ViewportScissor: + # Inside viewport + self.check_pixel_value(overlay_id, 50, 50, [0.2*0.7, 0.2*0.7, 0.9*0.7, 0.7*0.7], eps=eps) + self.check_pixel_value(overlay_id, 350, 50, [0.2*0.7, 0.2*0.7, 0.9*0.7, 0.7*0.7], eps=eps) + self.check_pixel_value(overlay_id, 50, 250, [0.2*0.7, 0.2*0.7, 0.9*0.7, 0.7*0.7], eps=eps) + self.check_pixel_value(overlay_id, 350, 250, [0.2*0.7, 0.2*0.7, 0.9*0.7, 0.7*0.7], eps=eps) + + # Viewport border + self.check_pixel_value(overlay_id, 12, 12, [0.1, 0.1, 0.1, 1.0], eps=eps) + + # Outside viewport (not on scissor border) + self.check_pixel_value(overlay_id, 6, 6, [0.0, 0.0, 0.0, 0.0], eps=eps) + + # Scissor border + self.check_pixel_value(overlay_id, 0, 0, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 20, 0, [0.0, 0.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 40, 0, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 60, 0, [0.0, 0.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 60, 0, [0.0, 0.0, 0.0, 1.0], eps=eps) + elif overlay == rd.DebugOverlay.QuadOverdrawDraw: + self.check_pixel_value(overlay_id, 150, 90, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 130, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 160, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 200, [1.0, 1.0, 1.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 125, 60, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 125, 250, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 60, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 250, [0.0, 0.0, 0.0, 0.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 175, [2.0, 2.0, 2.0, 2.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 150, [1.0, 1.0, 1.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 190, [1.0, 1.0, 1.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 285, 135, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 285, 165, [0.0, 0.0, 0.0, 0.0], eps=eps) + + self.check_pixel_value(overlay_id, 330, 145, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 340, 145, [0.0, 0.0, 0.0, 0.0], eps=eps) + + self.check_pixel_value(overlay_id, 200, 51, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 65, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 79, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 93, [1.0, 1.0, 1.0, 1.0], eps=eps) + elif overlay == rd.DebugOverlay.QuadOverdrawPass: + self.check_pixel_value(overlay_id, 150, 90, [1.0, 1.0, 1.0, 1.0], eps=eps) + + # Do an extra tap here where we overlap with the extreme-background largest triangle, to show that + # overdraw + self.check_pixel_value(overlay_id, 150, 100, [2.0, 2.0, 2.0, 2.0], eps=eps) + + self.check_pixel_value(overlay_id, 150, 130, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 160, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 200, [2.0, 2.0, 2.0, 2.0], eps=eps) + + # Two of these have overdraw from the pass due to the large background triangle + self.check_pixel_value(overlay_id, 125, 60, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 125, 250, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 60, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 250, [1.0, 1.0, 1.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 175, [3.0, 3.0, 3.0, 3.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 150, [2.0, 2.0, 2.0, 2.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 190, [2.0, 2.0, 2.0, 2.0], eps=eps) + + self.check_pixel_value(overlay_id, 285, 135, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 285, 165, [1.0, 1.0, 1.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 330, 145, [1.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 340, 145, [0.0, 0.0, 0.0, 0.0], eps=eps) + + self.check_pixel_value(overlay_id, 200, 51, [2.0, 2.0, 2.0, 2.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 65, [2.0, 2.0, 2.0, 2.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 79, [2.0, 2.0, 2.0, 2.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 93, [2.0, 2.0, 2.0, 2.0], eps=eps) + elif overlay == rd.DebugOverlay.TriangleSizeDraw: + eps = 1.0 + + self.check_pixel_value(overlay_id, 150, 90, [10632.0, 10632.0, 10632.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 130, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 160, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 200, [10632.0, 10632.0, 10632.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 125, 60, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 125, 250, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 60, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 250, [0.0, 0.0, 0.0, 0.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 175, [2128.0, 2128.0, 2128.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 150, [10632.0, 10632.0, 10632.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 190, [2128.0, 2128.0, 2128.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 285, 135, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 285, 165, [0.0, 0.0, 0.0, 0.0], eps=eps) + + self.check_pixel_value(overlay_id, 330, 145, [531.0, 531.0, 531.0, 531.0], eps=eps) + self.check_pixel_value(overlay_id, 340, 145, [0.0, 0.0, 0.0, 0.0], eps=eps) + + eps = 0.01 + + self.check_pixel_value(overlay_id, 200, 51, [8.305, 8.305, 8.305, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 65, [5.316, 5.316, 5.316, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 79, [3.0, 3.0, 3.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 93, [1.33, 1.33, 1.33, 1.0], eps=eps) + elif overlay == rd.DebugOverlay.TriangleSizePass: + eps = 1.0 + + self.check_pixel_value(overlay_id, 150, 90, [10632.0, 10632.0, 10632.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 130, [3324.0, 3324.0, 3324.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 160, [3324.0, 3324.0, 3324.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 150, 200, [10632.0, 10632.0, 10632.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 125, 60, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 125, 250, [43072.0, 43072.0, 43072.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 60, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 250, [43072.0, 43072.0, 43072.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 175, [2128.0, 2128.0, 2128.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 250, 150, [10632.0, 10632.0, 10632.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 220, 190, [2128.0, 2128.0, 2128.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 285, 135, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(overlay_id, 285, 165, [43072.0, 43072.0, 43072.0, 1.0], eps=eps) + + self.check_pixel_value(overlay_id, 330, 145, [531.0, 531.0, 531.0, 531.0], eps=eps) + self.check_pixel_value(overlay_id, 340, 145, [0.0, 0.0, 0.0, 0.0], eps=eps) + + eps = 0.01 + + self.check_pixel_value(overlay_id, 200, 51, [8.305, 8.305, 8.305, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 65, [5.316, 5.316, 5.316, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 79, [3.0, 3.0, 3.0, 1.0], eps=eps) + self.check_pixel_value(overlay_id, 200, 93, [1.33, 1.33, 1.33, 1.0], eps=eps) + + rdtest.log.success("Picked pixels are as expected for {}".format(str(overlay))) + + # Now check clear-before-X by hand, for colour and for depth + + depth_tex: rd.ResourceId = pipe.GetDepthTarget().resourceId + + eps = 1.0/256.0 + + # Check colour and depth before-hand + self.check_pixel_value(col_tex, 250, 250, [0.1, 0.1, 0.1, 1.0], eps=eps) + self.check_pixel_value(col_tex, 125, 125, [1.0, 0.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 125, 175, [0.0, 0.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 50, 50, [0.2, 0.2, 0.2, 1.0], eps=eps) + self.check_pixel_value(col_tex, 291, 150, [0.977, 0.977, 0.977, 1.0], eps=0.075) + self.check_pixel_value(col_tex, 200, 51, [1.0, 0.5, 1.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 200, 65, [1.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 200, 79, [0.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 200, 93, [0.0, 1.0, 0.0, 1.0], eps=eps) + + eps = 0.001 + + self.check_pixel_value(depth_tex, 160, 135, [0.9, 85.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 160, 165, [0.0, 0.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 250, 150, [0.5, 85.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 250, 250, [0.95, 0.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 50, 50, [1.0, 0.0/255.0, 0.0, 1.0], eps=eps) + + # Check clear before pass + tex.resourceId = col_tex + tex.overlay = rd.DebugOverlay.ClearBeforePass + out.SetTextureDisplay(tex) + out.Display() + + eps = 1.0/256.0 + + self.check_pixel_value(col_tex, 250, 250, [0.1, 0.1, 0.1, 1.0], eps=eps) + self.check_pixel_value(col_tex, 125, 125, [1.0, 0.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 125, 175, [0.0, 0.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 50, 50, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(col_tex, 291, 150, [0.977, 0.977, 0.977, 1.0], eps=0.075) + self.check_pixel_value(col_tex, 200, 51, [1.0, 0.5, 1.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 200, 65, [1.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 200, 79, [0.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 200, 93, [0.0, 1.0, 0.0, 1.0], eps=eps) + + tex.resourceId = depth_tex + tex.overlay = rd.DebugOverlay.ClearBeforePass + out.SetTextureDisplay(tex) + out.Display() + + eps = 0.001 + + self.check_pixel_value(depth_tex, 160, 135, [0.9, 85.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 160, 165, [0.0, 0.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 250, 150, [0.5, 85.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 250, 250, [0.95, 0.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 50, 50, [1.0, 0.0/255.0, 0.0, 1.0], eps=eps) + + rdtest.log.success("Clear before pass colour and depth values as expected") + + # Check clear before draw + tex.resourceId = col_tex + tex.overlay = rd.DebugOverlay.ClearBeforeDraw + out.SetTextureDisplay(tex) + out.Display() + + eps = 1.0/256.0 + + # These are all pass triangles, should be cleared + self.check_pixel_value(col_tex, 250, 250, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(col_tex, 125, 125, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(col_tex, 125, 175, [0.0, 0.0, 0.0, 0.0], eps=eps) + self.check_pixel_value(col_tex, 50, 50, [0.0, 0.0, 0.0, 0.0], eps=eps) + + # These should be identical + self.check_pixel_value(col_tex, 291, 150, [0.977, 0.977, 0.977, 1.0], eps=0.075) + self.check_pixel_value(col_tex, 200, 51, [1.0, 0.5, 1.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 200, 65, [1.0, 1.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 200, 79, [0.0, 1.0, 1.0, 1.0], eps=eps) + self.check_pixel_value(col_tex, 200, 93, [0.0, 1.0, 0.0, 1.0], eps=eps) + + tex.resourceId = depth_tex + tex.overlay = rd.DebugOverlay.ClearBeforeDraw + out.SetTextureDisplay(tex) + out.Display() + + eps = 0.001 + + # Without the pass, depth/stencil results are different + self.check_pixel_value(depth_tex, 160, 135, [0.5, 85.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 160, 165, [0.5, 85.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 250, 150, [0.5, 85.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 250, 250, [1.0, 0.0/255.0, 0.0, 1.0], eps=eps) + self.check_pixel_value(depth_tex, 50, 50, [1.0, 0.0/255.0, 0.0, 1.0], eps=eps) + + rdtest.log.success("Clear before draw colour and depth values as expected") + + rdtest.log.success("All overlays as expected for main draw") + + # Now test overlays on a render-to-slice/mip case + + sub_marker: rd.DrawcallDescription = self.find_draw("Subresources") + + self.controller.SetFrameEvent(sub_marker.next.eventId, True) + + pipe: rd.PipeState = self.controller.GetPipelineState() + + col_tex = pipe.GetOutputTargets()[0].resourceId + sub = rd.Subresource(pipe.GetOutputTargets()[0].firstMip, 0, 0) + + for overlay in rd.DebugOverlay: + if overlay == rd.DebugOverlay.NoOverlay: + continue + + # These overlays are just displaymodes really, not actually separate overlays + if overlay == rd.DebugOverlay.NaN or overlay == rd.DebugOverlay.Clipping: + continue + + if overlay == rd.DebugOverlay.ClearBeforeDraw or overlay == rd.DebugOverlay.ClearBeforePass: + continue + + rdtest.log.success("Checking overlay {} with mip/slice rendering".format(str(overlay))) + + tex.resourceId = col_tex + tex.overlay = overlay + tex.subresource = sub + out.SetTextureDisplay(tex) + + out.Display() + + overlay_id: rd.ResourceId = out.GetDebugOverlayTexID() + + # All values in other mips should be 0 for all overlays + self.check_pixel_value(overlay_id, 200, 150, [0.0, 0.0, 0.0, 0.0], sub=rd.Subresource(0, 0, 0)) + self.check_pixel_value(overlay_id, 197, 147, [0.0, 0.0, 0.0, 0.0], sub=rd.Subresource(0, 0, 0)) + self.check_pixel_value(overlay_id, 203, 153, [0.0, 0.0, 0.0, 0.0], sub=rd.Subresource(0, 0, 0)) + + rdtest.log.success("Mip 0 is empty as expected for overlay {}".format(str(overlay))) + + if overlay == rd.DebugOverlay.Drawcall: + self.check_pixel_value(overlay_id, 50, 36, [0.8, 0.1, 0.8, 1.0], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 30, 36, [0.0, 0.0, 0.0, 0.5], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 70, 34, [0.8, 0.1, 0.8, 1.0], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 70, 20, [0.0, 0.0, 0.0, 0.5], sub=sub, eps=eps) + elif overlay == rd.DebugOverlay.Wireframe: + self.check_pixel_value(overlay_id, 36, 36, [200.0/255.0, 1.0, 0.0, 1.0], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 36, 50, [200.0/255.0, 1.0, 0.0, 1.0], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 50, 36, [200.0/255.0, 1.0, 0.0, 0.0], sub=sub, eps=eps) + elif overlay == rd.DebugOverlay.Depth or overlay == rd.DebugOverlay.Stencil: + self.check_pixel_value(overlay_id, 50, 36, [0.0, 1.0, 0.0, 1.0], sub=sub) + self.check_pixel_value(overlay_id, 30, 36, [0.0, 1.0, 0.0, 0.0], sub=sub) + self.check_pixel_value(overlay_id, 70, 34, [1.0, 0.0, 0.0, 1.0], sub=sub) + self.check_pixel_value(overlay_id, 70, 20, [0.0, 1.0, 0.0, 0.0], sub=sub) + elif overlay == rd.DebugOverlay.BackfaceCull: + self.check_pixel_value(overlay_id, 50, 36, [0.0, 1.0, 0.0, 1.0], sub=sub) + self.check_pixel_value(overlay_id, 30, 36, [0.0, 1.0, 0.0, 0.0], sub=sub) + self.check_pixel_value(overlay_id, 70, 34, [1.0, 0.0, 0.0, 1.0], sub=sub) + self.check_pixel_value(overlay_id, 70, 20, [0.0, 1.0, 0.0, 0.0], sub=sub) + elif overlay == rd.DebugOverlay.ViewportScissor: + self.check_pixel_value(overlay_id, 50, 36, [0.2*0.7, 0.2*0.7, 0.9*0.7, 0.7*0.7], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 30, 36, [0.2*0.7, 0.2*0.7, 0.9*0.7, 0.7*0.7], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 70, 34, [0.2*0.7, 0.2*0.7, 0.9*0.7, 0.7*0.7], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 70, 20, [0.2*0.7, 0.2*0.7, 0.9*0.7, 0.7*0.7], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 6, 6, [0.1, 0.1, 0.1, 1.0], sub=sub, eps=eps) + self.check_pixel_value(overlay_id, 4, 4, [0.0, 0.0, 0.0, 0.0], sub=sub) + self.check_pixel_value(overlay_id, 0, 0, [1.0, 1.0, 1.0, 1.0], sub=sub) + self.check_pixel_value(overlay_id, 20, 0, [0.0, 0.0, 0.0, 1.0], sub=sub) + self.check_pixel_value(overlay_id, 40, 0, [1.0, 1.0, 1.0, 1.0], sub=sub) + self.check_pixel_value(overlay_id, 60, 0, [0.0, 0.0, 0.0, 1.0], sub=sub) + elif overlay == rd.DebugOverlay.QuadOverdrawDraw or overlay == rd.DebugOverlay.QuadOverdrawPass: + self.check_pixel_value(overlay_id, 50, 36, [1.0, 1.0, 1.0, 1.0], sub=sub) + self.check_pixel_value(overlay_id, 30, 36, [0.0, 0.0, 0.0, 0.0], sub=sub) + self.check_pixel_value(overlay_id, 70, 34, [0.0, 0.0, 0.0, 0.0], sub=sub) + self.check_pixel_value(overlay_id, 70, 20, [0.0, 0.0, 0.0, 0.0], sub=sub) + self.check_pixel_value(overlay_id, 50, 45, [2.0, 2.0, 2.0, 2.0], sub=sub) + elif overlay == rd.DebugOverlay.TriangleSizeDraw or overlay == rd.DebugOverlay.TriangleSizePass: + self.check_pixel_value(overlay_id, 50, 36, [585.0, 585.0, 585.0, 1.0], sub=sub) + self.check_pixel_value(overlay_id, 30, 36, [0.0, 0.0, 0.0, 0.0], sub=sub) + self.check_pixel_value(overlay_id, 70, 34, [0.0, 0.0, 0.0, 0.0], sub=sub) + self.check_pixel_value(overlay_id, 70, 20, [0.0, 0.0, 0.0, 0.0], sub=sub) + self.check_pixel_value(overlay_id, 50, 45, [117.0, 117.0, 117.0, 1.0], sub=sub) + + rdtest.log.success("Picked values are correct for mip {} overlay {}".format(sub.mip, str(overlay))) + + out.Shutdown() diff --git a/util/test/tests/D3D11/D3D11_Overlay_Test.py b/util/test/tests/D3D11/D3D11_Overlay_Test.py index a9e8f194e..09a50fc46 100644 --- a/util/test/tests/D3D11/D3D11_Overlay_Test.py +++ b/util/test/tests/D3D11/D3D11_Overlay_Test.py @@ -2,150 +2,6 @@ import rdtest import renderdoc as rd -class D3D11_Overlay_Test(rdtest.TestCase): +class D3D11_Overlay_Test(rdtest.Overlay_Test): demos_test_name = 'D3D11_Overlay_Test' - - def check_clearbeforedraw_depth(self, out, depthId): - # Test ClearBeforeDraw with a depth target - tex = rd.TextureDisplay() - tex.overlay = rd.DebugOverlay.ClearBeforeDraw - tex.resourceId = depthId - - out.SetTextureDisplay(tex) - out.GetDebugOverlayTexID() # Called to refresh the overlay - - overlay = rd.DebugOverlay.ClearBeforeDraw - test_name = str(overlay) + '.Depth' - - overlay_path = rdtest.get_tmp_path(test_name + '.png') - ref_path = self.get_ref_path(test_name + '.png') - - save_data = rd.TextureSave() - save_data.resourceId = depthId - save_data.destType = rd.FileType.PNG - save_data.channelExtract = 0 - - tolerance = 2 - - self.controller.SaveTexture(save_data, overlay_path) - - if not rdtest.png_compare(overlay_path, ref_path, tolerance): - raise rdtest.TestFailureException("Reference and output image differ for overlay {}".format(test_name), overlay_path, ref_path) - - rdtest.log.success("Reference and output image are identical for {}".format(test_name)) - - def check_capture(self): - out: rd.ReplayOutput = self.controller.CreateOutput(rd.CreateHeadlessWindowingData(100, 100), rd.ReplayOutputType.Texture) - - self.check(out is not None) - - test_marker: rd.DrawcallDescription = self.find_draw("Test") - - self.controller.SetFrameEvent(test_marker.next.eventId, True) - - pipe: rd.PipeState = self.controller.GetPipelineState() - - tex = rd.TextureDisplay() - tex.resourceId = pipe.GetOutputTargets()[0].resourceId - - # Check the actual output is as expected first. - - # Background around the outside - self.check_pixel_value(tex.resourceId, 0.1, 0.1, [0.2, 0.2, 0.2, 1.0]) - self.check_pixel_value(tex.resourceId, 0.8, 0.1, [0.2, 0.2, 0.2, 1.0]) - self.check_pixel_value(tex.resourceId, 0.5, 0.95, [0.2, 0.2, 0.2, 1.0]) - - # Large dark grey triangle - self.check_pixel_value(tex.resourceId, 0.5, 0.1, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.5, 0.9, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.2, 0.9, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.8, 0.9, [0.1, 0.1, 0.1, 1.0]) - - # Red upper half triangle - self.check_pixel_value(tex.resourceId, 0.3, 0.4, [1.0, 0.0, 0.0, 1.0]) - # Blue lower half triangle - self.check_pixel_value(tex.resourceId, 0.3, 0.6, [0.0, 0.0, 1.0, 1.0]) - - # Floating clipped triangle - self.check_pixel_value(tex.resourceId, 335, 140, [0.0, 0.0, 0.0, 1.0]) - self.check_pixel_value(tex.resourceId, 340, 140, [0.2, 0.2, 0.2, 1.0]) - - # Triangle size triangles - self.check_pixel_value(tex.resourceId, 200, 51, [1.0, 0.5, 1.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 65, [1.0, 1.0, 0.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 79, [0.0, 1.0, 1.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 93, [0.0, 1.0, 0.0, 1.0]) - - for overlay in rd.DebugOverlay: - if overlay == rd.DebugOverlay.NoOverlay: - continue - - # These overlays are just displaymodes really, not actually separate overlays - if overlay == rd.DebugOverlay.NaN or overlay == rd.DebugOverlay.Clipping: - continue - - # Unfortunately line-fill rendering seems to vary too much by IHV, so gives inconsistent results - if overlay == rd.DebugOverlay.Wireframe: - continue - - tex.overlay = overlay - out.SetTextureDisplay(tex) - - overlay_path = rdtest.get_tmp_path(str(overlay) + '.png') - ref_path = self.get_ref_path(str(overlay) + '.png') - - save_data = rd.TextureSave() - save_data.resourceId = out.GetDebugOverlayTexID() - save_data.destType = rd.FileType.PNG - - save_data.comp.blackPoint = 0.0 - save_data.comp.whitePoint = 1.0 - - tolerance = 2 - - # These overlays return grayscale above 1, so rescale to an expected range. - if (overlay == rd.DebugOverlay.QuadOverdrawDraw or overlay == rd.DebugOverlay.QuadOverdrawPass or - overlay == rd.DebugOverlay.TriangleSizeDraw or overlay == rd.DebugOverlay.TriangleSizePass): - save_data.comp.whitePoint = 10.0 - - # These overlays modify the underlying texture, so we need to save it out instead of the overlay - if overlay == rd.DebugOverlay.ClearBeforeDraw or overlay == rd.DebugOverlay.ClearBeforePass: - save_data.resourceId = tex.resourceId - - self.controller.SaveTexture(save_data, overlay_path) - - if not rdtest.png_compare(overlay_path, ref_path, tolerance): - raise rdtest.TestFailureException("Reference and output image differ for overlay {}".format(str(overlay)), overlay_path, ref_path) - - rdtest.log.success("Reference and output image are identical for {}".format(str(overlay))) - - save_data = rd.TextureSave() - save_data.resourceId = pipe.GetDepthTarget().resourceId - save_data.destType = rd.FileType.PNG - save_data.channelExtract = 0 - - tmp_path = rdtest.get_tmp_path('depth.png') - ref_path = self.get_ref_path('depth.png') - - self.controller.SaveTexture(save_data, tmp_path) - - if not rdtest.png_compare(tmp_path, ref_path): - raise rdtest.TestFailureException("Reference and output image differ for depth {}", tmp_path, ref_path) - - rdtest.log.success("Reference and output image are identical for depth") - - save_data.channelExtract = 1 - - tmp_path = rdtest.get_tmp_path('stencil.png') - ref_path = self.get_ref_path('stencil.png') - - self.controller.SaveTexture(save_data, tmp_path) - - if not rdtest.png_compare(tmp_path, ref_path): - raise rdtest.TestFailureException("Reference and output image differ for stencil {}", tmp_path, ref_path) - - rdtest.log.success("Reference and output image are identical for stencil") - - self.check_clearbeforedraw_depth(out, pipe.GetDepthTarget().resourceId) - - out.Shutdown() + internal = False diff --git a/util/test/tests/D3D12/D3D12_Overlay_Test.py b/util/test/tests/D3D12/D3D12_Overlay_Test.py index 0ef3c05f3..7e667565e 100644 --- a/util/test/tests/D3D12/D3D12_Overlay_Test.py +++ b/util/test/tests/D3D12/D3D12_Overlay_Test.py @@ -2,152 +2,6 @@ import rdtest import renderdoc as rd -class D3D12_Overlay_Test(rdtest.TestCase): +class D3D12_Overlay_Test(rdtest.Overlay_Test): demos_test_name = 'D3D12_Overlay_Test' - - def check_clearbeforedraw_depth(self, out, depthId): - # Test ClearBeforeDraw with a depth target - tex = rd.TextureDisplay() - tex.overlay = rd.DebugOverlay.ClearBeforeDraw - tex.resourceId = depthId - - out.SetTextureDisplay(tex) - out.GetDebugOverlayTexID() # Called to refresh the overlay - - overlay = rd.DebugOverlay.ClearBeforeDraw - test_name = str(overlay) + '.Depth' - - overlay_path = rdtest.get_tmp_path(test_name + '.png') - ref_path = self.get_ref_path(test_name + '.png') - - save_data = rd.TextureSave() - save_data.resourceId = depthId - save_data.destType = rd.FileType.PNG - save_data.channelExtract = 0 - - tolerance = 2 - - self.controller.SaveTexture(save_data, overlay_path) - - if not rdtest.png_compare(overlay_path, ref_path, tolerance): - raise rdtest.TestFailureException("Reference and output image differ for overlay {}".format(test_name), overlay_path, ref_path) - - rdtest.log.success("Reference and output image are identical for {}".format(test_name)) - - def check_capture(self): - out: rd.ReplayOutput = self.controller.CreateOutput(rd.CreateHeadlessWindowingData(100, 100), rd.ReplayOutputType.Texture) - - self.check(out is not None) - - test_marker: rd.DrawcallDescription = self.find_draw("Test") - - self.controller.SetFrameEvent(test_marker.next.eventId, True) - - pipe: rd.PipeState = self.controller.GetPipelineState() - - tex = rd.TextureDisplay() - tex.resourceId = pipe.GetOutputTargets()[0].resourceId - - # Check the actual output is as expected first. - - # Background around the outside - self.check_pixel_value(tex.resourceId, 0.1, 0.1, [0.2, 0.2, 0.2, 1.0]) - self.check_pixel_value(tex.resourceId, 0.8, 0.1, [0.2, 0.2, 0.2, 1.0]) - self.check_pixel_value(tex.resourceId, 0.5, 0.95, [0.2, 0.2, 0.2, 1.0]) - - # Large dark grey triangle - self.check_pixel_value(tex.resourceId, 0.5, 0.1, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.5, 0.9, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.2, 0.9, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.8, 0.9, [0.1, 0.1, 0.1, 1.0]) - - # Red upper half triangle - self.check_pixel_value(tex.resourceId, 0.3, 0.4, [1.0, 0.0, 0.0, 1.0]) - # Blue lower half triangle - self.check_pixel_value(tex.resourceId, 0.3, 0.6, [0.0, 0.0, 1.0, 1.0]) - - # Floating clipped triangle - self.check_pixel_value(tex.resourceId, 335, 140, [0.0, 0.0, 0.0, 1.0]) - self.check_pixel_value(tex.resourceId, 340, 140, [0.2, 0.2, 0.2, 1.0]) - - # Triangle size triangles - self.check_pixel_value(tex.resourceId, 200, 51, [1.0, 0.5, 1.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 65, [1.0, 1.0, 0.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 79, [0.0, 1.0, 1.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 93, [0.0, 1.0, 0.0, 1.0]) - - for overlay in rd.DebugOverlay: - if overlay == rd.DebugOverlay.NoOverlay: - continue - - # These overlays are just displaymodes really, not actually separate overlays - if overlay == rd.DebugOverlay.NaN or overlay == rd.DebugOverlay.Clipping: - continue - - # Unfortunately line-fill rendering seems to vary too much by IHV, so gives inconsistent results - if overlay == rd.DebugOverlay.Wireframe: - continue - - tex.overlay = overlay - out.SetTextureDisplay(tex) - - overlay_path = rdtest.get_tmp_path(str(overlay) + '.png') - ref_path = self.get_ref_path(str(overlay) + '.png') - - save_data = rd.TextureSave() - save_data.resourceId = out.GetDebugOverlayTexID() - save_data.destType = rd.FileType.PNG - save_data.typeCast = rd.CompType.Typeless - - save_data.comp.blackPoint = 0.0 - save_data.comp.whitePoint = 1.0 - - tolerance = 2 - - # These overlays return grayscale above 1, so rescale to an expected range. - if (overlay == rd.DebugOverlay.QuadOverdrawDraw or overlay == rd.DebugOverlay.QuadOverdrawPass or - overlay == rd.DebugOverlay.TriangleSizeDraw or overlay == rd.DebugOverlay.TriangleSizePass): - save_data.comp.whitePoint = 10.0 - - # These overlays modify the underlying texture, so we need to save it out instead of the overlay - if overlay == rd.DebugOverlay.ClearBeforeDraw or overlay == rd.DebugOverlay.ClearBeforePass: - save_data.resourceId = tex.resourceId - save_data.typeCast = rd.CompType.UNormSRGB - - self.controller.SaveTexture(save_data, overlay_path) - - if not rdtest.png_compare(overlay_path, ref_path, tolerance): - raise rdtest.TestFailureException("Reference and output image differ for overlay {}".format(str(overlay)), overlay_path, ref_path) - - rdtest.log.success("Reference and output image are identical for {}".format(str(overlay))) - - save_data = rd.TextureSave() - save_data.resourceId = pipe.GetDepthTarget().resourceId - save_data.destType = rd.FileType.PNG - save_data.channelExtract = 0 - - tmp_path = rdtest.get_tmp_path('depth.png') - ref_path = self.get_ref_path('depth.png') - - self.controller.SaveTexture(save_data, tmp_path) - - if not rdtest.png_compare(tmp_path, ref_path): - raise rdtest.TestFailureException("Reference and output image differ for depth {}", tmp_path, ref_path) - - rdtest.log.success("Reference and output image are identical for depth") - - save_data.channelExtract = 1 - - tmp_path = rdtest.get_tmp_path('stencil.png') - ref_path = self.get_ref_path('stencil.png') - - self.controller.SaveTexture(save_data, tmp_path) - - if not rdtest.png_compare(tmp_path, ref_path): - raise rdtest.TestFailureException("Reference and output image differ for stencil {}", tmp_path, ref_path) - - rdtest.log.success("Reference and output image are identical for stencil") - - self.check_clearbeforedraw_depth(out, pipe.GetDepthTarget().resourceId) - - out.Shutdown() + internal = False \ No newline at end of file diff --git a/util/test/tests/GL/GL_Overlay_Test.py b/util/test/tests/GL/GL_Overlay_Test.py index de3582877..dc04ccff2 100644 --- a/util/test/tests/GL/GL_Overlay_Test.py +++ b/util/test/tests/GL/GL_Overlay_Test.py @@ -2,150 +2,6 @@ import rdtest import renderdoc as rd -class GL_Overlay_Test(rdtest.TestCase): +class GL_Overlay_Test(rdtest.Overlay_Test): demos_test_name = 'GL_Overlay_Test' - - def check_clearbeforedraw_depth(self, out, depthId): - # Test ClearBeforeDraw with a depth target - tex = rd.TextureDisplay() - tex.overlay = rd.DebugOverlay.ClearBeforeDraw - tex.resourceId = depthId - - out.SetTextureDisplay(tex) - out.GetDebugOverlayTexID() # Called to refresh the overlay - - overlay = rd.DebugOverlay.ClearBeforeDraw - test_name = str(overlay) + '.Depth' - - overlay_path = rdtest.get_tmp_path(test_name + '.png') - ref_path = self.get_ref_path(test_name + '.png') - - save_data = rd.TextureSave() - save_data.resourceId = depthId - save_data.destType = rd.FileType.PNG - save_data.channelExtract = 0 - - tolerance = 2 - - self.controller.SaveTexture(save_data, overlay_path) - - if not rdtest.png_compare(overlay_path, ref_path, tolerance): - raise rdtest.TestFailureException("Reference and output image differ for overlay {}".format(test_name), overlay_path, ref_path) - - rdtest.log.success("Reference and output image are identical for {}".format(test_name)) - - def check_capture(self): - out: rd.ReplayOutput = self.controller.CreateOutput(rd.CreateHeadlessWindowingData(100, 100), rd.ReplayOutputType.Texture) - - self.check(out is not None) - - test_marker: rd.DrawcallDescription = self.find_draw("Test") - - self.controller.SetFrameEvent(test_marker.next.eventId, True) - - pipe: rd.PipeState = self.controller.GetPipelineState() - - tex = rd.TextureDisplay() - tex.resourceId = pipe.GetOutputTargets()[0].resourceId - - # Check the actual output is as expected first. - - # Background around the outside - self.check_pixel_value(tex.resourceId, 0.1, 0.1, [0.2, 0.2, 0.2, 1.0]) - self.check_pixel_value(tex.resourceId, 0.8, 0.1, [0.2, 0.2, 0.2, 1.0]) - self.check_pixel_value(tex.resourceId, 0.5, 0.95, [0.2, 0.2, 0.2, 1.0]) - - # Large dark grey triangle - self.check_pixel_value(tex.resourceId, 0.5, 0.1, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.5, 0.9, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.2, 0.9, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.8, 0.9, [0.1, 0.1, 0.1, 1.0]) - - # Red upper half triangle - self.check_pixel_value(tex.resourceId, 0.3, 0.4, [1.0, 0.0, 0.0, 1.0]) - # Blue lower half triangle - self.check_pixel_value(tex.resourceId, 0.3, 0.6, [0.0, 0.0, 1.0, 1.0]) - - # Floating clipped triangle - self.check_pixel_value(tex.resourceId, 335, 140, [0.0, 0.0, 0.0, 1.0]) - self.check_pixel_value(tex.resourceId, 340, 140, [0.2, 0.2, 0.2, 1.0]) - - # Triangle size triangles - self.check_pixel_value(tex.resourceId, 200, 51, [1.0, 0.5, 1.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 65, [1.0, 1.0, 0.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 79, [0.0, 1.0, 1.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 93, [0.0, 1.0, 0.0, 1.0]) - - for overlay in rd.DebugOverlay: - if overlay == rd.DebugOverlay.NoOverlay: - continue - - # These overlays are just displaymodes really, not actually separate overlays - if overlay == rd.DebugOverlay.NaN or overlay == rd.DebugOverlay.Clipping: - continue - - # Unfortunately line-fill rendering seems to vary too much by IHV, so gives inconsistent results - if overlay == rd.DebugOverlay.Wireframe: - continue - - tex.overlay = overlay - out.SetTextureDisplay(tex) - - overlay_path = rdtest.get_tmp_path(str(overlay) + '.png') - ref_path = self.get_ref_path(str(overlay) + '.png') - - save_data = rd.TextureSave() - save_data.resourceId = out.GetDebugOverlayTexID() - save_data.destType = rd.FileType.PNG - - save_data.comp.blackPoint = 0.0 - save_data.comp.whitePoint = 1.0 - - tolerance = 2 - - # These overlays return grayscale above 1, so rescale to an expected range. - if (overlay == rd.DebugOverlay.QuadOverdrawDraw or overlay == rd.DebugOverlay.QuadOverdrawPass or - overlay == rd.DebugOverlay.TriangleSizeDraw or overlay == rd.DebugOverlay.TriangleSizePass): - save_data.comp.whitePoint = 10.0 - - # These overlays modify the underlying texture, so we need to save it out instead of the overlay - if overlay == rd.DebugOverlay.ClearBeforeDraw or overlay == rd.DebugOverlay.ClearBeforePass: - save_data.resourceId = tex.resourceId - - self.controller.SaveTexture(save_data, overlay_path) - - if not rdtest.png_compare(overlay_path, ref_path, tolerance): - raise rdtest.TestFailureException("Reference and output image differ for overlay {}".format(str(overlay)), overlay_path, ref_path) - - rdtest.log.success("Reference and output image are identical for {}".format(str(overlay))) - - save_data = rd.TextureSave() - save_data.resourceId = pipe.GetDepthTarget().resourceId - save_data.destType = rd.FileType.PNG - save_data.channelExtract = 0 - - tmp_path = rdtest.get_tmp_path('depth.png') - ref_path = self.get_ref_path('depth.png') - - self.controller.SaveTexture(save_data, tmp_path) - - if not rdtest.png_compare(tmp_path, ref_path): - raise rdtest.TestFailureException("Reference and output image differ for depth {}", tmp_path, ref_path) - - rdtest.log.success("Reference and output image are identical for depth") - - save_data.channelExtract = 1 - - tmp_path = rdtest.get_tmp_path('stencil.png') - ref_path = self.get_ref_path('stencil.png') - - self.controller.SaveTexture(save_data, tmp_path) - - if not rdtest.png_compare(tmp_path, ref_path): - raise rdtest.TestFailureException("Reference and output image differ for stencil {}", tmp_path, ref_path) - - rdtest.log.success("Reference and output image are identical for stencil") - - self.check_clearbeforedraw_depth(out, pipe.GetDepthTarget().resourceId) - - out.Shutdown() + internal = False diff --git a/util/test/tests/Vulkan/VK_Overlay_Test.py b/util/test/tests/Vulkan/VK_Overlay_Test.py index 6a6a7a966..95dca7bac 100644 --- a/util/test/tests/Vulkan/VK_Overlay_Test.py +++ b/util/test/tests/Vulkan/VK_Overlay_Test.py @@ -2,150 +2,6 @@ import rdtest import renderdoc as rd -class VK_Overlay_Test(rdtest.TestCase): +class VK_Overlay_Test(rdtest.Overlay_Test): demos_test_name = 'VK_Overlay_Test' - - def check_clearbeforedraw_depth(self, out, depthId): - # Test ClearBeforeDraw with a depth target - tex = rd.TextureDisplay() - tex.overlay = rd.DebugOverlay.ClearBeforeDraw - tex.resourceId = depthId - - out.SetTextureDisplay(tex) - out.GetDebugOverlayTexID() # Called to refresh the overlay - - overlay = rd.DebugOverlay.ClearBeforeDraw - test_name = str(overlay) + '.Depth' - - overlay_path = rdtest.get_tmp_path(test_name + '.png') - ref_path = self.get_ref_path(test_name + '.png') - - save_data = rd.TextureSave() - save_data.resourceId = depthId - save_data.destType = rd.FileType.PNG - save_data.channelExtract = 0 - - tolerance = 2 - - self.controller.SaveTexture(save_data, overlay_path) - - if not rdtest.png_compare(overlay_path, ref_path, tolerance): - raise rdtest.TestFailureException("Reference and output image differ for overlay {}".format(test_name), overlay_path, ref_path) - - rdtest.log.success("Reference and output image are identical for {}".format(test_name)) - - def check_capture(self): - out: rd.ReplayOutput = self.controller.CreateOutput(rd.CreateHeadlessWindowingData(100, 100), rd.ReplayOutputType.Texture) - - self.check(out is not None) - - test_marker: rd.DrawcallDescription = self.find_draw("Test") - - self.controller.SetFrameEvent(test_marker.next.eventId, True) - - pipe: rd.PipeState = self.controller.GetPipelineState() - - tex = rd.TextureDisplay() - tex.resourceId = pipe.GetOutputTargets()[0].resourceId - - # Check the actual output is as expected first. - - # Background around the outside - self.check_pixel_value(tex.resourceId, 0.1, 0.1, [0.2, 0.2, 0.2, 1.0]) - self.check_pixel_value(tex.resourceId, 0.8, 0.1, [0.2, 0.2, 0.2, 1.0]) - self.check_pixel_value(tex.resourceId, 0.5, 0.95, [0.2, 0.2, 0.2, 1.0]) - - # Large dark grey triangle - self.check_pixel_value(tex.resourceId, 0.5, 0.1, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.5, 0.9, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.2, 0.9, [0.1, 0.1, 0.1, 1.0]) - self.check_pixel_value(tex.resourceId, 0.8, 0.9, [0.1, 0.1, 0.1, 1.0]) - - # Red upper half triangle - self.check_pixel_value(tex.resourceId, 0.3, 0.4, [1.0, 0.0, 0.0, 1.0]) - # Blue lower half triangle - self.check_pixel_value(tex.resourceId, 0.3, 0.6, [0.0, 0.0, 1.0, 1.0]) - - # Floating clipped triangle - self.check_pixel_value(tex.resourceId, 335, 140, [0.0, 0.0, 0.0, 1.0]) - self.check_pixel_value(tex.resourceId, 340, 140, [0.2, 0.2, 0.2, 1.0]) - - # Triangle size triangles - self.check_pixel_value(tex.resourceId, 200, 51, [1.0, 0.5, 1.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 65, [1.0, 1.0, 0.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 79, [0.0, 1.0, 1.0, 1.0]) - self.check_pixel_value(tex.resourceId, 200, 93, [0.0, 1.0, 0.0, 1.0]) - - for overlay in rd.DebugOverlay: - if overlay == rd.DebugOverlay.NoOverlay: - continue - - # These overlays are just displaymodes really, not actually separate overlays - if overlay == rd.DebugOverlay.NaN or overlay == rd.DebugOverlay.Clipping: - continue - - # Unfortunately line-fill rendering seems to vary too much by IHV, so gives inconsistent results - if overlay == rd.DebugOverlay.Wireframe: - continue - - tex.overlay = overlay - out.SetTextureDisplay(tex) - - overlay_path = rdtest.get_tmp_path(str(overlay) + '.png') - ref_path = self.get_ref_path(str(overlay) + '.png') - - save_data = rd.TextureSave() - save_data.resourceId = out.GetDebugOverlayTexID() - save_data.destType = rd.FileType.PNG - - save_data.comp.blackPoint = 0.0 - save_data.comp.whitePoint = 1.0 - - tolerance = 2 - - # These overlays return grayscale above 1, so rescale to an expected range. - if (overlay == rd.DebugOverlay.QuadOverdrawDraw or overlay == rd.DebugOverlay.QuadOverdrawPass or - overlay == rd.DebugOverlay.TriangleSizeDraw or overlay == rd.DebugOverlay.TriangleSizePass): - save_data.comp.whitePoint = 10.0 - - # These overlays modify the underlying texture, so we need to save it out instead of the overlay - if overlay == rd.DebugOverlay.ClearBeforeDraw or overlay == rd.DebugOverlay.ClearBeforePass: - save_data.resourceId = tex.resourceId - - self.controller.SaveTexture(save_data, overlay_path) - - if not rdtest.png_compare(overlay_path, ref_path, tolerance): - raise rdtest.TestFailureException("Reference and output image differ for overlay {}".format(str(overlay)), overlay_path, ref_path) - - rdtest.log.success("Reference and output image are identical for {}".format(str(overlay))) - - save_data = rd.TextureSave() - save_data.resourceId = pipe.GetDepthTarget().resourceId - save_data.destType = rd.FileType.PNG - save_data.channelExtract = 0 - - tmp_path = rdtest.get_tmp_path('depth.png') - ref_path = self.get_ref_path('depth.png') - - self.controller.SaveTexture(save_data, tmp_path) - - if not rdtest.png_compare(tmp_path, ref_path): - raise rdtest.TestFailureException("Reference and output image differ for depth {}", tmp_path, ref_path) - - rdtest.log.success("Reference and output image are identical for depth") - - save_data.channelExtract = 1 - - tmp_path = rdtest.get_tmp_path('stencil.png') - ref_path = self.get_ref_path('stencil.png') - - self.controller.SaveTexture(save_data, tmp_path) - - if not rdtest.png_compare(tmp_path, ref_path): - raise rdtest.TestFailureException("Reference and output image differ for stencil {}", tmp_path, ref_path) - - rdtest.log.success("Reference and output image are identical for stencil") - - self.check_clearbeforedraw_depth(out, pipe.GetDepthTarget().resourceId) - - out.Shutdown() + internal = False \ No newline at end of file