From ef66892f70f82d5168d8380cb07bb85aeb02cd77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Fri, 15 Dec 2017 15:24:15 +0100 Subject: [PATCH] Update vulkan headers, add linux .so loader lib for easy builds, like Sascha does. --- Common/Vulkan/VulkanContext.cpp | 2 +- ext/vulkan/libvulkan.so | Bin 0 -> 205790 bytes ext/vulkan/libvulkan.so.1 | Bin 0 -> 205790 bytes ext/vulkan/libvulkan.so.1.0.30 | Bin 0 -> 205790 bytes ext/vulkan/spirv.h | 27 +- ext/vulkan/spirv.hpp | 1925 ++++++++++++----------- ext/vulkan/spirv.hpp11 | 1925 ++++++++++++----------- ext/vulkan/spirv.json | 1957 +++++++++++------------ ext/vulkan/spirv.lua | 1819 ++++++++++----------- ext/vulkan/spirv.py | 1819 ++++++++++----------- ext/vulkan/vk_icd.h | 1 + ext/vulkan/vk_layer_dispatch_table.h | 17 +- ext/vulkan/vulkan.h | 2178 +++++++++++++++++++------- 13 files changed, 6471 insertions(+), 5199 deletions(-) create mode 100755 ext/vulkan/libvulkan.so create mode 100755 ext/vulkan/libvulkan.so.1 create mode 100755 ext/vulkan/libvulkan.so.1.0.30 diff --git a/Common/Vulkan/VulkanContext.cpp b/Common/Vulkan/VulkanContext.cpp index 88f888883a..c70e492b72 100644 --- a/Common/Vulkan/VulkanContext.cpp +++ b/Common/Vulkan/VulkanContext.cpp @@ -1018,7 +1018,7 @@ const char *VulkanResultToString(VkResult res) { case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR"; case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR: return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR"; case VK_ERROR_OUT_OF_POOL_MEMORY_KHR: return "VK_ERROR_OUT_OF_POOL_MEMORY_KHR"; - case VK_ERROR_INVALID_EXTERNAL_HANDLE_KHX: return "VK_ERROR_INVALID_EXTERNAL_HANDLE_KHX"; + case VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR: return "VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR"; default: return "VK_ERROR_...(unknown)"; diff --git a/ext/vulkan/libvulkan.so b/ext/vulkan/libvulkan.so new file mode 100755 index 0000000000000000000000000000000000000000..cddc4d927936d7cd954a7c17a6d06c1fccaf848f GIT binary patch literal 205790 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
    t;;LD*i_7PYQ^w=L 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 !iDW43SbtLPe;#3+o`w7!*H;e54N)A z(MxeBZW*uuc37&)r{Z0Sq4;A>MSK%fCEW`V6RPn$7cg4f&UEgp%r=|8%8uu#YJ`#D zh&n4c0x}lOa}9SyC+-&_l!xxP2Cv6r)!c-SgZG=|-`BM;pFPh}Hp4p>QTDgEEro*( zTn)D?^OS61dpP|o`GBqarKmhZ;jk!lEYzrD*RV$*#GXu~EXg{+hR5c(1nv=9u{TGfMz+T49&Fw>P5(d7UTn zw%q9CFK-v2Q$*3MNRmd1O+E;cVpIGnddO$5IA!2Az;7kA`Oo+$~Wa4L>UI5rk2+L?p8X&P|KtUV#t32j8p|9m(wi z?@xoT7kD>eI1|2y3+xi6ZlaFl0)aOXPRYr+3Lfx2U@*Qrtsnb6tP2QyH&i4EkJGSE z;70BH5)Gdy@C(}axf=da6d3=meV?S^IM@K}{F;WlYWOXI-_Y>hQpw440>7@|%^IE| z@GBZ_(eSkbzog*>8a`LxXEgi=4Id-$A2mEf!@I#U$lxOyzD2|D2<&KhxQ1U4c&3I2 zX?Ui<(=~jGhHnsfs)h{>pC@og!~1cYn$2*$z_)66tA_WfUNYb>A4}`JrQ!7gKd#|_ zYWOIy5{gr+Bl)9-cSzwc)Ns9qbu(O`;oCK=n_;Miuh6h=hVwLBsbSp==V-W(hIKQX zt>L3Itec@!!#|uUh1bn+s)j$;ux^H)8h%^Dx*3W!yimis84|vq(y(rZ6SVKy8rIEl zoQChzux^GT4PT|<@1(wu)$kAvzuyt=tKoligbOwNfWXJ-NDiJMg}+7ML{7fauzDcD z8IZ_#tA=Tn1WlZXWU+=h45q+OYxqCXT@(4XHM~gR0-ckPhUW;}MZ=>sOc9B=4Gj;~ zaJ9gN8vd1rOFF_u8qN_ok?%|mw~63LM6#`~)XAFyC-VKCh7V$miJT;Szp3F*I>OIt zc%i^Y=?p%g;fDoI6n?UXZx^_$_B~p|!vyZE;h=_35jbDNXK6S~;6x3cpyAC}Wh38t z+INnIx%dX0qv7qROW_|AxRZuI)bPZPzL#tGB7w8C@A(=&P2hu==}@dcq~T5i|ES@6 zH2f*mew+c{X?To=`F;T4Z!}!3;l~Burr`k^o+R)W8t$RtO9gJz@L?K0vm?CgG%0)+ zfj4R2A8YtaTs%ikcI}notkCcZfj`r}U)1oQ1Wx2+j)w0M_)G13s)jG`2#?k9Spt8q zeP68MBLx0P!(|%YCbO?~8t$dxW`X~$;Vv3}THtpyyr+*8euor(wTAzr;kN`{rQy{Y zeoo+}8veV6X9)b7hJUZ&YXyEu!(k1d+YuhG;bS_&muh&o6n?&rWT1xM5%|vk*v3|8Z_#Me#>2lFs7+kDdM^~ zHcKz&OkQnb>g^96V+4?nom+l)uZ-ByDoCZG?>)r4pU<%5#sBQBU!dgJCQ6P`CZp1c z&rpxGsHe5)DvI5XB|BZd7_RdwSBbJxPOLOmtFf}!Q0=OWVNX^0Gu7Qr`m2qhITbcC z)@yH3YzT#mor0Y61CJA8Z)smV zYltn?1P>x&3pBw~ir8N?F^|M!nwU$1?^QFl1`_vaVm668G!Z6ogC?es7@>&?Buq{4 zG%7Yw6FjPlov8_)W5s%Df`?qOZkphUm@?eJ9Pl_Sb^yyv5T6~ zRrVC zp$RP2Gh)wZVhxGkYod|FZ#6+(kJwaA%qKysn#|4u5@R$mkHqDgm`ft4i3SoCnh2Bl zl_qAB=&guA@q}2Bc1?*Lp*>I!AeN~KDhb5Ch2|~OrUpUmD@{Vj2j@n9@4Pm=!ye`)`xsUMTKGli+?q+^^F8 zCvp2ia6c^W8}EX9Cfv;YXhwRPPGKa86E#swqCgWSiEK?&lGq2mQbtflBBqH_693Ue z35j<#;Ulp^6GbFm(?kJ@`I^Wh@q{KaNIakk>eXI3%rdP?2&}m3jAJLB+CSzla}N^1>Up;kw|^2QqC868GTF5EBHwT59ou_ zS)M!mwTH~89u_zoIU(Gj;aLI)8U?;v!}ke1NW(X1_)dY((eQ;DzD?jWHQZmrePt1T zs)kS0aA$#gX}FVyzm!N$(D2R^CEqIrK2pOQG(1n>P8x2~@Kk|+S}w(TLBm%Gyl1n( zk7)QDfn(bDeHwm7;4ifAn>0LK;Jw=SMH;?V;6@Ffqv3%9f2U!ehDQthwuU=vc#yyw zHN3mK6#hJcKh*F>4c{f(0f|UfY4`{6{hs#yl7=@3{C5pMrs3BFUZ~+|8rFRBvWCZL z_zv;?f`%{Au-^1|PQ&MFxR3aLQo|={xRbz-YPhS0Ka=7-sNuaQNZ}g=j%awZhMyGp zZVk6+_#S~n8eX8`D+HdP;Xi1&zrc5Bc!q|L6!>Nh-=g6ioxwNGfYBNruHm@&zDC1? zG`vROD>ZzIhMyIOvdX9#R+c>nQI`0E6&(ePFcS9J9KmWGcLIG}z1Q^Wft--9*$ zM-7h=-+m3(Yq(P2N)6wx;S)Q;S7`Wv#GUY6so|dD`+OZq9}WN5F(*f9_$PrA`TpTJ zDg4AdRo{t7KG*OT5gZBlZ4JLEa3UuQHT(yG%XLnk((ojK&(`p44PPd3nTGGwaH+uO zY4|D)=XZpMXn33OcOrv*HQXX_B9cN4YcZ3^_rW45ycRPF-(P81iqh z)^L#|nJE0z8s00dGeG;cHN0Nnvosvi@XG@KTEn9>{5ydYH8@nm;|1=geg8_sLj^uV z!$lfCN#I{;I8(zJ9er;*R_bJv@X6`g_j?*%BJimiepAE07x-iiKda%8z?(GufQBy- zc(aBlYxvBL@MsMmF7QT77C4LsHS7w`hRZa(QugEC)^INk&lC9H z8t$UusRAcjXAgExcnEftz{|An|7iFefnV3~Y7KW2c!7rhuHkQFukY^~{=J6Z5%{kf z4r};Df&Zl8@fw~j@Dm!oRKqt3JXga5H9WYZ?_v$tV>yCh^!M6#zJ_lQ_)!h-J6Z}q zM&JiEyhX!Y6d@8@!)pYt-Nm0DWf}C+{cWE`#5ob zLO=Q9UdFJQ;=XDe+46Zg4HYZKha%7+5A5PFMl>r>e?bpLZ!2JVK2%1!Ji z#$Fb0t&HU_;(n8{|6bhV=(fduBmGRH+ly+Qk5L)XwW?YX-DvT;cnrJ_7xx!*o8ngW zSRwA0Sh!MgU(X6C7Wa1IMdCh^cvo@Pup}Ac?!!30{YF*5DEfEBeI)(-N8GFFhc=1P zM&HoSDsjKWVk{E(R=WQt?tHrE(d`xQsFS657MY2)HC?=(#pvq9J&D1_i+c%^A0_TH zne|J=J&f)uaW^wt<>DSp{EQU5m$*-3{DtCH@pKlq;*+0tsUlrVKi`OZ7~}jx+>@Ax zk2OyB+v5H;(`pj;rS$)rxc@{y&x`v8x}OyHOve9^xX)tPdU0Pw{BCjgCVrc^_c84C z;=YuAMu__{;z4m|G2KDp9(n`Z{lxtW@sl;qIFA$er3{-d?&s(ylWwZ-?sO+T1HGJY zcB;Bq!t}ln_ayrJSlpj7{M+Kbo#{1+JB$8b6Za|C!~MLt-x>|~lj0sq{2_6F!Z_=- ze^q{QKTZ5Lai2&3*Nb~1@e$&Fhv^2zeGmN%68B@O{MtY9lg0fU<3CQ^yNTzg_|Fvg zE6nF!*=6cP|1ojDz;ri>dnV&wC+_3vf3>)8r=P{*?oIq9ai2o>pT(`@&ZFW!g8uPx z0=v)@U$?oQ0xo#O67KR1c{6sCKnxPQYqYs9^f{{7;9h3*03zKC)55%*hkpD6Cl z411)wd((fexEC_5@3*V`sP@_}?#)bhtGJJ+{}06dA@Q~1-p%-ziu)qQ^AB;qa4p== zid(hUAH@AI{X61bMnBWV{R-o(6L&N7IbPgPGu=_*K9Be%;(md6mAF+t%f-E$e$Ej0 zuNi+YajSYO6!$62XJ>IA#dv=DT9th)-QU2i^-p1VKXHG;dJh|OQ+QqBN<=yq*A<@c ziZD>%3-f2t3FsEoRW2}FAh#jfphsDnaFit+l?g{d!cmlP_~>wNJe=1s_Jz9m!{@=k z+XoPmd~l~0)(8+`ZNl@&gk!XF;5naCsMfis*c`t@XF>56&z|7{7x&dmsfYL_UbwjG z0w_cS!cO0m6h%$F--q~Vhj^d+mnn>*ZYf{S*yq;Yk8zI?xc5Gxf)^qB{?IxOSi2Zx zhrT@Tk2GhR*-B-9HgC4u4ZQ8{K8Dl-<#?fE^1FCRNc7&Y!(L@y3H@8#C^v@U54GV2 z0rfjW_y#3j%7YO%Wv-yw={6&NgF1(kS1TSsY2kwY{4;RTCVq2MEPLOIoIU2VrnM{7 z**?NDl$qy!E3!g(p{;-3SgXGQh1{&jr z&Vpf1*KDN*yRQj3zzamXLbGunS=7QC)pOdjk6e=K914noMP{zn)W`p`;7D`;0sku zbz9LI!RbvUXd@#E#VyS0z(KLA4|?aKrgKI)Zl6>;gU;HdS@6FwAoh>Raq3N>txJ$Q zyiBrM6)#i={wx2fZVQxwN5WjbN(h_IcvvG0Z+Kr~e@8xQQG7Jov{U)$qFVCNeZ?au zze~kzSRrr^zY{~%Uw=|6qXDp#1x^}xW!`a(k+$5}k3S}GWnn~0_mzNACJS|8KQ4M# z(HIR+xzr_l@zzLh4JjR;FJ_gn|XLbe{Qmn?a5Kt>;Z-BkR zoE0_BoLnBw#jnuy$9_?FkMxNKgtMB^A?C9`ggV*B{3FLYcE0Ke-HsS*byFQ-zVw45 zq#rOcaDv#bXbp|??`wqpOK7dXvxuKUPvJ&9ERj#a|99#KFs>H<50q~TSSL&>!L7GWW!?7#X)tpvO0S=qwR34h(Rzl7D1 z#Ce6>cYB9w!&G)Rtq=5B%1AVvfg!>DEn5u_o#ciGX4K)%S`O^i^W7>7uUc;Fx39gn z7FK1QL7!oGa&Jc?;@u)xAn70}!Dl>ir=Ec7ylmQE5af8BQK_uECoPx${UVwgz4{pp z9@OwhueLg=FVP?H1={OuJ$CMcs9dFOjvkIzUlRS>UN#pVYMj3+lM0z_riBM!V6W1% z#~`*Apk$AiJkCVaLFYj}KT_XV16$ZeAXYuFxVUbEy5jd6CgDK+zseq!r*2Bz1SEi4 zepTf^Kq&t}i|q1#kz9p7JG7yXf~nV~#mVgDm4XZMF#UcvJ;bNULA&by81vnVqj3=L-26zp38q5P45 zF~6DCJE3|ors>=R^GVH_{(oe%Bh1b+qL4R~ug2>~h+J;Y@<(DRg84f6Zu2wba&rzo zE5S@1i{$+tzKMp*H2JGqA(lNOr9%g)F28&fcw|_v78|kmA%(=hwK;&>Bmt{?alegj z`GtIrqkA#x)R_4+{Wyc_8M1&O$>*`hRY-6Y?zOyyl<+jv%8w{+@58OQU!FizJM(8F zIL99~w!`WS4C3!58C?*52=5-k4@=BnQxPrnJa?XbBb%>-+g8{ZWNWjsRB=a zi;2kta;qmk8MHRVofJ`=j5+G+}B2X${zGMt^IA*HiOPZ1$LBOyOh`b)%3=`Q0`cfq|bufIfG z)m<)@ex%B6mFSAXeNxm=pd9Qr=y8meMx+9?+cQfuylMYYwaAU;+1*cO#lwCut91G* zwqJ^@#Vb48aUYL0ZA5wE9`dkmGMsbv?Y_oO`=WrHP!RyJBvXl27CNrxG{y-n;ptbt-rs{Mi1GzX@3bEiZcL-sq|p%jiTo@78`9{uG}=wl;a$q@ ztx~!<_aQEucIHC2_1n(+x8iv9>T15F9L)Y* zaTuQ?cX!L0WCF$L*Y!gAf{X3d_H@cKK0A1NwcT|yA0q6H>9%R#4MSSn{OzrOFG;nm-1hKsPy~)zm)!hL#IzTQGWlS z(tq`=Lzf>bpf6|v1S=x&u<49wR0|`uD01pr(T={Bsz$_~I$f&T0K0R8G2~NAI+_WF zskXyD;a1#ZglE&f5PWh88WLJzlw@`t8oy#UM(HK|JpJpi@^v)X6O%3@7-`!Tv>*pB z!^pwm;<5t#lE#Dac(~5K%!gkee(_>_Z3%u$@mq@DGW?d|7k#d_62B&XP5jp4w-&!6 z@jDW~qwzbMdE!dW?uOgo%|O_f+8da6)1JBk^Nk8M->5qquUfQSE!}2R%6(1*MhHww zk#Y3FIE)RkB$zwKm$84lhvV^(l>U{x|NpHlHu(w}Y>ei)y&uMF3X87yAutw!M)XPK zK~2qDg}6cL&>BvN4jW#VT@zrwAxQtRZ;H?E=cI8^<IgjTYIVh!(jAb^ImP z&ZsULC0Si}I-~bxU-^S;9@n!z&5c%u>zm0E~7vFJ*itlq=$vaek z`Ni_?_u}hwsQBjm*Z54#j}~{VzYItislR?dkMCVKfcRvySWS5jHQ(tNAC{$>2PDh|d~aU=Jy_26wZElvsm{_80|2`tC7~9NZn|q^!X{ z`0Nj(CU_-z1UFPr`m0mNPw?;aiB8b3QN0uC7NKmauHvl?BNlTNk}&At4ESpUsV(4l zY`bJJLzwg*->)&eR28#s8mv~S89P$KL($lo9T0okQ?}j$&nJ4GL+{}j^`r}+t^Ss` z9}53l>Hjp9D*T5A0Xo<*iebqpAmDSuRfuAi>^Fm47rvTlEwnKVG^m!)j3~0jU=;FdeHpDV5;6Gr#r1j>JJK2{5JeM%10jM0p+`a%j zBF(psdj?_AvRA&J6W`Z9*dgxvzW`P9?v(%%trELQJbi&UJnRy|j`OErg9KYWBn9gu*vF_}FKi((JVeMkJOjB@#jiUd zCD(E81lqZ0Bc|9EwJSL2cc@y7>D<%HbI;v*5PLRiKSIJOISZ@667C7)N}U&B(RTq- z@xo>OLb!V++=UExhopDxpHsrUwIeOPF;crjB-}velNYs+-l?hK9{z=JhfBDt8Ll0> zpa|D9HQZId5biztwR2BrK3gPQp_7u&-oFrz7qt-XaE5zO!u{~OlyKYdG;4?Y)a4ta z!&M^O6%y{Lc`4yu`Gs(&OE~*{gzG8cc0QF7?w(%=x910y&$F4&ujqCLz5aSixWNbq zOKOevYmNGM#qY&PLoq^ZApq&0346(588BqOXje9cb8`P=zemFo>2-NF_RKkrEvm5} zSp=r6fp9%W&HK1r44Y~NSNq#PRq@wvtm_+$+-qip`nFV(5ip%EmY)*-BtpTG`VjN# z_O?ZPAvvyIsa~+SdL_?KcY*ykqe6n#ek~CfpUr?)3xr)!zefMQ%G#{Dn-e`o?^7Vq zgA37Tj!$?E4FGgIDrj-91f;h-`ZZ$HqYn1zat%r_EnnjcwfxHEPGkaI3C{QjYCJ*5 z8`Snfa(@Bi(@&Qf3$Lq4q>uU98QD{K5eQjC4#%iZ<&nhe_7N3MX#Jh6+j7=kd zdE=yRLA(FTYU`tFYb}Zui~K8V_NZFOcbN|dt+%mJWxYSb+N*aaVRRqb57ju08Ci`= z&kJCUmE$gpk|(f51p<kkyy{6ZJ{k-+D|c7j7!~l5DC(B_ zu@j3U^p5s6k#s!9_3MMGoLD=bXqNY@GvYUZh+?#0xwlGg|Y6!KW3Di+Fv{Ews zG$)767R3-3I{m}ds1(H*LHj&zlla>&$Mz$9AUyVLt8JY2TbV|5GXf8D`me@MMv|Kl zhyiH0jp=oZy^PO^_PGslY!6*LeQE}CR<{EWu~M4Bcei4=@r&699N5?5(V{&98(VyE z#vXx=H@w(~r$_hWnRW1lim6WIt>5aYX3?q#veV-A8$Y)zx)xvPR4k;?L3jU`=*BiI z^{Fx-|DoQ)oC=s70W?^Pam35G3T)u{Yp2 z#Qv4y*P{CM$Z3ueutt=VNbcM4(WD=E7(~-|LF-*3`d56>?F3_X$@bg1Lafn6ZaODWHf2%T->B+{NJ@|;yuQ~qV$J1nGX)Rf~<9A|j(U4&jZ z4D$V-s-GT9X6?bjvE-g>xtV5iXOspa9r zQq|?3)iraZl%i17{Jb18P8C5>C3F%4Y2(vH3~a?As4n;68y}_xAJlE)@e_Qx@d7HE zeP+~ic@}>>F`q!@k?#)@vk7FD8>vc1L#vov!b5mr`wzw$v4J zbJVn-Q1>VxvES;qkt%W27GRJ0FCB^xOPNZZwZJ3O*_h79>3z$zu}KQyVWBULP$Qoo zLP~Y55vT$7s)v%jYP#xG`mLiYRjCF+2zdN}@~H_A%6DAA+J;%&``nZ5%z~;Cs_vaE z+PfHq$hj#@tHztoWMVu~yU85I)4ROL zyE*!(juW|l+tobIw69ae=r7}3GXKY>WuGSntrSkl+^ zYICNH?~IjTP4Z%SFB$K_S3Y+A37oV}agPSyK=dOk+e1TA`iK1}=XP9C^a9%zK_7>+ zSRAGIFRroL*w#KAt#^mUP5XM&eo0tnJErfL1C&^ss`28vPld0x-m5z*KG>57GM_lB z{+5Ce*l-;kyT~MR*Q|n^G2M% ztM$n#4|Q0dK(hfKxIXd8`UDDD`A>ffL5nwY5=#et-tP?PjKGVLXB`ClH(b&%$d>dV z=ua^96^4Hf7b=Mkix_MaCBm-c?VXh5^t#AccC0hFwW9Oniz3@fjb#^S;uyp61DG_z z@h`8)HDEss? z6GNrMG-;vuy$OMtNJ@m0URIwb-QY}o3ahg4!Q9C?@bx?%3`+33GYntC-{($_N48xN z8;G7DeCXVn2(cbXJ|8M63od09?#f8TYMszOg6zgI1Wz1Ku zC@?cWG&5Vxfs^wlE6Gg%W@HD{?RJ~%wwaxw9@C2VwzJI6tx6qiTaMXzg4Lwio^#->a=L05L|mu$i2& zJ%Mei*xksw@->^Wv<#udz%Q2O+{IG%k;XQtqNwHC4R~tGbjBgKJKGCyN+jHb8LK+a zW4hNdUCePY@?dhyeM_a^uWiik)q_JG4u*eK6@@UivZ!9rrEj4SeOO%pH>`FiJo>4J$N~!H>Omd z$4~Xz7lUtRm9g+l%nY-TX6SrqX<`b5DQXrHM^|jesvf$xd)-$yBJ-G)z74OP{NbN^ z))*JSs{}{Ty476g1)-^fp%|Ip#-Rc$w=R&akg;ma`U+SOD&Cp?=A7c*7%wy9y|r8m z@9!Nt%^%)>jS($_ufS}~fhi2(2lWAsd|pM{f&9Zy&&jR$+f|yF+XpuXPR{I&zrIWaag&l;%?K0y33=)*FSo&U zO{f-s^P#PVEFrplmN?cKgx5Yyq`3+)s@Y1l)t1;l(BlEV<0b_{y@zT>e*t}sqE~u! z7e)WmqdO~_cCy4jZU!JcHMN9ByMT@ey^QQ0I~{~_fqBG2m-StHVfZZc3u|=@O8`_3 zfI9$iI4uBx9`ZeYy!EK*{3a6&&f61ExNXDs~;NRCZ>pmIZT`D5pYEioN6q*Iun-!roPHZo1+^; zCx(CM9V!a{a7`%SpWVY)I0|p8VbX)5MK{)c=5OwV<_}NJ=v{-wiytcTIVdOkk(tSs zOPwwVe;NzxFhbO1I+y<`eBfwf7SchQ>w{yu{k}T$05{*FK*(uRv$zO!Y3IjU;e<1A z$cuovT>1@aM{Q2Z<9ip>vqYvk#q~W2WT-RfEM`*empJ1yV*|hmnlJG^Uwwn0_@~M7 z8+aEFe+%-Yxl>n|cB26O^x3VV{1e%Jk`sGb5vQr$} z=mxxOa3iu5IWTSVX+dYGerZ)n6^xUGsFRDFP+ohNZs*Oe#X|;HN(rVPXorg89PK%pbZ=Kd9=H_0~1^FNB%?DS?yur|Hu!om(ADZ89^Eeml}XBj`-ZmNyEQlc}xN zYG;y4zwP|Un(*wQ?XmGF9Qc;+R$#{m-kH0$^P%ev|I7IY9{sb2X2(|~+S@;TtWmN? z&BNrB%s19JGxwN(W@OyczwRtdO>zFBWXKlv=BoQ6N&qnJOus0EWK)DXvH<0w zDx?{E2EL@s1t&g(m~|CyFlIvWMSVf|Gm!0AK+&9EE7oi;eD(~Aww1Brh(hM=k;d~; zcU;G;P?Hfo@%TTRjGzIqC!?k$7cyowB|#N*Ek^$E#fZ*gqk1zG@vqWzPx}DX$H_{j z%G2p)_AQ8MOkPTG(~8Gpl?5(d8+Pixw*A=@Tg+_y1$JAld-!XA!ui*jW zd-w(R4l#A&D@N&`5qN3BD+W~h-UQfKn2o7Tv;@AL+SZCQj5$r=1D%bTosmEkhb#}_ zL&eobl$LEP?ltPw{V{8kza>!2C%e`3!HBL#1~7lf#AK*f>>UIZdCq~rh|X6ZtJF33 zSMaUEH|fiYsYd;CaGOq5=Gcb#(b~T=Bv-|Zh?TUIrO8T#q3Se6YhxvSv?Oz<8ejWTz*zK16@R%Y%tu55+qSp#pV zYgF@YW8}I?pH`d+&z~95jff@Ewxy!Vs2_+d8Otuq3?De%h>{2&IKzl4d%=iD&8wVY ztz0v7Hf9~+<=@E(GaV-|7|WBR;RD|%Z8KhOW~xZ+-^jr>aO|x(L7l&j!s$vZ3svn> zSnoFaHtzNtM?$gQkM&{+#HBhDZcv=wUbwf9>Qzt*H=-C8+UH{$-m;_;A&q+4?Uic| zwCW+(917sF*7a+|{UCK~^Tkk?77S8sg_a!N+3bQ{72KyBYfV1L8=Kk9hh@}2(Z2vg zA+J1E^qh=q0jo3Xb_Sg~U(lJ#%?H<@h+^MfQFmmF^IohUF&oD`75xSiausmW*L(~t z*iz+Vde}QH3!i(gQ9p_T-1?BWh(f)Mg@ZH2^O5mFC4cZNke6(8W*s)=ce-JoUNX6r zbw{ZiE*#HM$wu@6mEO_VHmm44>1%ACc>EGR&==2Eph|Vcy;-6wZj})oiBPE(cOTeN zDsHs6aNjim7w@~e|E1;{rRFa1Y7Wn;)L3|U0u_kK<_cB7A*ltdL>J9+%=Ym2s$N&9 zdc}>3ATA&kxjdtkYBi#-qRhrZX@W`labGfAA!DxFi5~JW{Uq+AVVeS#jXzS`xEQ3W zdk4rwb)S^1?xPa(v7guXS8f4Mbya;E(Y`7l1yaL>@sdP(#zHW+DhKkjQu33PlAjvu zi`W!!hHxA1;*#NFFHrifWwq(cyRip=G$V_c@4j-rs6Q;sIhkeXw>@?xGQv*H9=+!U z>Cv%Tq@rYq^$8bYzN<&6+T(g5Hi;V>R^j=lDhVfgw!aG_x9~BzyT2fK!?EMg$dRy+>SN)@$MVuf4o0 z?{~4A2dwKnZdLs}-ZeQ+gbw$5{UmHx?O@-_fnsKY7ktQyu~75Ek@4#}f5+hE)V7BY z^qgGl@xcLvfvEcoRsHW+S5@zqWhsdXFIlnGh$eghqYv$cVkF3n%|QUj+N@;|`Dk1C z`7=IQD^m7DRex@UKV3y%7bpAkY{02iv)7}SNqK{Qr0W6l5`t?dCP8jXLQdixtj{nZMu!$pla7w}ka|z{BiuF9 z{b&iiS}WLtI-x!~_MkE#>UOAfp@4P8!PxP@l6^?+;wJmhpCRm$A8Bs2V}zT5C@TPo z2roDoYXp`ILm}HSOal;MDAkRxI~WTA;e^SPzlrrQW=PmNihMm1+hI@`;8G{Yh|(ZE zZY2~&_IEO7T>=7kybe5zpD{TzaNDu{Q|#|wfJ;(X^mc^|@3%ePSr#ZAvi4wmzxDMSYwY4;-4IOx|N74uithY`tP91b*J{iGnqLEg!1?_Y&&BI;Y0wC;Pn_~bpK0~ zmy3KHb;LUhUS%CbfvcSRRf)d|j@fCV#A@#?)=QNb!=e$*M-deGegeevphomd%#f(7 zt{zrA4#nYh&`O24T|lxX0{D|tgIn?Hnq~oK2dD?Ah-3ayWYn)je$*xAx8R_E#E=u< zCVT+xSz2T5#Gun1fuJ{m3x7^+HdKS!%`xk-n}H6@tqtyc`{L)R@f{V1BSBQ|32Ue` z@fBt=ZULO!C@(Oxv0EO@{Gb|}69`jKW1nBco6#?$nu7MUvVQyASK}~?0UknHIPk%S zTh0#b#ISB%3p|J>K*;$1y5BQb2$m6FqS9TCw!$*tHJ_@pkg@b8&@CBbufO%KvDP?@ zP93hEk8Myq(Oy`u{cmZ>2u-ZJskt%-?byMq=1c8=g!cb(OUCVWx8C~8{xNo3fEj6O zRHienq~E^S!!QrT^Q~zfZIFMQCbk!T-4g|Ygltr+;z8iPH?AIqD`kVT z0Jn~{j*sDr64s8WDySAMgKrhEihD9`i~&2Qs4B3|dbF!j>}k%p7prQt{Myi20n{(9 zW1Cscm6=`qk%O7{_w+lLV}N^iS!aZH-)=^eSxvA?g4?Tj`!X}LIdf{WKNE>>h`o$4 z9pSqNz$zt-sg&CT&~?Mg4{WLKhW2%_eU&2LgORDwdgy{ab7p&Cdk+-Ot~g!yo?RgQ zxNd+}h8dF|?}Pd&xVXJ=1HD;W+6&)>1HI`Sq??$Z@a)dHI|qAcF`T%zH<)w5iH9k! zik(66wVja^v={z`ktnVyHjU`j@Qa{1sxHQ5qAK#4XIv{Ar>X+(qJC@1{sm{_hb7KoBBk(%DIhJYU?vt@fwD_~MuXt=|9)J98qRlQcS?2MzZ%twL&fR-8y)qa9_P;^h1u8Hw zR9rB%npO(x2cm{Lw`@7@89p}bax2ObJkLe~XMC_^wyTXAw%fT5* zZ;H?QjrSkVVvl)GYUmoIVr{^{3!@>q+>)NEc8l3IvGX}2BpVDpL zKfaq!r@uSDGiUxj^UORmbI!pd3)a#E;KV*>KgJrLyXBApCuU@iicjTHs{HOZx_`-r zbbK6oTa80ESmThjY=!1v$1~HK+OZ^tfCi$;|E1J$M#rDHOx1?k3o?`PSw&slvowoG zo)_N1s42=_G`k$GQTmy!7d0KYZevMRYDa0(7>^jsmQE?^POZqJdZOPrBn@pTy-3FQ z6BHi8yf-_pD_MJJBW@qvC$prN2YtJLjo~WuDXSlr_MD?ewY`KX?P<_wEC1cWJOnnK8qri^sbwoRFd?Q(2}*RJ1l@vm(uvr`Eovz zxuAp=Tc%s{S{kXgIF-TN3MeVH%5#Um&2<-{o^sD!mt;*X8{*mw!+LYmdTZ zspA{1TMDV=s^>zFyud__yRPxBnnI*^m1ij2YFO%Fi-lJ+Fql1waDX}+trQ`Xd;}lOVpbisC z9mXr|zJ>!1X{9NvGFNy1e0&|_o}NB@OCsw2@%XnzN2;1qYU(yCeup(kav`4;@%1>oWFixEU-N8^`J1>nRFO!iDh$Hr8O*7;M;m*#V_3JsRg zLB4&;tXV17dgopF1;93I;`Wiu?d04Nswu9t#y2u5S^CL*{b^?B)^**Vei6OpImw~c ziKqNXb*N;S)~adXr&F~al=$Ka?dj9~`WMl)?)!iJXtJ8-@={xF=kXrLo^!&V;ST@J zN0ZewSBL*%JiIl(Rq97h)Vb0g|26}JHNWL4{KQL76S-ABRfWf({Heml9H4Nj&@PW{ zFMW(K@5VlSaIWe)s;gvld<$(YXUpYfU}7o08hz_Qx0$#S^~h(blVmB>nnPHIq0%E2 z1YPt*QRf>+G7OJL+0nR`W%vi?^9-xXGJHg-CS@AFq!r0Yk}qu<>Mr1eLZ6qo^{3ba z7zg{|)Oe}t7ad3qkKYcd?T=rcq)Lg|4Cm73Z`1WHJ4p0?Y~Hu*aEG|y(&oQ(!ddoG zrycGgERpTh+EY<)*jum@`m4Y%w z-XmH~^jx}4Dn0ZjS$3@0wLcIo$Nbx}Vhiy~L#fu#Hf%s_SW$_5KHHi0%K^uXjt5C0 zzxN7kRBn)Id@gokHo;l6WwPlpT5~4yZGA3wYgh)6s_#2?YdJq<9?wwCWIk@U^7x8n zw?0q2+HO63P|dtV8D%oa@WccU&Z9K5lp2iwT;2<6+pf1rp2(Tx660+K!8yliwa=x@_5S+uuvEQ54#KJ6^Kh{RlNT?X}*X zU{9}3c3PRR6xn5`1)^6D z3CX*Kj%26(-~nx?oglYkr!Cng7U*xJ57>6v8(ur@QJ0kPM@_82~iBI||%s>5KX z{R`>M$mRD`)+LvTcADy8(x|1edDjxNYKSmDh&yr`hT!&7=%^)Czp|{ehlv|mVl~%e zoaK$TvzF+x!WK(pR>Lt^zRY-s0jAo|ZG&Yh#oY4gczdksS^u`=BKpGjD26!aJiUosB6s75QOR zV<}((HOA3t#;ip@o#149p$soPyTbda-8ysUvitcz?7wtpbDuLL#m0!JOGW#Uy$T9npu@rxtMEO=H zwNSoO)!bipCFSx3>P?U`A6Q~X^*kN2sPoYF6P2o0@-E}RV`NB8ElZM$i01lSj-N+Q zrfSJC79k5>Kjp^NJvU%lE?pK~K=9I}sk}Ctr@JU~^(isL5~GrEpCKG?{x}B1vt-F- z{)`<5L{R<`J7HhRBd=g5?2{8uY99Z1n(Ad49cyS4S*_tnx}RK2%LSvuQkU|y!o1rE zCzb-O)qBYkp>)vJD%Zk~sy<8>&diJ-SI%XEY3hl&KORAm~gV-^wzj3S* z6ZP60St3$e{+}&UM8!{OumgX^C7EsghQzr)JNgU0M5>giVxz-&MKm~ek153jN9JGL znr&$gkvaEFjC~zuV!xCy+@y99h&5O393Vq_7RE3wTTH{rh22O%N%u=i>&S$xjXR}> zMLs3Pe3I2>WFEyD9pR_5kHCobOF867>MXrvWvLyT`)Emd3$5%Ve2V&`g_I;Qcn5jP zf+aql2jD%ldy=9{tYxf{?!xD$TK>tIk=<`~oKO0Zut$s3QE5pV1NGqOESrlcat`Nxu&Deq606 zZ{S8HhhkQRSpS`^d-TKnko=q}Qy5wA-hL{DaHcC6B*64fttPKeA-6ZkazknN*!XrP znPT_z7NNxbOnUh^k)jr~y~7&%Dt)M*xM!{BqP#PO#^y1q?paH%z;Lq`C3C5J)DfS9uwoS?WSWE^ML4Av(x7C#@I|Bz!O-d?=%{UtN%Wg`N_^^CDV=FQemA zIy?fMW5>^P-x-~A)CH#gp`J?#&$GkWKs@lNm2*z0$8U!(%_`66Y*QCR>f-r9w_K{j zXC}nYzT@i*JXUA!X|nRaI4h&$QCKzq3H7A%G^ne{{*2DBx@B=zX-_??%jg(cCDZyM zzo!VZ>;@kdl+pPbeP(q}jkO~z2lhBGOq~#5ah3|u30H!;CE;gUj+x;7T^v2+*`83( zIb3g{%-3@%7CAmzjc(+EuuKrH4+?uM>;I{2X9%6#k|C1=JrbP-jUclBD?bh`qQyy+CCrjjFxfal3*Y8}HNuArva@8*Xn!SvPLuaArVx7JOhoD$th=qVN3 zaj|)WDmLNC4ZIy!zlsZU`(_mvn?f>adqM^RYS(JL7T&+W@@l+fRfN?gJIQK=%eJ7@e{ z9e1`n-y#5ZQ(x+dn`=(o7wEXNWAo0@ahEx9XOG{BMXx%eJ8n9l6ZacQiTUQ56Zdbp zCUp{I|5N=eWL3q^cX0eYI__L|+$aMl?k{@c=9&}tb{%&v`+qv_JSXnl@gC8V?R&$n z1w}Mg2_c>LIf|~57fbLwvpnweqda<)9G#8LJ5M5%A(11DC(}XQCwCU(w@&WlTE95C zlgF=w!%Z2Tj}jS&7dgMm4~{Knbn*fgBIOy)Sr-$%{6%;cBE>qWlRj}G=e1Je=kDa3 z4K}1q^Ru3!C}Lfukqpzz$k|pu;+#{*6Fgk;=U~Q72PAR^+?L<9Ej?33p3(V`aEvh5 zg*fq1svd(0Sk=K0QOHitF??#AUTKdPGQX5#mg=xzMn@T!CU^$lXC17O!*Noe4jFeQ zo|OHHM`yM8tddaE&QsU%@duJ*b&{-I=o54-gnLfdVXk_P?=bo?WugY?pwTldv!#IJ-_ zY`K8~w^Y!2Eo-fo>m*9~i)1-1H&@=8&?aR3oEhhium-UiqWmdG{($uO%LSx`3eZ`ksp~@kFCK2}I6TvXVgU zSwf)4?~?Af<@L5|vsEnIyBVaNb5LK95xaNZ)t>>J4Fg+#ob}bG7%-U|+xxQlOpJS2 z(&Sk)nxkbhRP`Uu^nT>+pw-hj617w!@7B9!8JvPI>G`CLZhUrtE1ZO~)@UZObp0^3 zmeT;y$Xzm7Je6}#$MCot!F>e(0e!`1@A^hh_>F1;wZJ`sDb}-;k65c?PalyC&{`M% zhd%an76f&&jQj0$>~;L7;EueG|5gbvXi&!5Yln5Am{D(H4x-3sZIY6P6!~ZMBzg2q zvR}$$g&3@FMgw@nAXkee0qT)i{e0EZ{P4?MUN*dotoem9DC@++xb{w|0(pX+u_juj zd@OoclatZ+B>r8-duFfEB*26pP+NtIqNGqd8x-3@%n!taCgx{Zi5??McmA zo%EBE-pk~mfbSwXEg*Lv=DQoA?zvgf&+nd&ai-*O^c8-DdU*dy(gBt_Gdku`iIN11 zS{yUrDN_#f$ldBhh=^8f-h+P%itn(s`uQzs1X(w*ngAA zZGHQduekK>pU_W7*0-qy)%sSRXv4xLIPb|7#UOV0UDkX>Dci>qlJj+j@43O;WRsyF59{#Xi0{ps_4ASSZ4*lM2>SN(!;T)^|3_6I4s%gSmcB*TCi}*D zN2sl92PBN6Yvq`vSJ%ExSF-Bq-RRp8@wxQvg?Md!Tgb_0OW&RWtJKOr@B{JuB1s?) zO67`ZXni|}t6IBcM*h*#EHY>yI(mO*G3WENg8jvpL{{X)s?scKY<-4ZaZABQSEDKO z*>n)qD)ZVrf-AN9d46!#SgF)$($*?fw2RWDv3V`8yS3;hd}z@dKdThc$MLC>l<`CE z5$$Pdq|EU>w)Q-qi)tP^KA5OK&*nm0e=d3#`ZG#h@uF^*{(OT1IQsJkqO8;UDP&IcKFT9AoXvtBimz9(5|Kx>%EWutUJ5lX>d4z{2 zf(_SyE9d<@*Tq)*ibUW3_N3YFk-5NtPgd42`clW@dE0k4WexPt!|OzI8k= z|K5q`9~0s^#Hl+g8$XaBPCTbt@$B-%^K~bljE-dlNr>bCPs;(PeDYos zY%PueoM_c=&xx``-T6ezA79(^+MYf+x3D7f#uF#zS?w&ZJL&OtzOj84)zR{M-o&E* z9Q|r79Ps8VUMr+l;nJ=5CRiJG@*Wiy)!1>nzhB;(+QKP{z4ZQ3dDn<;UlP0`lUL}G zg;^7G(F~y;M%3XJUc+!+sQYriybbHROnaY4udS;0Hn3{-L?q1IftTKs$RG9mv361_ z^wntP=g}IR7gl}0T1c^jc>#)gkK`-Tnpcr4s8IJRPIRv(|37UxRv!P#BZ5alJ<3!g zAMBy8;*_}key%+w-Ji^ycva{BiO6!*_u5~|>{%{rcabG+`+1h4DVMiJ^IZrPYuZGq zF0VUYUd6If;?2BL-pgqn0Zob5?_7_>Y`7A&9!cj>#{}=dqcP35F@!Re^+PHvs`{hyC0yaPLf*>0~ zdD&o2{%1k~pN#)}xq%1-^=6Ftd<4r0>6$-gqJr^~hdFscm&jvjH(RhFUGH}N$a>8d zI)L3@UF!y9Qau;oS+Ai?EZAJgJrhrqvZXt5pM12Br>I_GnTMyc-lTizm4jETrypO1 z(JKde4_vIya?yB}e$d~)YqT^*2`qG;}wmaCj<&#`_{?Xq%~ zu+oyzDQ%+G%bw@&!7zOvk16a=aGBJ^MZ6M+w}`tD-zt z7Y%Fu*7*j}Z^*pygo(LIUnqTgs-;h#Y5Bb}9sWr*GR;b6$iqpznl9ACD$cOvLEaEW z_LgkOj8xIj^!uLd=Jf1xY-cl6t)D0Ea$GSHw3pT0yBvAY*eWauU%)S3zD#>b!rdz} zCvLrx5*GS=&ii>U?M?R{DQSc_#nq|3Z0wYnNyI z+nnU@vwe$V<6jlOw>+VqOEP8CaAZ4g)cq;-tjBGsz2oe``$pt!I6}oHJ2EXYC31aU zsAoA6mZ@H`Mth6ozh;et@0l?Us_}~9_zD@0Eq(ZIj?)BcB*6dk49f6 zI8%$xXG-KK1$%s%H)c#Q6Z6p}LOmCAHiUUrO!Pu5QW)xakM%O$OGG`%9n@NB_tpNA zB{yV77OK8c+I@QH(G{vMge`qHck|xqOV& z{{zeSPyhAbRX%C3{~_(SR_{T^=6&aoF5bRKNQr0uP#*cr=rqY^p?v9pSAg)DZkfQg zTylvlRYL@Hf;Hnu#u-GwEb(zq3ribOpyl? zmkZtO%%MFCm`+)&F?63}aYq-eWH~t++1U z3o&cCn$h`XN^JGTJFQ=-EiInDxLWnabEPkyF0ZAbKeFN{Z(CZ<_i3`Nb`7}u<*yUU z&5e;qkJK-}nON?2Jwx6q#Zu$BtADPW**{n5;>XLcUOTKUme{<WJY78ByY$J)`q+{8l%A()xvc zIKZ#OuAb4kU0oHkd>y}(S-ylH9Oz|29FS(t*!6S%m-lDCAqz1q?DEJsno3@|pUJ7( zj9uSSmGxv%&$*T!%Fj6aC$=(LX62DZm`K>2zlXWU%HQqQuhf?9iFtFsuS$*R$HjY) zXc&266-tdMjMh(u-Ji-P*_C`tm$TKE(Kqa@hPqE8qoM9k_%m)^3(vHIBNWa&pAQ01 zu7r8Qcq73qeUvyqxYXfYdg^?OwB~sQD84DHt}mBx5CHA z1u11lhrBy!;%AAuDTZ^UcLrYl&Kg;Bkk{6Xp8{vuS4WhW@BBwxUY60w?)G?A$$@++ z{RQinoZR47Vw+@i?owApUaI+}^e@iu{ zB_A{7r;m$Ak)ND+=z4}Jp-K6x5TYgv{ zwDrw*xXyca zmKRLmxYAhz|L)|a!I6tZd0Fl7u6C5u6G~qG-|CzA$7fV;R-+SVj_1VY<^5Vq3}5G6 z>yenl_^lBj32TpEG{@6$UX63F3MU%pv;0yTrQ*o;v+_X4GBJSSIaniPe;CqpPv3jeOeUnSTFXkt07^u6}3P zyJtAOmMh-HH%mCjz7T!H8pDytvnDPcMIWt{%N~6cfOE<5AK8fX>Ld9Gp{0*5XX(P; zqS3LC%CZ0%n_aa{S6_!V&8i5+>u9XUd<^`Ef{@_GfgSE59(? zGCJj;4a-Muho&{3^{H`>8S8nIaOj;tB@;xe+lb?x{FuKl@ z{f#2DVVH$od7v$l!@eJJbH0!_;tR+7Ga7~2v$SSB>+-E+7 z;6~ei!Kd@sqRszgeEn18;RWKg=Pz-QR~6UssI>QQ;_?%p->53?__ADgym#n=O!dv#RdZv9OGP8~Y*`EIlrA-qLd;%Xk;>`|^Al9bY7-{H`R93o+4s1TFHYyj%A%y$+SX zFG(H-k<&!#(!_n%xS#RB6}&R`+{lWyKcC$)tgiN6Avb2**H@&3dOw{!emyyB`*hN| z5k9T+t9ZD`vrErzd3oZ$WV_$D^3i`HW-y>7Wy>mLH)iIu~mwB{LB}L9&^oQ;Pk3=&U9jHBU&Cez}#dExPK78MI zeyp$PeUU}fdB&ngY9C2V=*JTe+4X-(@+1Gr>upygJu>EBG%|6(;(4%kB3^nqUvmtf zGnCKzy1!SM>+$nCxPJpQo9-{|qTdi-r3zq}#Yo!>r>zu)8E?ePzI z{DU6oQMphYx!E@(ynI z^&F2s*W=Ig_(L9lna5x5@mF~KVUNGj<8Sr&+dTd*kH633@Avq3d;9|)|DeY|E_6I%wY>z+3D)E{!x#A%;S%G{F5I4l*jKoHnINw9)G6C zAMp5t9)GsSpX2f8di;4Ff5_u6^Z3g>{tAyj?D02x{H-2;o5$bf@%MTB{T}~rkAJ}9 zAN2T#JpN&if5hWI;PH=o{9_(})Z?G@_@_L6-*KMy_xLkC{(#3H^!T$q{v3}#*W=Ig z_(L9lna5x5@mF~KVUNGj<8Sr&+dTd*kH633@Avq3d;9|)|DeY|~@ALTkJ^tMu|A5Co=~X*^%!sTxx>PVfMU#Pg)a2Q|t&288d?*sSqNjRhLd(Rh-^x8AbudqLx48o#UY zOB&lX%J)wsowXX5Xgot>n#R|7<(q_iM&llh_h`ID zn#R}OwBmb4;~tIoXuL(^^%|=*uF`nE##1$>XqFTuh&?mah1mN zHJ++5MdQS4y8Id+)Oe@H9*xZ!uhdwe@f?jOX?*Jsy8Id+)A(JDU((pF@fwY5H7?P3 zhQ>6Ful-(^U*jH)_h`IDhf!ROyhSoeo14y#%naL)wo3C85+|xzV?bPzs5Zp@6mXR#_Kg!XHDqp?}zl^P2)o}=+3 zjc<+X@@srd<99WFNn^XlYc#IaxJ2U_8q+ks7S-j~xJTnX8gJ2fy~Y&Ln>_X)I}GwT zSUYEdWxK)icV?Au%QY)%A|>_Bk;?k2nzE*bs{HEeCfI_en#xFxeZe6LYqr!@)%dKd zg|*F%b(LGo>MHAN*0wZltgNb86}r^ESaWsDrb}xY8=4{om34JjS5{q9RKCtvSkoM7 zYS>z6zFOB%SzXiQYr5K3(9lv>UH^edu%WT0KDcu2C2N8kYwK!)XEyr^Dur*XY-+Aa zykO^g?RAxnRpH9oddbb@t2UIZS-UQOO+nFy()^DXUAoqHX7xh#&v#k9Bv@O&DM&GD znu2w;S2tBQZIwh+y;!An)r!u&t6GZcTQ=7;QB`H(tb>3VJVFxX*y4u82S{F@w*VQ#t1vgew&DFt; z4OEA&l;((U;isA#>V4&fD>fAJkn4ufC98{k^_81ze37k>8-?>#*EUyPU01WArhZFpQ$xK3_7xUgUQ$rx zv)j$LqV$sG`K7*vryqB`Z(~b+mE73utJPAwp{6xbQ!nW?`4(- zqm?%LYMPoFntatF-@cN9Lf<7V$neJC=9}q}kPz%L zRrX+{flgIlts5Gtx2x2Lgd>eX+wX)3W}n&oK{Dp*zpHDSn=3cfNawD$w1d9c@)>T` z8bE0hS3mn$OHE4+aVuQga`oogi0!+gvNlpuT_;zq{^cU_MQrJSt5ppXqPVFh?pa;g z=v=t0ezVJ0T-VYZ=5k|AwH4yh%KA-C_fsXY_=1MbWJL+4%I)%&jT>v4^gT7#w$wH$ z5!cv0s7gy-DO2NTcy0*9m{ftlda@%`pO><2|d35sX_geZ} zix5&x#SKkP04uJwHPl16p~)4Wo3a8GZIPbnBxrk)M)lK4Vyz|!sxo5-v|^zxo3@rU zG}Ogoa#O_Sc)7c!j(%yE*s7}deU9IX+45dqTXUT^h~}(ds&?ZcY_D`GX(+@Dh1}56 zR8>=2xwWB1O6=}W;yE6gA-Yph0d z%%H8D6gM%zU9CEMyqt-o74XuUdZeJNve{L^2^@`T`STfNX)ZqhQQ1@*+3M83sF=$7 z>ckQ!lB&3glwDTMT0O!p>kM*v&8FJ=1eWBB>Z`q!JE3@=+gvS5$(9ny_~vSAR(gX> z@f>1pRc&)K1E3wC6p_E8wwif?%@o!&M#9T$DTV42+qz70 zSI77$`pil^9(rAahgRNo4eq$CPT*#WYwPOV{(`!i%BF&bx`rlqY(lCw(lzhBmLG|r z>tx*2?T2JF)NQG8g>wxaltM|KGk$EYmeEUj_5HT=Ew5~9s#VHIiY{WU1`(_5NVLnR zqI8BBD}<7eb+wzZM9^aK8gqhilRXk`t}bJi;E_$0WI_igA8VL}GMY46S^$EKc*7L6 z)>NU7b&qTIiLy^H8&uUWU^4-Y&-#5c!_5q$EV~);S(At(#A=9_Drl)GuH0N(xAmy$ zTk{)t5S6}T3|W)3B70u$4d@BS@PPVstQ%|IZRig@W)cDGpm}b>S#27QjCnasFudFlH^qR}9+#1S-Wv1g+2GTp0uN+J3 zC^yU~r#2Gfb!%1K5yOck?+r}m32(<_+4`y(YN|EqRG=rEw;6nvdB0&(W90_hvfzhR zb=e;bw$!678#dL~ei{Q*tV=P(XyCMKz6nOY{)rkY6H_*a4WZ#ki8qDXDMs!q(8 zpp|4W!dTweAoH(awN|hT7>q6Bq&djg8;o0#!AQ6=5@a?QWQ@UNtK+^+LCapOzL<25 zYAXk?3$tQT8HvT9mElJohlz+~jgf?$=s%HcA@bivhaSh`!7pxEUr zYHcK^66fZcNM+oz+9-phl-6ZL2e&ZA5DS-^i^L`kQe`SXm}hFWCthO7M|~u?v8iFR zs`7UV-y9FBvgX9-^!SU2N7;%&y%eD0Ew)-vR|p~a<=pGkKg%$zILP1fmfE`NAXaqT z5H*D2{TC8qQ#}?<^+mRr5VbWsa}uC_B;c7cLL;e(n%AgN4dIMETxFL34B?HM(h%+l zn%9b1=4pDF>8P635bse(0H!X8vP^)DYju=|8PZXf>rClcnl(|A9XZ?#6`=}zyICJ%w(m(1*VyLI1 zjwFWg(zD-jgnM`WP?W9GcdpgA;B~c;uyjw=P)AxbtE}Ium0qLMUZO*6g<-7>%g}%| zRl5<{Rg1>WR_tpoD=lR_V6BLy!Udu$H#DG~nrf?SK57j#Ynjnjg_X_@*RTZ2%F=b> zlXXpW9y&BJUeR(Kt}w6hsnyhk@J>EW<(rvnUL$r*ZDXTS_wM45=mKjoTn!bQTPP+5 zl<0qJnbvo-avY@?EY8cCT<{&VxOY5h)Kgf7UUhq1Ma!zFdu(y7ud8-0tW`_=N*J1~ zl{9-Xa!X}hi;VwLDyI^iZGZ*AX1i)4;o4??Z2eF+K*B33!S(p=~^T>}yA6&o%$%gKA<0IKwLQV4AgEi^SYxE%6*;LKt95)c<3Ihci)}S#XD#b$K`WQ1 zQx{BUX9!B9l8qvYNmf-8*~L9wRmtfKgTXRvbE;RW*eUQuyfKuhq|~*{0A)r^1ZOrc zq}}85GNrW`^IH&ZYwr9Zt6NK1X^_MnB8f;g4qa18TNfL{&(IK7=o#@E!=dEt-5aYM zGxPI~_c8f1m7^LJYN-lUK@vv(bboNqwHJt()m2tW{i`vnvMSP2S*P#b)YQ<@$g^}U z^_5L4f@`Up>dL0-;N_KdwJbC;>;y|iAz88e*nf07$=}|Ih}0VYw47UenQBk&bZKcB zoE-(4AkePyLdG}=Slv`BQl+f0YUy9qH5)6DPOPUUyfWzVXKhfesoB&JsYQpCs@+>| zFA9gKLhU&$=T+C`6Rf+NdiTF9YH)362=Qf8KdJ}jppAwmDa0aUzYMSMcL9?~sBrbdWap!{`pRgBe$dWfmVmUl}xrX~?*F9mo*UH@nhSCjaNZAnI z5RsVzYcAGmic-MzV0)WdI)iMqZ%}*u_PWixxL?{_M?#&xW4d}FMN)R(`Ofz_8Fq3R zPxa{O+FiER-r>f62v;_TnR`$pOJpKZi`mdpS9kG@anbJAOfap58GE*>MZG`{orqCz zQLyw#2TMfM;^VE-)kji#dQh>YC_yh3s=2lrP23vE5@b{S)(tL|>WY2KH6`^-A!UqW z>tx1`IQnpfy5Rdm^AHdK6eyiWZ)F*|DcZ-_k}zc=6iJ+b@Lu@O0Xw4wB} zHTjpW*dUW8nHX%)mCnS#YB1-zoowR+LoFPmKw0O#=N)uUHLDozox$7x_agx`BmzioouqJ9T;ns zUhhsMocC386^BuQ)&8VDSEx4z^eVq|a6=u(z?`d(zKIHcZ$`@m!R-iFK7@0j>b*9D(TqM+Zza(;p6|$d#i`*GPnX z=|dUUImcm;4DV4D`;3WGa4kLWZnnodu)Ql~Pt2SNQ{tR-Mz|x)TU~ayH5D_&cTq6d z=*%Z&s(93y z{r^9mUr~N0LK~W`GaIr@A>P)it7lNG>3TVK8|CRQ`>xHkP2LdKRc_@tM72ZPK@*d8 z?H$S1pFU>ACYGAXC7#lmaSl-J7S>qDDy!eGwf^GNuf-qulLV6?)YPUEobH| zZuOnHFlVFh%o^XB8+|Qh*_6u^o4sLf_EOr3r`%EmBgDb-gZjZ&fZX|qXES9x{^l%-xyKt!; zvDj0%w(eML05^h*;{5*@i{*h8IG=BLY;x+bK{^JPa*Y?uJeO}>9DAhjwI3fkG+tHO z`||g8zqxO4nea6~|GBhr1hh z2kti9F5C{>cH9GfrhgQRy@7iL_ag3D z+|#(narhr1hh2kti9F5C{>cH9GfrXMDK+$*>janItO#yyVPhkF?J0Pa5A-MBk&x8Zi-cHp+-w&3b<8*x|RF2}9G z72}rSF2F6sorOCMcQP&=HybzoL(<2+f_oA7EbeLC2}evtHW zui#$9J&Su9_c(4J?qS>mxchK-YjDN5Ww;A)3vp-RPQ#syOUKQ|O@E*Caj)QB#66398uvJEAMRn?1GxKecjNBB z-G7+Pq*GIt+-2%R<^ z8{&8P^y%0bI0R0CqhRJqKHn6W4F-7UR34ZMmV@PBBiIUdf&JiaZ~zp7$|kNd$KFtCUZ6o5lu7%V?;I@Shuoj)BL1P2y# zAL#!u@t^GTjeyzUC~tD_1G_GojtzqYOX1%GE+fBSI1e723Qfl*!I4$dv0#AsS5L>v zz%DQhj(~0AUqgAoz!lT617HY@3J>~D!C%h(;K0YHV-?^C*b3%;g7OOwPJw|dDgQs< z|KxP69~`Qfj*Ws{SCju!$#)Ic!SF`X2S>mzFt?U`f zu78K?XHah5eO3mR-%ozQ(D%7Ni+qCtu=NMDA2|9DY!2oyw%m$-i zF6hf9zhD3?2XnwM7y?_t3a|@o1^dB1Z~zE#woC0@) z{)3bs41fo~Y%mJug1&P|9}IxyU=A1tLtrad0d|3{U_aOg4uAvT5I78ufTQ3jI0;5U z{{qqngP{LEC_fkg%fM_f4CaDuUq1FbZ~oQ{ZmU|19MP1K6gQ2abXRU=$n% zr@&Fr{~YB81EBw0;s=9ZE|?33z%sBL41-~?4QvJb!7gwR><34{0dNc)0;j+cFf)hr z!E7)J=7CdSIp`mw++YCg0<*#0U@kZWhQI@0IT!`Qpl=cBg8{G$%mMqs5I6uA-1&6^Ya1`|aC*=nNp#MD52ZLZPmmG za18YSmVBL0_$cAPfpPLL{+Eb%G4aK?4~(A3d|&WnzKii;;t4S42fOAo7Y9e)hb?dc z`3S~htzbFW2Zq4`uoWBzyTDPfADjdSK>tUm2QUbZfVto(SO!MHFgOLaf&TZCE*Jm@ z!EA5@%mv555I6;vgPFOc4`zd{pnR>q3oHlw!A5WZ>=NXwjl*CR92Nf=u~^_j;?KfH z0SCa4_|L@N5I@)o`aeMVz^QD~1w$Vs-HXW2IfMhdz*cY+>;tnG5FTs=hrtnW6byWb z`T)bAe+l<5q#nSb^C&+!0=9vpU_TfI2f_05DL3d}O#0#ngG&hyhQZtq6AqjLeIF&A z3n&*D2J^)K5$XXP0*AruT=D}BTu8kwBOWjWMwbu|IIxs-!2V^F?_%Nw`vos1AK*Y9 z*TJED>LHKvFQ*;B5wH~;C?cHjA>z#kS5YtE&^q$9ocyn+J;AO@t{0GQE%AX}*K&U$ z>4JTrzlnMT2exn>90D_o2-iw^z>%$72Xk+vy?H@tYX|kZg7Darjo=8_1x|sx!Q7ij z7Yu`A!h^vO_jQpEQ0&cCu)hZz7Yyvgh6P8#NpPT-`Ya**F7gLXfdk;s&BO~1^ijT* zYlLcC!1t<0$Oga=!1Cth&i4&p84 z`d4XhFmxyPgZ+1rKd|-d!~=GLzSZzx02}~wz#%XMj(`>5DA)={!9H*b902`yBOhP@ z90jw%NiY}muOVG92$qAnU>Ga|Tfs2c1-60xU_Uqj4uV7A2si?cfurCQ7zHygA$>3# z^nZi;1p{C?m<=|9xnLI<0(XPu;1C!F4}h&;6zl?hWuy-VzyUA^90Eh&2v`A*f~{Z_ z>;tF30nk4{`N04<3TA_oU@qwY80mvSupG<4Vvz|C^K_41nceHrNQ}f?Z$;+zpn4Ltq#@0JefrunY99C4Dde4uCn} z5EueSzzT2_Yz3oWA2{9pha1+&3PFc!q7%T%@!7$hbwt@X% zKR5smf-61v4)reJ~sJ-$VJq09X!YgNkSOJcLtzZ=F1E;_N(0?!G2Ls?Jm<>*XxuE|F(g%ZJIhYHE z!7{KF41--@8`ux_g9G3oI0TM>Bj6Y~3QmDhFteQW!EDg~Ey@oDz;ZAfYy@+`E-(b{ z2Ft-AFbp05Tfr#U1^PZt`d|PY0CT`0Fa(Z(72qh?3P!;`a0(m%{r6FRFaVB%+2ACY z3;I7n`d|<&2XnzNSO&I&VXzBq1N*^#Z~zE#!oB{_x z{~+ZD1K=o_4Nii&p#PJk4+g<VekOh3P!;$(6@o~!2mb_=72+B2pj<` zz)`RjjDmgO6gU9-zeD-K05}R}gOgw`=&vAsFbI}|xnLM916#o`*afzM{a`;h01kpf z;0QPZj)9}#6c`0FD@h;B2L0cq{9phq2eZLOFc<6sL*Q<(92^3}-~q4|jDlUD?`qNq z1K9a0ILXN5NJw3ig3h-~i~qpYnqNa1_i2C&66MUq$+05G)6C!7x|`wt``> z3v2`X!G3T690Z5J5pVBeUrRNr= z=j5kn6NI4LvOL|tDovtYfU6^(zzNt~5?_9L=8ok2^gw&ciuAVG$-g}=Jph%T?k`s1 zmlEW5!ud~}j{W;AJjpjYH;_ik38{qN!wvh={Uzx+?I}Bwo6`Mz_7zyaReA@xf8agS zvC9+FTbbTBJLNq|PJ$|fi%DWmGWE$vJym!zzcaZoJ+LDsKRwu3$_ow{pFL>s#cy{*(Leg&%>xMYzKB%;ZmT+w!!lxlP@-pX;Id)3Mw2Jpz)y zL+}US&vfT+`OPV%lEI>#vkS>#x#X}YO@*I}ydQY)bnLwe;diB!_NMNfRoFh;3cOsk zlk}59!VjM|9b<~5%X1wW3#AqEe`y*`3N87sBit0>ejwqJJJK_&2vDM;@l`|Zu+k!iPRE9s8byH}%hWz6#UJQW}unT)M2M!V1zZH_=2Xe3awqAhqWH$R-s3J`p_H%4?jI=+s3I1o zNji%OpSNsg`layY@ZR*R;oIO%=`SU|4z33;o{n9m+p#yfC_S(dk{VZf3@(%jy@ya_SEgi?Lm+2 zOV3=fKON14DpkHhd=gsSKmQoy(Z0V#?q4DLuvG4Ed>8kx=l+3&`&Y^RtK|O8?{NQm z@^Cx%k8=Mm-S2iKhtdPRGXCt8df6f4Py6hYc3m;fh!aXnew?}rxdx%-s3EC5Cydn3 zVdD1}Ovh%S52XL-dMDV9)IzCu8E78#R=XvMA~#E^s?nn9*d9l2(Ie>96}wVPdS|V$ z6zfeQ>!CCWUq|@X71OchlAh{E#mCQ9a(0Q;zf=C0Y>s(`SA2j{IcStv}}zWIy4j2#=|v!nY^4pkP;~T|t|QzIci2xvP)|gC2{I=LIsJiyr%zBk8fu zqv)|x(ph&b^2pxSwbZYrmyjFtykSN9U~)>eSuv@SZ6k`ih_7+obnI;D_i;T}lsFG5 zwDMgcQwf8bD@sf8B^ygrn3i&h zLU1cV))78$6Km62u5On8yemcJH$Gmhu;xt_DFc%D3Z<9VxFqzFwB!zBNtUN2-|F1q zo@rgi3_?fbrpb{tpM8mZ`9C!s`d!P0NPgMWs3gGOdfZ{s@o%1v zJtKrku2ecot_ssDl0Rc?ja6wSrdhA_gY|Q;ABex-8K0@gT{5oqrYbpL;<{tD?r#+- zr%5?T(lb7*X`|Bf_Y&V|{dBBD@~i(OoxSj74a~oeG=7L4JBiq{X+mfCC`?vXJ&-@aAOI9(>=WX(JDH|Z~XxxbA2`wjg?$(gd#v>Z34)JSe- z_Lt(c)yDi=6)WwyAOm^6p7BfassHAKh491he-IA+*q)sHHIxa~gf%~@=KAh!(=o}O z{U`BlgYWn73*c{s?}Psta_!c)EA4r3%AlH{OZ_SNCwvZP5k?(-dzmxdsPeCJwNqPC za?DsxYao^SoQnVtbC%&^LwqX|=lke|PZ(n>NK4r*!_7>2u-@IL zsqNul@@JiXR*-h7GB_^$GOH&n3=_Meeu3hv8q)<=7?T zWUq{qJ7xZ*=XWyLB~0CvLX`YJ#QlNWreo_Ixi{5=miw}lkhy;{TSTiFx~CF+k;kkP zsqg;j*s)Si_V^#N?VnW`jK@0iDB;%;e)3DxvCnG#wNvzuUPnl2OtRMx2x-|%9fU9Y z@^mcAJ-=|rxFDa$&FU|nVGe^jRDnIF0{Ofe=HmBW>l73^#W#;7b z(~?&j%fBKm`GF&(Zt1hdD6h6}vmPMzum41!mGWQLcUZr$Nl^G|32)%H!M7UtTj3iG z{JrpD1HTu(!oz2g?m_r+`1eYFl-#OuoJqjP9F;;4U+O&MiEvD_oj>8{!-ov~V)#4* zUkaaV;H%+t4E#3uYy*EQe9*w(3m-7>d*L$;{6ToXfqxy|2QR~m{U_y}b29c5?ds*T z;3wg|^|KT{YT(zwj~Vzn_)&PTe00DcfcK_*JN$@&zaM_s!0(42GVq7s2MzpT_yGey z_dSf)27Up2zkx4=?=$f0;kyic1YY`&x4b*yTMhhO@QnukA^5O?e+s_Bz`q1vZs1b` z$iIP~4<9n{i{bMOd?|dcfv<+oG4R{qvkm;M@IeEAFMPnj?}g7a@CV`j2L5$;pMjrq z3i3ZVvt6>_Ck^~k_^5$j2R~-u>)=NXd&A{)3Z#D3D!8aQChv35o{weqh1OF0yxq(kT z75O*t^Wj4VeldKWfiH#6HSpE&IR<_ke71*QfN0(dAB0~a%9;7?PT42gA?u;-soN4} zPuBRlm++?i9E3OJ=XH2fe&)=dnI9P!vfw2@UVXI`K49S2!DkxyI(WZh0ina2jO!K{Oj;J27b=_kbeW81s^orAJ+#*7nd~Qp$C* zFfenWPnI*(y3?)1cYtRV)P8b&U6M6jy>7_8&c1tI@`y1u%)4rn;ZGX!C;2`cq&z$e zabcnz=~-7-`Ch?d*)ZwMT+UEdsTE)8`|0oBn~wckqFok`&z+lUdM}&zuSo~ zduTd#2zyt?fnGU(uv7Nq_5KX&6UjGv)&WR@%o6{$?St9 zB|mDcU?mo+z3wGGIeY$1-CpkfDz#52tKng+-RxplQS;N*r)L+q2y&*|pZKPpXZ^*H zKedja+DomUtl)gdc4PLe&h`#ut~{czIW*k9{;{SPb)-5~U6nEG3V( z6JHl+>93az(+<0&{b#J>ifC5NSjLrc`yls^aKG1XdmVll-fM@=!Dt>b@LBMK27W2L zob_iJ&H0mb*TL_G_m10j@cjn91HR9|-wrS3_r`NSe4Bya58rCw55YIWd-Hi1K5Pg- z_e{nsL-+;o60?iC+LM8sjTO>&q{8yIx^Qd-?P$Qzs@>~@q_!8$bI@x?i9yjob415l*|nezeSe|b9giq)|Dzb3aJ? zz}M@1w#$(w&M?&T|MD~zjXCO5tj~!^c?${ONcgWxc>RZJ@vVpVPw`BZaPjgcv!$$e zGpzBpL((JMH4=_a;+8wLpP}T=IhRmu8Z-*IbwBZx6HjGgJn`|?Ex&o6Htks``J8(; z`jvPd*74|l3C6L6eTj9}41zJKNa>5BG^$DORM?EQ{!4t5#K(4p^C$JQ4Sov#X!RrQ zaTno&f0~YcL++-2b|$ZM?BV3imMEaF)I_0_AWso~H{tKl;obE)V}GC``37S*)`BJN zn{^KPC%#P*pZ=3{mcobr%>JmOFVr~)&v@_bzsLb5!*FjUgemIVNqntuO~+(;R^+8U z`4TN<*1Y&$ef>SjT=&SyjB=H!U7eY`QmfSApd)SfSo1$BJ?Cwn9h7`1Oe~=!93GSYa+v$%*~GW?eQr64 z_dAup;`GMkUz%D^_5TlH@A+b}dn6wHC;WQ&0r=yk{Q6JE%?SMNB;GwBoRa7G{90=^ z#JMmnSs(vX9(}*`oBO#xCz*E+2&eRly>HrJpGZ*ke~@q?!i^nOUUdEErTo-f|0QYL z9Jxi6(1c`}ELnz+v~%G?#@|%Vv>!E{BKus`*PQ6+DX!>}UpR6zE4jRvbaIc0#r~kv z*(v*_dR>fJu$U!OBo#vL*xh=@?bp+EUkCYpop>gXjm6G57LSq_a-r=iZAauKzvQux z^5u9yHWlF5Q2A+>d%_edCNWIPg{g!pQTMITdXi-C#cey6`S6Lc*jJ9R^5K@hxcw2| zNBo-D%`@$Vg0!oQeCUXLi81`@w2-j@)H#N2WN|?b^R-iW=3&-5=640>g??;Ih3)1? zj2AedcAr@SMX^hL-Anqpr^RCH{qLB*I*(sKI-wc!GtQYGf#(#up?W!P)@Zy?ES9$6 z1~r3``dYt;`O%rN*ey=`#>WSb{*(NsykTx%M46d~At9>rGsX*OM$tb9N#Fk=o-N_G z{U`kE@ILs>HVKyE=A4H|FVfyZ*l$%mbxw0Zv`j7Yq7R3_m&-Gl6 z!0(3tg&r65x(4gpdVDFxq&?{ATMPr2K)DV15^2eVGhO*nZ z+fBa1nK;s{EASMkxmbRh$k&|nv5ywVVhslQj<=WYj}y zkg@oA%lQ`|Up#aFX~~!Vn-4CA&nt+<9u$ra#Cf*?b>3|y&$~daVp^5B*79+vb=m`}-dq+LCRrR7KD zZGJBDvoaPtNz0GkhZK=aP40EQJd_!x{kMAzNb>{f2d9K8_;6lc;vUi=o!gq>q8}W5r z8jD@&+od;ehv$qAp@TUpJ(8g!sioI415-Ro`GKqpKIXP!RHwGI{0h@-vJ*q@VCPU4E+7@ znFfA8yx+hdg7+Et!|+q+H?LgHy%_m7@C)Fh2EGt}%)qaQA2sk1_yY!hC;W(kzYBiY zz&`{(WZ<8IA2jeU!4DYt)I8+hz|V*8H}H$$`wV<3yo?v#`mBa;Gw|EsTMhiJ@Qnuk zUih$q-wR)1;19x=8~E4Z%MARSeB|H2XTj$g_@(f<27VoUj)AX(&o=NK@IeEAJAA;v z-w&T@;P=D(4g4W^pMgINKXuv6_L{pK`8V(j;G+h<5PrH51HTkL*TAoX&oS_I@Yx2w13qZrZ-);U z`1|2A4g7w1zkxpl?=$d+;is4{d-c`aBIMt|FMy94_(J$G1HT@A)WApJ4;c8J@FNEP zF8E;s{}8;q^Uj<9r{D(-{7diy20oPy+}#F#KD^iy-uM^8_Zj$7_^$uc-r2{=QC9iB zVt5G}wG9zaQJRPn1%~dP$;+&)caoV51oP5l28f7sce-n4n)FQfcK1vYMQsIUqv{p7Xp^O;-dj5N|~AONj4|;MWkZMDRO^k45l(#Iq6n3F6x$_;bY55q#;H zq?guM?k(;8zmgAHi=WJ{!UJ62CWsKTLckfbd}Rc`jCeeP-$eYl2!0pwSOkBF_>u_z zBylf-zexNAT7S{;ZTUOM|0DRR#Gi`b1H|Ve_=UtDi{N$Qa}oSX;`<}`t;A;|_+H}o zM(~G;&qVO2iQgW<58FikAHk0&etiV*AwC_!HxW1MSxd>>vYB_{s==8S!`o zzlr#95&SOVu?YSU@g))bN#b4vf06hL=d{u-LbOc{YFJhe)!A~OI7s1aUzBYmn6Hi3& z67iK0{4(P42!0ds<0AN7#A6ZsA>vCS_>;uF2>v4R7ic|ysRS!ZO}tuu4*7osKb81X z5qyC7d<4Ic_+t^gPJAwcUrBs_1izK|Yy{s+{9fYE9_bX|(C#4%9J0V63mme*AqyO` zz#$9#|7ro6&tlZU{ zRvKOL2U}t9a*S zI6e;PVx(S^^8>Zs%wc@O%p=SuL-S+#&`Z;^7qbbUJDrcE9F3#-_$W?1x!<4ZwN!)5 z_p8kI7aU7D7I55k8lV3oj!)vlL;oJKz#$79vcMq={6A`e=Jni<=jNrJftH? zr;uKb^jf61A-xCb14ti5`YWW*BRzti37PE}q;E#L8tEX?^N@}pokDs!(rc04hV&k! z493GJkMs!hjK6?+RMmmV}JftH?r;uKb^jf61A-xCb14ti5`YWW*BRvA+ z#AA@Y8R=@IgGf1-w7z_ExW2~B$1@IMJF~z4Z{jP@-7z^)pN#i(t?lYLEj4M6lJ8IU zbR~May5GXw^SWw##_PEql-8@9j>+Ccx$bw3PE2;~m@JkGrxgpHJsQi^#=Ne=o(Z~= z(|VQ9O!?JXu{;qv$k4f}U&@&auvaP7y{_U!k^ZgwyXoH%I-qmqLav_ky8N-sNHsU^ zXT}P2tsIf;j#`bc%jBxn+#bG8_Akzpuu)*{M!Iaya^uB3<)%#cpntmTjrk^4SH3(x z?oZSY!lDNjG2=ut)(UDzc981v5r%JpQZw9op2kvgnT#JLwSNmoGBO@q5?skU^a{H7 zGWuVxm+_^fa~LR^`x+f`y^Q<%z~y=wuSzQ8QxdbAjLYTNG;cFjl%$7-;Y06}bnIUL z*jreWq~_b^?xyeGq?7LTyU*b3C4HElVYr*rpRg~`j$wsXJL*Y=yCYt39! z{Ohk>ul4PvYhUSHFZ0Xo9qzBM-%rl?Vff$QU_P7th!$M-I<&DdJ|vWP4X@5|Im)nCFS=%%lUr_*Y6iWq;YlpA|0D7 zCKQ+JPf=WoBdJ+F2=4939{pL)|KTEtbL!CEnU z2a|PP=}BA+^Oz@bE6iWjfiLqUPKD)<_9Xs<`EpOxmorY=PzNH|uD39eBf39BuX+bChO#;e9YiHo?PJNYi&5O@y)Bj?k6L(^>gh)3n;A?Rsb z%!2ZpI6nlR-pTxXtj7DP)qk8ffAb1Uq+k1Y@Hxewhn}qY$R=%XxBpV#N8?6Q-X{1w z%(@)BQD%Aj+ck8}O5%&W*LZ2fCAse@mcQJ)>`kmd*6(|vCtGDb_P1$B&t~DKA<$-j zYlhNyf=|Dnx&7@I;#Kg(<;-PX`C;(ctC`#15+V6diT;l{}J$};y)Mt-w(?_1MVsQC-6R1t|O`88@t6G59?VDo>lTEg3mo1 zmOl-A=2u)G`)wWCJsUis^q&tt|3AWd@}hr+`QN}kyTIkSZ$J3$;4_bf_1q15RPItM(!#&O@^672A3X6>=F;w};PW>! zZ&H73whw^!Wto4TvG-~4xgUk~e37{6r{d_RpvLH0Z%Ma8jaz_Yvf zhGK^$lwniegpywlzM%4RB6vf^r7rNfBIo~$DA!rweahd4!JA4?4m_>$GY&qZ^79_> zxYF|x@T}t3fXjPA;&0y;UgeD2Z%fneFTtnPeSZ($r}Ueb-HkmL)OcelEmaskt;%&A zcuckTH-XP6`6T$9iid9(dBxuWzM%Ma@R;&jA3Xge+rfVOj&?5vZ|-Mqznw_CSBoA5 z0BLs*f-k_&Kh2kUKL?*y_W2$7><_~J{~zEpN`46~Ivab=DgJ8kxbn9X!Ly%b{eR1e zcN+M-x^FMIr}S(9Z+wjvJcx2-!P8HK^FJ=~%75Mio>lxK;L}gA;?F_;poeSG-19(&MbBLRGm{9RB3*J=Y`4aS0)P47WPb+@8@Q<>6?6Sy&JE=cCqjN++4D5; z>2IV4}UgW>Z{5DR! zuYu3p!$8{O_rVhwC$EQnULd}R{tBsy=R9;^H}jm=`nie&%fMrbzX5#a<9z)`pnnZ` zTFLi=Pb)@V>{||_s^H{&c?FI0} zOPDW*eHJfc`!v;f`<24)=lnD)f0Nzk~&HQTlHM@4J}ub2*Ls&Gs$PuiC|f;4^BT_(O1ck67jlhab)MN#Dr^v%eup`rin? zpw?AR7kSlxy$yU$-S;f;ijp4&pI7D0iXN;hQnlLc!{BM9|C8X;ihl+?`$4|`KIpj* zJfZCNfXJ&j_5<*W(mxNLR(hTmdBtB4uI#y(-t#c+*HixgO7OIje=T@J`OnGVO~uVO zS#5m#3fJ!?u!H#~>!OI~FYko>w7RePR;$r7t@_ypc+7r$$MfuO&eA=u17A?%kXyiK zl>RS)d&>Ub0H0Ix4}j0B@#hb~<4VswctZK%)8O*n`~|SjvR89?`;?v&z#I3mJ--k6 z1b9s8KLfn-6&Cy~_2<+3QN$ey`soJ!h-hO-L(5&@HqTA1wB`Tr=MnEzm-h8 zUjom5Bb?9s!Dm#z_7M2A;*W#Rseb>L;1w00e-FN(V*YmAhHbd!VNX?tP2-@4+t-ZXUqVhT)5Mt>{tqxdl9}_zZYl z#f@)*H}H2IZ{yo|^Wd|py*v%xr}X?0d|t^PPLEnmJ6%BhOhf+)@L4tQI~}~4XFD8= z0rXbzgesT$cCC$9DnCW=#yeQg^SJN(z~|L{KMFph+V6GXX;qK6fHyB?#XF$?zk|n= z|IC3W6#t3nSNu2Nv%g`*_8aB2yZku#=RW3mJ;v(-kI!;>B@Xm~XH~tJZ{QlcrN6}T z_P4G{WmfoR)-U6P>xC=(d=5OJ_?_TQb>DA+SCss}f=~a2?|Uuk{kPzaEu7C9pY~oy zkGgIAS9(^0H`IN5z~gta0;#XF!R7Ch{uBDgME}?MzP|(ikmyl<_;HcHfd$`6&oj*S z1@JyKKL48NQG6fx0=WFm{Le*?iet}+9&{8N`L^E6sp4$AxS#WXG$&phyrJ}%Z{`~L zc{R`K6+NoFgW%H`P}6k4Zdu`~eT{=BRK4s0&#L@<7(BL*GyXRC!%f1K{(k_URr$XM zys7m66L>=D`8SbQdY%BUDEa>d-Z#zV-wrz*{yMZTCBF>ZQ+|5_cwF&Q!Dm%`=oPNY zwE;YKHD~1Sj^wlkKCkpNz&+)MR}nYs1ASNrknw=|=C6$#4{*KM-@v9@+yOqV+SfO% zp7!^1%(sAzo;fwnoC9y5qmy>}6nOl*eBS~1^B=%xl%7S$v;L+U|GWY`ru^`=;Im5p zWbk>#d%&}5e7g>OLFH#Nc%PELK=eNt_VbIur|;$Z+lKO90iNE=JOzF;c;!Y0<9yot zitq~r=fBPQmv*%54P35<9_NF{R6b7?zLyQz1AA@;Zz??(fX^#F3cjH7Ujv_2 z@(qz!KPEvLbndY|wV;xF_rzl&gpe;4_$F!&hqvnbB_&#L^q9K7!*EGXlmw}Lm( zuJ7a1-kIRj?_zKh_zv&}#?Q1IVYd%~%inWPfPV|z+rjy4ApbuFZ(PKJ+aUiU_`LGZ zqfSKJQ1Rgy@QNDeuK-_A@~4AOEBUt(H~nTzt*dWG_f9S9*R8o>p<@Iq-_I{~~IJ zrhR4AI?Ph=#Jd++Pq-QW@J8^s%FpTG(@Ostq96UKjDNO(H`IOK2|lCrjDRmF`&Yr6 zO3(Yi`>-xOi2Pp-p1{0}!j#?qnfNj@Zac&zlD6?GM4Y<#9Q)4qo;j4 z$#QzGt@QVGklzOR>`~$TTns+@(lCDy`21q#@_g;1;4|vJpSHX`pI?Q1Ox^cE(H~>| zScb6QoHllAD*4}%e7s$~chpI+^I_rq9}7Nxc9@@TdAp+i4*cEFlUDhe0-sZM`xtni zlE1Zs{;!FCl~Pxs!419&s|?cTUysvEUVy zOX5klb_Tj_o@2*jBsV=dphWU5b|-Q=Vziv)$f0R&%hsO zSZ+7-jp?X(xWaOZhxmgiDQ`~)`HhfYfPKVIc7ac;{QSM>SNs<6d1dGOz?&*R<{Q&d z`Tw7g_f$K57JLEsm2!D+VLxdo{VxMwPQ+B=!yrJa31MaEvJ_cSM_kSMo1_&z`~l@aM&x zw-ZibJH%CfQs4{9KK&xE>^y9FdwC}yKdt011y87YyrF}hFG0Rf+4};$6glhFD?R~Q~GxikGHGwF7KfK2I!el z`MINm{QZz`DnI`Pc%P~-?=-g0yz-M6cwFWG1n?}{%Tko(?cj6pbBV({EpIRI2Sh*Q zrJY{gLH>5g_o@8c*FpY!kY7-K^|KE0i@Vqko@!sq!5hk+DUnz9JR3Z#{4Ha7yB%tf zZ^8~@&;JVEP?0nd`SO0umn8?^f&9GE|2TM4@n3__DSJK-o>ljK z#p!I%=0*NWa(+@6PYwx(9?9qXz~|L{ud=+AZ`o@?-c$L%3p}RmzYn}m$v+N0tL*>3 z!5gYvhp#f_ZQtHRoR;j`wslsXMkQy3Po3F8`zZ&mT+LmlL=BmSzeYJ2p>4)R{U zTCde7M@G8xUM6#P|F+DgjYGqkj92ih{%EmQ_p6!ucqU&ePxv)20%bCVa%Qwt-jOS1 z3iWcemdQ=-_UPxeDkZ<}7rIvWuIVPt5keXB+h6<}UK#o+uIe6-fBUO2IX=FJE^&@B z<|o5KqNQ?atB;hcl+*I~j^c!$spRToa?3m^6CnTu=m6KGRA2mGlGyXzaO)pFH6J2F`+x!E#T z2y^q7kc)!6jrqAsrt0TPrE=btTrHBhLLpNxXG*y}R9_{kHb*M8#+70be`3m&NP4w; zAv2XL73n9^=x5wA6Z9i&HTN=7PQTZtRd@HeGC_7p(w{It2N$R)<_npEProi#-Xm9- z(oa~OHq)kR{AxXPdOSB#9HFboQ%Zi#&2Uf~WR!w6JD0tySgYo`lB-G$R;%E7eWhF_qlOMM1LoW|dup>^tK~-h4cmvq zBK?%Xy6*_~Qzh=m<#)D84zPI+Ml{GEIqgW<%bz{8bqnRKlB?F}r}O;XJsz2Vvg-4h z%((R%9E?uA<->Hmb0w?Ux`0;gXfXX{A_VaaStKI9p@yROvXMTLp*1(i? z#Zbj%GK1UJZQhXCuw{T^7Y8!lx5mkEH4ND@uCu=&h`3Skr;610Z3AO7P3!5d) zv!8VKgFs_~Oojr%PVsAsqvF`6-Qs5voxH%cHX_t@%x1cjoA8Gwt0TF*$}W`+1}jov zFXky4b4#k_b0*@!PRU-!Xh|vxE~@(D6-TL|R!$QMe28lS(-?*W*~Wr@JMT>~+kXT;VL1Wc5yk#zrfVW67ZwQ-{0@AeCn6sy!w`^)qj zqw6*gIIYvsoOEg-nRIF)m2#}z(+lgQO$=&Xo=SE9wHh}WgV&`}Zp{Y09nNN`m-p(W zTFbedmeFQ>cz?R;*Jw;)+O0Bw(#if>Qxz@igv}CUFPU_`$c-M!Rc`IEw{I^McSJS8 zwLxExZrY4kFmws}1IH+9gRU9wsu~|!W?SqqeI$(^+>B8fZSx%3m8)1^HxB6-5zW%c zHI!piLfLE6*=BghKONO=V%zgOP&amq%XfL>X-#zK z;Q#0$^@y~UlVrlF+BL4t6K-uJoXoFT<2I|7Dw@&-1zfWVGVIdE?+2^paqjF|Vky^- z$&i=OUEtX?NT^ne1wSJ;Fhf$RE;B@<-YD;?bF!HV`jJ61x|NGtqc9$C;3l@KGZPZB zCC8lm;|bH%Wz<4`GgsFiZvF6Fvf ziXsZ%e&a-q=6=R?HcoKJ48_rH{s^r`&?J4h47cLb1AaZ1A5$KOOrpHCv0S0N%LZ(e zou{@z@G8&heY6c7 z&}lo)rh0Fhyar9U*QtRdRebA&v%gC9n5KOPju+L!ljL)OrX=}R;LNRADh1IF z-?eVq8$@lIBA8hz+KU}LtBDkymzs2D%@K8LhhpG)o)V)!;5nw7o#862vII6r_PSPZ zy|c%$V9H%-=y9sP$FXfHC4*FIv$hGCP$dN@__=(&I7Oo@F0d1odU}G9fE$w(%u5**kTW6?onL+s^t#sKrfFISiTJme%390MpYkR}PTG(CM zX-h+LRr0Tl*Bx6VUB^vQ5Hoo_fNIB`lS!v4d)9ii?v{2NfdIFQA zQlYALjFqD0CW+osds0C7ZJ<6FkovnTrb^gjxz}|4PX))dve04M@_KrrKwWm>z=7B< zG;SQHb<@F)ok21b+T9Sm)*X>0g91vw7BP}Kh+cs+qUZch>sZ?@6~cy*%5Y2SOy#gH zjD|sL#U)x>C(*|=t$o2%!8$9&R}Kv&@9PH1y#iaIxUpp4<5UjS4g!1Y)P zvv#s=CYw%EXaC(uqnIFs23c?#S*ylfyQZjlu*E_#LIv5BYyG5a@uXX0p@$2hXyNn; zt7Yv~^4-?zC}0GcO_FcHu3~2Uz|=e{$jHZ^TGFm(C*4Ns4nUIR@~unOIKD_Dkl;kh zZPqC_5~SSLnhFhJ$d{4ZpgXWF$M_H0#%jl_S0`!kI=s1Go*$jLY3urRn=)Gm2ZuHc zXNK3U-?Sm)w(^$mm=)qy+g1ysDi~}s4?0`IPFAF~a8;mV2>WW}97fOX+yFk9E7gKl zN39L+6)a8a?q{{cADW`jXzZCu}V%>9BE8E#HBYW}qe`yhOT9_Q_BUDn-Y za?kCOZj!GSEA(`ivQ3S-JXxn#R(!uD%{QSZLhI>~Y)IS$9^&WciuDas^km5#+oyAe zY~%?u-(}Ez0B?sKKhs+o)rov%Ps9x<2kT2z+J5s|OOExy2x3saqx0m>%WNFpOzl(N z;-P?NUh5e)tI|Os2hBPg9Z|Ig&wH%ZZHGu1YRgZ}&(rD@t&fEbZWnQ=$duC|I+HJ! zf|V7{S-M#9&3hN?bF}75(?M&Xmh}16qIuPzw$s=+SI{=tI3baJbFNbH3;bYUTW(_1 zE|gLB!&MwH!$3VrJ~#v0=)oUX5g&_N%41KWZMr)>W(~ZJ$1Bl;!8UC}2b>mBru)sn zXuz-3$6#1nKT#ROQkU)~GQRy1Vnj(gwJ*w~J;iy0t^L27q(`3SGm15jGGl5fV}hct zD!LehD*J+g&dmtDTvk&T(FE5#X4abE;cgSLUbA60`C#4er;j?)l-0I1yLuv3+fU2H zzGq)JGi{0*j@HbMdS21rWu7ORs<#S;#;EHm1P#Hq0SXngys^{7iOfi@SZb+ig^KX9 z@2Fp&EVg+t-vN0}o0lAHSK` z+MbNF0V(hFK+u?Pq%v8r>0EKe+SanZm@}>+PJ}>55ywVkw*H2Rf>lUI#^=#D(V#6) z1E;Dt?vGP=(D#5w@iyD{L{zvEW2dZ?cWHGt1i>!?KQNPxz#!%zB!KS4RKHZa)k3#K zmjwq?ZL!0w$NIz2R@-3N=MQXnR`peJX3m1=d8M+a_j@kZ)?$q9VHxW{(d!$o>|v`)sL z@&-YU>c^J`Vuo9z%&_FvBPJnNC+aYpACRLCJl+j{}AcI&M>(~m|p63&Rt zmg%OvLdkTJZ53~0HP@vTla6_u?7y2<%gvK$ebGAOY1HYk>A0PROBH2KsZH0Cc4*RH zE|sfnKYsPJ?S6SXa@ax(Gggcnx9Psj$Yx#LJU!rH#nevfxPoj+K0_5r&O~Dc<7(vd z^ve2##BVxwW4mLRRxP(Q1#O#r(Y#`4Cb2eKP0P>FJ4v19uiUzAVl9yHu@W1je1sB} zm3NX>yX>oxrp;!~p2}>)Uy1aWs0L)}#my%eHI0Ar_E6oAQsElXvriShAj8dJrE+eK}##mYeOkj;j95YHnh(l%px9SsiDUEt9s! zPF5kg8`+>dS452^NFj$CcwlY@C*Tlz-%iEz*YhV~mUb&An%b(#)WHR~PIWv2-FFmPqMqFu# o>SHO3W|+Y%A>fX$BLDyZ literal 0 HcmV?d00001 diff --git a/ext/vulkan/libvulkan.so.1 b/ext/vulkan/libvulkan.so.1 new file mode 100755 index 0000000000000000000000000000000000000000..cddc4d927936d7cd954a7c17a6d06c1fccaf848f GIT binary patch literal 205790 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
      t;;LD*i_7PYQ^w=L zcos&s(B9B)vfX+VNkJ|8WleeIyknE`4F63!oZ#502&O0as>_OJm2w_wluRNXpBBgHCWOd;gvOY)(!t&5+D$d6?;)3NfHrBRFwaxG(gd1B1g%dG*(5iG>hm$ zs0Lj{@jRMDiD^)rSdJE4mzD@HQ3V1ZX`9pFrIQGbne@@MpY&W2ahD`v9u1qWy0j!- zfeD6^+aWb!%tR|#O`0ciS53BHrbu&WOvt4fd|5>$M$D?pn=O!gNyUXVl^0%2w_^HA z;cN=erMpY%ZkD(!xd0}mul9o4+)FRGbO?WNMk#EXVq|ecO$}e6u*|^tN{`L=Rm>@# zM`SscF&_8GQ8O;S@Zt-H#_unQ-{lO6-zM&IE{lVgTsVX;;lXt{1z#+n;G2qXcNXdf zzhpuae?8fKnm~y9ICg)0{D~C!(i-&SYfNeK*zPPQ#bW*c|NbA60Ixif=e2C@*J5!1 z@|{|a6}aOqn`nU=ABwM&;`@}BV+$e8(k8`wrFi~)&!p!|j*9Ot#do*dCgLf-`|o)W zD~88eb_%R7%ddy!YY~2k#iv>him>+-;y1`JCaQh^V&otpP1wPw^HwwJU zgj>k*51(2SULQUk3+)gjDqpWl5jewV0^MA{CNY!HCNzJuSp+8q9m~e73124R8zsC!!s$GS z@mV3^#`zG6Yn1RZgBaH)2``ZFh=kLb7UQ!;!pUdU__Rqlok1}^J0yIV0pi*&;s2Cy zUBWj>c!z|SO85~8FOqPJqzA-M%3{+be3C?OmvG~33q@y0_;88dA>oT9JWIm2OL(?~ z=Sg_3gf~cdzJymvxFX^85?&B@?FX6_yC5m1q;l}wT!W$&~Ndm-Yg@k(z5Z6WtzhAXQD9+B{SC47s7 z-z?#65r3ac$S2}CE?i;zCglrC0vp4dK5m_`RgfElusS@5G;qn>P6%t-9(Kkx?I}+X`;kQb7M8Zc(_!bEdNqC!t&z0~U624Tz z+a>%t3D+gOM#4KJ{5AGf= zaKD7-NO+xuZ;|kN34d9_mr1x&!W$&~2?<{z;eH8kl<+zUZ<6r8N_a%V|0UsDBz&uc zw@LUE3Ev^%wG!Sg;cF#am+&DH-XY-=CH#nlUnb!h4ZQvL1ePM<4hc_{@GJ@MF5%e{ z-b2E3B|J^S^CkQ^30EZicnL3(@Lm!=Rl<8q_)G~;m+;vVeu9KoNw`hIYbD$+;eH7} zQNrsa{3Hplm+(FkzD&aVN_c~WpDf`kB)p%5H%fSa32&0{3<-}&_$d;;MZ!;&@HPoQ zO~Q9b_~{bfF5zcLxGv$c{n;Vm10?z*67G<2i?E}p-JT`kX%fy`HjlJR_}LPDhJFt-gkLJ*4HBL!;Y#3}G)3!PIBB3o2}Qi! zbvjtB1U98@{~HnQ*r3X=+qHn8v-3X|%K*0b`fbEPOGA zNfkx?EPO77Nd-l#Sa=|XN%cf$vhb-CCY2K{V&Ri0OsXcD&%(!3m{d$On}xekm{d#D z!NR{xMwnDe)Xu`+Q%3Pf(b;esm@aKTKij z^3fs|zL&z()uZ_=d?$sei$}9rcrk^kYeyX{d@F^iOGoW2TuoszQKJ?XzKO!rwWA%s zvHGVlb?In33;&tIWNJm*5LUw7mjO`1BPicV%HSi4`n3``a>C8srf)t5(Y~MF z*-rfl^u?T>(lO|pkEAH-2Bmrbm5Q}Z*>=Ro9zOZK3H0!G@AuOcwWaebdfq=G56@YA ze^LS?`cK5&B;@Dqt!N{*qf6@-fMb0&{!MS`ZU>?DhmB?QxzIKs2$rd^rEaJ#r#HY&7y`Pi>Ux$3P$DPbFp4OVMu6AThZt7VyokipJt+{)hP4 z{~PHH|oU9 zY(@2C=6Y0DX1)h^iqrN$i-J&^5_V-eT2nJg6A@sy1>14!R)5Ud6}u9`;`OVxDJh5y zY)Di4W-3~i68hGAr4riZ?d=Kw)moUhuiEEPfA!?;u13Q-sIUD6b!gqF_00_Yl3l$) z(I_W86)s96Zqo3$ubHTO6$B4?dyHyv4eF%fVydFfhnncv))RRofs0CJaa-_Ks-J5c;BT z^llbQFyc{znMJtss7o`a;_A(}4Gw0`#GP&M(#$G$y+6~>u8(Hcv+Glt4ea`SW+S`4 zk{MywH!|CBEm5@8L8Ph_B%K8yCqi{g69XlDU8chm_GG5H)h(>FuUSCAYLaNO5m?8O zFIrJl2U5YcHz^(>%FtgzRgLI`oaU#s1TzPK-g2nB2R*o(Z=j;_{7RHdI0L?ml|`GV znA4`C>!Cj>+66z8DpJ2tG@nHuM6$xodKx(O8>yCF*CR(dJKgHf&;_47XtlgXW0G6# zfX3PfG5_$i?V)Ddy&H13*@E*@sX!yP5*3Yv9<>EjUt&;_sT5B23Q^H`%Bgk@OQsqK zs>0A#TW}(7SeM9fYp0;a+Jc>sTVW_-3x0tcr$2YTE%YI~tF_Lth2F%iJ3PA^7@7JI zvfv%#05}NlLloc%1k*@~#z=64!&3;R0aL(RIef#DfN9(ja1)1X2p*V#>EJ5T4iZeG zh@k!(hx=37G}sEbj>Ah#Y1eZ2Aye8na`<<2kk`m!5Q$7?@X&iejXq1dAx+OOHL=of@`4gpg;qgGNw%@1Hz98=&@1uSWLDbMy17e zC51C$Z-L4Y+l>ENvGq9-*kPlxW2^B$w?6hST=HYj;=dAmQqfXkkK?u|whaHL#_q-c z*|DYgKQp!j4AQ6^y_E(TEl@}I^Z0!S-QU3ON7Y8JIhV&?gOn)ED>=XlGrwA~TzYz>K4YKnD$h`Jfg<;6V(184eTy*VD6cr6Dj&|JM)l z5O@*jVIJ@Do`=C_RXsK3ip;cvoUH}OQ~iVuvWl9T$yyW!KAqlWaH#t!uyeb?e#VeV z{3V9Wp%^krEEqBq@=~-jniU#14=UOv`hoALGA`kxX3qB*HJkK1fhFjj6P@ahhLAgu z+W+T-JQl@D*covl4~CG7?(R~^E_E-7IE-W2uF#;>?tvB`%uln3$toeCkm+dHC1(_m ziOct{4oSY-5P(&3E-nfA(sakLp+9s^BojJIQ5QBz?XF-8>OZvI7W^IU!>t~IntJ>$ zFy4xcsi_~XRcb7&34DQc@eoT5;W`;lwTcDLG^bBKb20K3Cu2B2Me z)L+&?JHiTX?@$JB@`Ot=ZSKIH4v)G|zwjW)@>+fFQ7x&%k<~u^8wELsB5t+7;;k*n z*+YqCflAQ|x1j0uX6B+xZMTIMP@3V=9n%b}nk+ZyyM;|kIQ`qlm~KoXW+TowXzHck zga4$?7{U6m)l#T-K!0)?y#}$IFm|7yS)D}Vd;^Je>f=BcEu*{U1D&1qq#nv(-}H74 zw3L-8`gM#~DuOrDqxo|k%p~(>DC*~m)|8E4&emybC{HKN+#tg*rbR!-LqcDBwDhg0 zUp5VbndiN>P;+L%sPm3=Yx#Cc_5ww#r`LF4N~z=>?>i|roZI^x%sbwDzM}byh#(a4 z>4lm<3(`jlzIBC~I~!^Go@c4k5Rs4kG2N8=FV?#}TK59*K)FtGYgL#N9rBJ+w9zd4 z3zM_&6B{Ay3*w2`UU=a=T!P_uZOD}yC^%W7dq3`>( zvok@HG#`h2o*g|9&GZ+y`U44Qf*~NMAt02W@#5BwCjp%p8^+qjvH6qav)+);3s8v0 zd&MT2=s3s4^Q^B`NWgZe>Y+`kax{9Qs&2lW^|1|F{RgsZrq z4%vbglA!iWEM0+)%|$g4@+DExT)j~JiKXgW8NCES)_*9wnMm5HwiH?q#Gch>A%J#k z=$Ge*bN%ug%YK)lS-eAtjR9!vii0}Xc5k1Al9|@|l~@lV{c=Y%u3x5^*S9cXRo|tQ z3Mh$u1zly-c+`c#)TKdm5ys-phm439=7 z>{H4kQ?Zci4nLnt*H|CO+r6ljVR;8_!FrHV55f?%91?`)`jV{coQSlNqi9(5akm!W zjom3!3AW%N;!;~I1Yis9W#Kg>yo3i!o7vU6>6n+XKMio z8S>xbRSR+s2|2se!$hl;cM_XQ-pAG1iiV;p;oc`<%}76=%vqi)Ch&OPsVz)%Z!3ky z+$0|ISofi!G|}_y5Q39>dLoL?2 zF`bl2(-h?CebDx5KSXpxM7Mz6txTQr2j%SzY6PbOP7Ua(>XhH2l}JUDF8w)7jEwQ2 z74sshi6+E%N|k~7OV~SP?6CHb3wx&#di>-iR@vNUW{>Jyp}Y4Ak!`jGQ)sM0Eqq8= zT!|itD+kGT*^X77GU$`xnHF2{Eyzfyh<*ANo*))vkQ#I;G_h4t3mQDy1#_<)h$gj{ zdi!`hPa0tj9@R#{4u`5e6pE+?Z}|E~F-^2Ez2JoOT*G{C)J%4f3f}7}-%l0iNtt7( zMABIzzE7NoLTNC`tlsyqO0@#^OQT2KuYZ9B_fQ0hQ=+Skq@3%KxTX4EEd7EY^!y+I z9<8(iZOs-smkB*-%%QUzM~ykWKYEZA#_teT2ntm_2i=t!d!F#18=keIs2GoagjQ?0 z!{PvYE^Q7Kw58w;O956&`$WUwM3l4DT99|J=4zMv3oGXLyqGm8=3)IDNEF>~r}NMf zUd*;cF~8T3z+4DLC~aSp6Dk9KJx46y5+w04E|;mS<41>Zrg z0o_`NX_nfoG=GWy|NJ6)C6UMat)a&#=q5eZ0Alobs*KN&Z`XRvNh_%!wz#oyPFJST z#vmP8pLy&8y?=|$va$~$NK)baPLdG`JrD8yOAk3ww&K=A?-%$cUxwrTivXv z+qfi#-{Y}DE}u7%1fW{1zDm+QzDcBJd?WrhDh_h7Mq5#*W*rrK@n~%pdnj4;HIY_{ z-hz^@r-JJ`qyRxhx09|uh8lyx8{dD5+mmEUl1f|jO&!XusNtDNuQgPK{|FzY*wA7y z1AUC5v3cTFKf)5xcF4rp`7xAEC_)PWUkEhUA$k%@lT=K08ktzN97JD0j;P$$;U zY1tR|&gN*pX1(_yS{%pX2CT^Pc8FbL%%G>wx`)PeD!Xh6I;m_s6w(MTlLm(8cb>0e@LB_1g>2p&d)|AM{j(!#`hRAUMv zL5Ngp@nGy-#vhCuu3ruNhRq><-3A@uB^w6{d>Dkn?V-ZZw}slPH2tF) zV*!T!JLpxSxWz`w9a;R=j@xX0i?yXYa`~+TxB2`w3%B$pWw-Wf1}>Pr*@90%Hcssh zJHoK*X6Ni;`b+&xDgTz4BG#W!E%qKn-RT{nkNT1-C`8A?P_$LISuISuG|3~Kn2O1> z(i$Rq`iP7~`hktsyp7dQ(Y*5%H*8790)|R*q;zZRsX(1=&Q`_?d%E?GG+^vDPVPNj zkivxPY$Fw#Q3#`R7neIJ!>Z3=YGGokyRq=Xjn9bpJh%2nCK+pr2I*4wOc)rQ?ez*q zqg*@}T}Z8hSzbvb(bEulRR2wMURu*sw4NUAaz$O6#ah-XTGqr=hp%lYYT*`iN43Du zwn|$IR#34Ju0t4AUO-!@SWYOw3hWpMt_`?mw-z)AvPOiQ+U>PUICV1&1&h=_(O)xd z=!W@}ZD2WFI9-vIS?bb;l4j`PR^I{O75Lvgr}@V?3RP+k}477!@+hN0fpn zsxJp+yPQI)iuM>oQ~vHJX2{?fj66^^CWAN|O}Mkojp+|HHWlr{d8oyT!G8_K*h1al z;zC;77TSwA(&X6E!kxM;Cjx`@&<0qn&v}oh_c0?M*pY`ebn_k$Ny5@BQ?LFb@Rik@ z($W(h;><#otvNJfdB?4d$wC+9{T`Zf2`yGQ17jT4oJgU1b5?6XBc-QL!qi5Ttd(gF zmP;!W6uYH@(TecV1@k-Dz(~tyOySys&v$1_XcR%V<|m)Bu0S#;$gTB2<5aXTlQ}KF zXmgTH`+qy<6%@;7O1hDLfNK53S6lu+5@CW3v#~osB1HD=h0XjQ$yELKwV|W zMNvOe)CY=i7rv%b4Nql|7&-gi;|V|2kA_V{|3E;wE_J`6o!+K}h!%Z+oJU(l&&N(E zt9LJIA@ah!z1|@ntQ|sG--7aBRQZ~^oI@*UL{X@zsT-IXeEK%EpwWp&%9(NoHp9Ms zf%vPw5A1TTIioxmLkoxwY71^mjf)u#M!UmrA&G=pGYe17IClMLtd~JUr6H%ziD{0& zkxp99bRaPjB25cjMq^HY7wa%_%}skNKf%s+YpiuZ$POfd!lIho>XD^JXsH>TEh$49?GB)e>(SE=a-ZqKrwvMaFraMGBo?y!Z5z>I0gT~DoFU%iWl z@fPM$!}UD3BpwGI{Ra%nWHDd`cg8I+V6`&Lg)7oBpm3d?A2Q2nw8IvBnd#)AMIe!5 zvTVV>@fgJvlMU6&W89{gTw74=@V$lg7&*0kTW}nI<`YwlVhiT*n5{P_KT~82_UAFb z*CxkI#p*N!fr7nmN^Q0+xSPjpHO0)d1-J5;FHA92wjgE$l-jqZm|9y9GZ~6WK@$+= z2@mbZ1JDnC)H2C3Jak|jBZG`%m&UPWacq1XYlvfIag4M(e|B*kBbCFkzFZ8*w>^#} z=xG0n)7=$+)(-ADwla?Cak{U#z>!`@981uVX~m!27N<*#W6krKK=3SWc5=G4aXLpF zOYj$o=kZ*eZc7}yGtOUI9D5oVGN3_{%N~Iy1fna@f%Jw?XpaFC9>f_luj??Ofqk(Y z4<>b37w~8`o>H_`q!W+QBF#uvDC^F)z^@qYW`hhMHa_BN-4^PJBwj}Z)?{wX@@Owm z*QaT6@Jd9$ekId^#tfziU=C!E^^=CRQfKGH%q%w5-%qy25bRh}5_s14R!7mHbWcfr+y@l*QWK6U-^E}q$X{OLtbsAEg{v{*g7VSB%-!? zwA-`TAb+$~5#P|E#jh-MUo2z9PBX?2Y%J5dL!q{wq~yx$m_Ncr+b(Xnu2F*S@Q_W; z&M6qkydNa#LtCf^Qw2#IJZ1Id!|~TF?_A1c0L>p@<5C9JQE7$hLc1%k#v$^W??y(< z%LQ!)ITeP_-$c}?8w9y+boe_lby30-VHyR#>Ts)*(ug;~Q$zGd$Pz0kN?>7=#TKNu zB7jYdX*G72mgmYl;*+x&djv}y|);V8S{H9DWd@Un%rvYAAt?lK(jUP1Tb}TgOhCc z4G>P=G>7dD+WzO`l{2r^7O*1N1pCDj{TWtxP9*v?F4TtiZbuvb00C?hFbkc)<`1yH z7EQ%7`sDZVAZ`%;7^7XXef>Mu`F>#Q$l9e;6X$E=(!$qR;n~O6ca^-3n`_~sU{}hw z(o992kfvC-z_L%n&NaF#1_Q99#Mi8C!N0Sx*+R8E*ppT`$dIFY_yR=O2ql!PxISP} zX-%QvI{Fu#4|dC7tpC-nSPzj_@RD!g3^KPJ$PV=fzQ5<|>5BRXUsBiB@-`FCfhli~24=u?UEGnDRUic^d2S17HFrTi%^*v3nBs zJPBT*RGAk?IQ@PsnnJOX8o-{uUf9m+Z9UanI6d|kOjy6fa)tCf3YxV3k3|`7>&F-W z{YVRmVf`PqP8D_@Nv9twz?g#_FCO9Zt>~6EQnkE1NBQS=wSRGrw107GV*es(=fXvN zv_@Be4o{0{vE{s|6>2*$a{(Xi?}{kKN4=Pg>0+vEiCj*h15N2 zs2)yV&Q@rJW3BSITb)crdlhh`sH>Vltlx|b(1P4pjMEr`6;O3mBSkHMEY%RBIuW;d z>=slMX$vkw=cJ_?@+N!{GbvhJxIf}Nt|b_$3*Aj5p$9=i1KP`!M|_3c*k&}Qn9D$m zDJESy(BkN-{{#79I>@5J=`RP-u&@|lthr$MML+l%a=@;E`dAY^AAT%Cm(~z5myhBH zBeozpSU}GqQKDgM?)ns7UR&_0RB6FI)Bpmw;o5@CPmn*L$KFMfOg1ogN!6n7{)srl zEFjbqK(r12;{8X(*fHX)N~|)G-crKeKEJ{>GITL$oLXuoO&yq#na7y41(&kPEtZ}r zz2J|G435QEeGR9!(c)oCYIt$yAAkIDc>7sxgZ%h-qw0p{{q|@5eiY2LK?zUprr2EH zTOvx}^Az~~(*6lnb!_iE627c*oyW?f34CLf{7Ad>FGJUkfm>6^i`xy>xiO8X@ZMX ziHZi+w`wj@cPiQt)Z`)W0W=1oF@0?)7YOvn-a@5}i(|C=y%aP34T(0r_xjvAu) zqy~QtHJ3N3xqOmB+Gp^03I;nQFhB`>37?_26*$4cI>WvCp8jXX4eR}AkYHVJ`U2zC z3{*7f1&m*Hpoq>vH84HF>eEe&d2nSwRnUe>xG$?(Y!{^JYhYF@+m=(Uvl@(!gmE74 z|5%bBJwsii`Aw)!Y~x^knzhJi1B`Z7E4IJ`$c<`-^)c^${bbOJN;9gWot;lY>pu%? z)?!Fy%fg~Z$qV`REdTa$pqEleplk!@*70+EsjSg!s zXCPlgE7K}H_qqCaTDcc;h?Y`X;SpEfWVPsbB0Z+O)>4KTLIf)t2-jGj#K5AzjG#O0 z>gf=Q!X2K1DibbV311T|I#G|*pCZOIHkSEwFY@++!`BrT;dsOq@Z!)`QAekJzIk9K z?vk>IGlEq+YG~KG}4tdPb*L@5z+gA5*vQ0;f6qFDND*8R@1|^zbjuJI(5hZ$` zz(k2U2v3ygO9ZJz@Nf!Kol7Nxi-ae9bfMm3B4NZM{loK;i-kR_F14ky?n3%Wgo=x5 zy40JV!QZ>Xsr?i+yEQ+J-Za{RwfTeuZNbf`a%YRHU+;_Pf4U|53bg^DG;JX#O%KEA zz43#@IFul_H@yxsLgzZPG}4UG3J692sg-&Q*+atqp`8NK9sQa8Ml0?|+iwn5L6ZF@ z7V5oZzp+Jnwq71hV~Gc;Ug(@svc354>^It@Apa9#zfqFMvfp%6oY{Vh^DkIAmi;!9 z>R+)AO+mf)~uqmfvZ$@%r{eRh0*um8B|E;HR2vyXD6RTE2j#lI; ztVT_q!orDl%V(I`hX#FjCY)IRt)DP?YR1p0o$j1ce{Olm(E2d6nF!k-6*G))BGk8d8PF2-7R3N22@`bqPXMH>mi5iRfO zq#!Y;*@}#4y?Wa8Cd62nr!72g;Wv8SM)HkJ$`4av^ops@iP(KdR+HF9rTRNo6c$fV zwCnBhJWmqygrxiqkdD6g{~|xy9;ZB0QCb{*jAu#9elZ)3cZ)XCy(k~cFS_Z!D4%mO zObfW<(Ps0c3AW$@B!)6$O945O(Q+*S1_V?E7a**ht&A2G_-;sGP<))L$Xr(j5+1%q=Fh4Y>nFBm_Tf#-AaeDrc= zap0`wVLgk&r{P&Mro01bbEyQ zKTV2%LQ_*C@2f+i**FX9eCWWHE<-v>VX{sL;r!z-pV+`}f zFrW1u7t5vg;Zb*ENrtV`Vw>$i=L9V3KAA=It)nuCTlh^0y|4&t9kg5v^K(@ll>@rs zGg`O}EUd!JV;XA&K82dmDTz|qf(QZBA7a9=u zgqODuAZ}u@AxZ5TE05s*koV+7mhgu)o>l@I9n|;XI&%q8Ve!T2fxb7Wt`@9^a(!LW zhgdbhGkOVdJm_n69@>mu*Mn>FkvpbWC=1_poy_mB>q<-g|6$h^ikfy^$HaGC`Dz=} z|HQ?ib!agsQIpULvK4h?cJx}-oDS=sQVesn@iF&*ZLJ^Dz$U#THrpfz7UK+T!v0}t zZOvGh`V~Az#w*RcvFW^EK$_l+1_Z&-^XTpa%;H!DM(An199dElg0^}!b*l_)^NFbv z)~DbEDkQuewOEA|Ev*H$bb-z3rz<|u17y6PhSXv^lh^X!rNV{R{sTlUp$7c7ymTd# zYLGfT-=k)${8#@GT}HIn9#z!tk^TeuA$@6mjjtEMzZ^bQlRaU!w?Td6ot&-YMD`mE zfv`L=&InH-%ywr((5A(G=APqJn|;T}{c&)nJ$*EserV$xj(lv%4;w8mmHDga6ELX~ zzANymF)h_+qDdSz7xYs>(GA&&khs4PF_&-|qM6A6%rItBTL>(t3)YL6ZxdtD_aNsF zhN>s*^V0zIB2rDXU$_f-!rcq8F8^9S&yG0(VKQO35Gg5-QL@ZINca!^M;D>dZ%~D$ z+iGa0MgoZ@yo2_6)FGL=3o{i=Tu8LcH)x-JG3IaJFZ3lUQ1)uN<66*Qt$QnQJ&c5t z>u}_bnMM`<8$#U${gd zHlmHrj&G$T*D1M~6cNjT<#a)vicP74CTQifR@NpN6I7)=!DiyHj4gPWniD@Qlh^`b z9)wP@053c#XnhT9@O}rCy;Z;abs7m#B3?*>;etfvb!(H+qcM6^RVi96uE*&wL6uW| z@uj>1=1Q>NdM?RWicV*E|oU;QkYxhW`Y~Fxh{i0R9tGfd&|Ba5kVo z9t%_l3~vY$1$vEJyN%QtYfX!qEtuJK78M}}m_v^#cns~BH?R9BPEq?oS`g7#v{C~2OGzM+Yn2T7{2H*kx~D*cMrcy~(Z1N5h#*fgMdcXu(j6ZVwC ztr2gb65r|ZIx*8r-VMRnFPa$K@-If$=3e(iC}#7~1`<9vq+vWyqve)Yu{mraFyamW zK(dk450TqjD0PMsxXq4g!?^%kkQt}2D{aBYkThB5#96qYvq1Bq?+aJU)WtYb%4SRC z{Fsm@&P>p01Y7WZJY<}kFkFsP7tz@XYQM4m$?e(fcU%g&pv8TO=?Rf5!%oliJq1x7 z<1mGB@PQqwK&H$G`5JmiI#fYx;i6rcGz4l7D?H?bybxTU2Rf!6at`T#ffy-KzXN0S zk7!)n9_(P}DVW=F??xqWTlEm`)+Y{B?4spH<3PoyBm@mR#Nt4O;c?s>9>-sz>9D!R zp=Qhs-?N35fS5*kUj=!q`6m7^{Ep$ZDM`$Q6GsKA4{OY2;6Az*|BiA;e)t&f$bQ2e zIb36{vvP0bS?EB#ul*Tffykm;kQ~(rYr%#gPVXv78n2vFaxgvom>+E8FJ-~uXq42W z-3Xm=yL`MYn5iQoCxSQI;MFX4+GEdFu)3TN6o!*4Q!#FejGLLp&1~a_8CwcwOnyS} zq5C?1%kJyNJyzed$?2jBesY)t^kFT;n^{CXFE_F1zKfEGpPAw(H^f-exn1TdpVB2K z&?-|3&ze&B8w<0uoh*eo>oXC76kg#ks{tDW3^uS^7iYmcJf6LxJ<3Feh4$0gLc6Nl zLT_W^iB4K0EvZ(F{!jX0#mmq?#<~i^%Mgy{pn}PF+7hZJ z41hOcCCTAYOUO6oC#U*pfx5S_{189uv1%D;#1W5f-t(OPbyMk`DsY=aUAn{TreglA zKk^dmkG9~~0L$vJq)ZRNj(6s5s(w+U)HS581aJfaI`11$F=h~xZE87wJV_tsar!dl zp)JXEK-y%JJjufAl1B$-gNX5gzk|pYJRvp72I&Q1WAjKfSU-}p1-BtBC|pHjz2KEh zzlCOYC7E!{Taf7>9Sp;)86NM@-dIS2Cblvy8D5&%08+QQ$*sO8{LAC(Nw#1Wk`)#$ zY+yHZB(s4NuJG8k_>ZRUv=_-bf}RPdJ7$x)o3M1@pa?dH;~aAuHt5DjNKatH1;;=S z>n`ljk(esbtklgU@{DL078O4O)`MEyHcW@=soGG9`kqEnZS>|80`Wo_+Pm?fIz`p0 z8})U9Dl`bnh#V%*Af<%11W92|gY!;X$Oxb+kES82te)$z2a!sYlwv(ZOh@vv>7k;~ zR;SwE7W@S(+<_>Ra)pGD>#}DtTK#@B1dY6%UBM+B_$$Sse0j+xyvj0NA2dl8r1rP^yGDQQo*qUU0g|a58 z7oi*(YBLJyQNJ!we=6ih1IC6^&(#`9&d`A~aHu~vAYtFoW7K_#$d%VXRP!%$sbAu# z75W1fXy0UqdT7bh`lganPpg4?3wD#BOg6aHZ&*dEo1-UV3yUh>iS2S{-n-R)#DUQa z7r@yCTK@u?4~4*J0j$&;Jz&3zrgl^gd+blx9)J_MGtkb?J*H|Ws5W>jyYjZw3|AIy zpw8&ZYx82ZGrSL6tNOre2M`VG-p$$x+xTdF4|ECsPI_O|13D ziVb}u*1Zxf!r8gat@ae@GuiPqb*fx#_{FfiZ9($f9H$LA;D(;k&wUOni^Fi%55K{Q z5?-af;UJ#IX~Peo&(i@hI4wdyx~a+3`iN5>-OXe&870x~qGS1%0j*U_+P!Yzq23hT}FvM$~3}8O~v7XCVVNb^* zj3RmihW=JRHCp;`j1J4e3QL0lG>=9NG;vem29tlJSSatRZ18i!!(+7}n2a}*B`$B- zG*hE^c11!m)Ck!Y4|9QZ@z;Gir-&H~UtFtY4Sf|`Xblg&)=k@+Ynxa_e~i`Adfb^- zOV#l60QCrZK2!s2txP;*3qFJzf?CjPQy7jTsE9g_MQ!3y&Nu83hkgg+@F4c-yLVdj zTM$C88{iK6437!2CE(z)yMxwk)yEnsx9^{!Vja|f!D1bb8?08y{k~Hl#+k4MPZGKR z(oN*vf^&%i>&G%Yj0}4q!!(581I@CWZ*?F3F@9cCde=pOWp`NDcy=C<-P`Cgyv&ya zfmsZ%Kq_-Eo-4{cfJL>5sK4=)MCKYo$I9IBNogR#2bR;N1C4>M`r)Uk=!f;rKUmS< z8N-X7ALr$DAlQZz86JVlG>J&Bi2r2Fr9spGuRg?OQ>K1c9U!+9wb zyu5OPA(vq+Lk(M9B$o<<7rf}GyMskFiKs;^rG1b~Dk`N0Azmfk%tSNb2lV`$54sQ^ zbk%n+Cz>i`8>2BLYUu=-&`zPASAKnXFudW24-o)QT}x~YrkT>|>8PeHKo8^nVx z0U9+d>{T?Z{UHh|V*&?OJlgVl#8Mr+N_gD&b#L6uO7c>Bg`|M?@F_^~&Y6qw#+u*Y zz~oWCTW5g{Mg1Jkp3I+O1147|L#2uqhrWJkffa7Jd-N-*jlj;W#u_)hc$5+xM+t|A z_5n!_hOr&`shr3bJPS-pgabL@eisqCY_GQK9fVME&IBb(kXdog<~_ZeclXo3BUX?5 z)b=VIem7xhm_#XBpGelFK1p)aTdDloDpvd9*V6#00n+_U%KG3ZagdSMcuRnm_ATBU zF$l2+LAlQ*CB>)dI_bl2`5ge^20+f!KxvN@W}Bj$`<@oXo**;Pmuz_y3rPay^mC( zeud87OssURv-JW_jq`sjr!SEcHI%!IoNf}S7D_oy7Fc;wPScLgDSpC+lHBzV#+SbP zXX1GmIV-V7&t-zf9&XA&AJU%$oruCFc8kA1H6TzU8h4Bur<3#r2{O=NZbgFHJd(+f zn&8{V2{CT=sI2|lg72bANsPsa!W=h5oziw!6QSWy1c97g9`yy*SKzM5x(ric=$+Kb z1XD`)EaV1^v}|-KGUongNI2^^M2PC>M^y*R#fvSf<5J=}xjK@Bw7P){X&qM0L_;Up z*&thNTcJ@CBYMMA+@*Xf@_@_4u*X9a0>(pX7Z1qc|#-@^R|N~qQ6E6dgWEb z*MeUKudUuIDEuhPnH=+aLdoBS5a;t|L&wX0g!&1bTJHxw1y`&O;c%(`)!*@KcxWMO zN(WmC)?4%|dCs=bN8pW4p@jy(Hfk-1Kzf$wAl%nu)LEJj{@}I>8Z7F(j*WZaXsus_ zNhNmN<=2S~Bt>fW;)UIWbX-a4Y)qsBef2dN;`DwM=;}qFOQ>+))hm?C*q!o`L6SC@b#CCK1|^rFCEbU4wZF&aNf3Hxt;qz<=K-ZEL61`|IZd1B(z9tIP{FW#(xp}g6 zG{h$FR0^NNODRmN421r(v>J)Cz;e2fwCJke_9&Ou5*)Ha_S;zYU+A<&i|lNntLT|y zNbyoUN3OSswvaS!Au@Q3j=385@&2$ZXFKQZs56Lh%}@~9gZ4?HwB5A=|M5=u>*LQ; zdtqD}I_6x2%%z34;jd&-!V73(u@C1OhkvgB{Shi&r~V9HUkI-stdo6eyK6LZpqB$3 z)EoIc#=D0^`s5)Y;#QxASN42P%{umGy{KFWp$gBD{lYa(&Q`tnTXeP4iR%IR)X!$( zR@ebpdBfTkB)W1q?`A%p6?>!TO%#Q}97fn|JR%17s$5zMqow0d9)?}gvSbQYjL}R- z*$KzJLFdq$1i_ggh@OtrFmOfNu>za3D_V&Q)W&Dyt(NE)h=QSmU5DryhZ#HN^NAgt zoBD*Mre8tpM&3inkK05rhoavjsDFqo*!X13CDnJySEEqfgbnB4F)1eJv@C^Q$bwRS zJj`mT^JMnX@8Yv0_=Jfub1m5iWUJ!U181=jGkqmkbJL0u`I)q@LsvkPKdA4fSz>tT zc}R-7-w!-&gZhkQ>JvEiN0$>dt!rcueP8_} z!YTEWlj%Q4vCEu+->pQ}&v#ZC=JOdA-zhnrPUb6H7C3^a1(|)zT$Jy8m>22YP@crA zvrrUh;nifLq7)Z?hr)%2zJ>g$9adUdzhXM&K348ly%#Xb#%{%{5PiMrwyy;*xqw{g z{e5@EK$o-2Wm~-*}3o@eii#D2hptco*hs>c|Y)VF5b33u&}Ir@6n=> zQ^h*T!D-VAu>=xMw}RoE?Z#VV*$cg*-N7)oN5Vrh1-H$Vgt`&)477SWA;-*0?Krl8 zw$=9&31j~0oOjzDyTPaJRS37N7er?Z(f)aXZS?^UF`U?6$Bqi)KFVI6aZvX_M=IKB z!Z3?`*&jW7I zMD5W@h{BR7#`&BGYXPX_Z>_$8Wmv#Pm!k`o8KQ2GiS;MSH^bunSWqzM41+(&5)34` z1YeV|86|wk;QG{`sviY82H_qQK#bPWdYV>*4w3tYcM9Bu;4~2-N4y6O$9(uptcyG5 zC$DESmkE@IRM)Zxp?kaVmr%57=8J))q)zg4jr(H2&$SC*3}KfZ*7K2WtS)&y9xgUu zQuu@O^TwnR;*Qz0uVnH+CrI``cR$3}xBq+p^Z#9bpP(4Dp8h||Px3Eusvppcy19di zHqXxdOW4x!1awY%%_jDeSvSS&5iY`w6V83y%Y-wE{;R;rgl)B9rPn(F_D?~$j837r zu>&Oh$zyhESK>XKv=4Cp*sym5Q-T9H=eyw(!4iQN3C_V#$AZtgHrMWZv0m(lkxz#^ z?<48unAo?}ZCHjyo1#~4+JcqDDqLX5mqSrE8yjhOjaB^Rn47VBaL^Xgkpnq$*g`P& z*{+W*l#ZwW`(=K-e}Ei14CWIK9m8OulJiB8NuH>SuIQYoD~tVW{r3rFEet3&W$erd)%IY zw!92$7C3H#*C2m{fe3a5%E`_}Ps;fgJ&wJkL*I_MB6|md8b6TXtO?uFT>E8=C09yJQjgM3<+g5l_1C1PB~_bt;Bk08UBIGYud;VnK@;gapMl1H&gc)qYtW;eaq<4Mu#vXQdwl`D zy<`-QA4I%vMN=S*t=?>pwuqc3J({gBFAYEOb){&(0tZO%WmlOyC0@a<;~ni;s5>WK zo`HmXuNG?4@NV>7zUBPKzaW?Gih6?g2bX#hd0@rg2T2>haJ!<8z|TWqpT|kR9i}c} zBO{z^am!A>(EzG0p)+(COX1bKgbkzGNC$57If@Z^iGo`wy^sEWgtqM+M36`QsTG>BCyXNtGvPU#Gtt zXKwgNAMq;m7CtHvz2`5;SV59_FKI9{4Jf;p$Ojwb=$EMBy}T`Swqt(@?V#>1Xt*Y> z7dXK_P7s}knB?)C58mQ^A|wqgBl4q^AQIg4)B*3 zortG6-qH;Q|E<>i)l;H6i0j2+hXXhrg2N79#Gi*2{2O*l@LDHQ7Z`T+uP`Tpro51n zO61QS)fcmVq)xWu{Vi}u+y;L-wA4{}QH|Y`x4}EI5M3&rzxN-#)aF(rZvLAHZv4dF zH*ReaJ?~ce&m^dCdenELPyWXAgz-Ccf<{qC+hd=}`QwF&>Jhw*fX*VRhg*A4tH2AS zjvTf<0Fl!1L?(CcY|JJ}rv58;US>0`Lkch>(XXN0Py%li4%=ZbH#7PgVuT(^dLMwD zbSSpe(`pLT{nDYAj5Pi2Fb(lceGg&hgg$U5P5`X|$FwDXvj*iy&oj#E*GZL~#anhQfB!GyxC5_M;ZZPWQw)d(O<+#R<-av-4LU=m+n_f{-W* zXXQ=yBc@D$x9V+(j;YE06Xz4dBYJ*)7KSn!D47zp>ywc-@PF+gTvrg%x>qBBa$Tr| zyHBC%Fy8kLqZ6TLX;BtNLz;d!x+QqG8$-uN=!@`(%kiQJeF*YqgUx2|I_DdyD5R6Q z@Hp3Daa}rpvhI8;Kbq_N#siqyV+64%gLM+?jreU#yw@1>%n{$i8CkJiwFQ=_lDGAT zr}3Wsz>)53pF`1nJsh!0?|%% zFy0=!Uk_S9ovqzn;x6_k>Bob*u7dJvL_zL>^gP6N3#1REOKe4g4X23>??lAm3>{w9 zFydTuToJ_~qCZ8b2i&%+aZ<2Z$&1j-Q;LvPAbs0cXIbol^fh#ej$pZC{uW4o4M1uj z{Rz6THEqU!ApIWz(gNvs(j}U1&^xEF7ugGcWVCPAz2M+LQdAfVvH%| z8AI#Yf-!_euT2<(+;Nw3Cigj8@HEO z{3?$8GH<*sae6d(oJ$N4sxfa6ESaODVZn%Wqx2@-`0qJj;$@sbZT>oimFPQGf`ll) zJXVR&sL0uA33fzKTyaQPW8O~CofwrNe?{G&b13Iqz4i|FLKokxXbPygem<6n;MbH$ z%17G!pQHhcMSBcsBLMYll54oHZ^R z@i_dYbbSsU7xkwwcPH4qGmsD&F6+TK`>i2q`~$p#;Fo^qb}hooD9jgL<4ke};h&`w zzxwi!!DKZwg25y)CwKwBut{0X$=tnz=a>i65ai)jdl*kjG&EGH5Gq;z4N&*wSFR4pq+g(=>9B+OLSR}}ONWUF`pCp3Y zQFB`CM7G|7A>57afZ*APb(2dZoF?^u1{sTAc{Cb1(`|+-W`|U7W>YqG z2MX1jln-!v3qcsJmPp2EZ?v3>`6A93xKtgE{5Wmb?7fvHdibT~Q==b(Q8s?yJ;n5x zJMVxkn1LHH4SXlS3iu^|4Kcby^*ycwZV$}3R0kSuZql+0OOF>8ErX&B`vIqA zxHst+x|b(hMbd#*{5xHp;ohl~sy)^_UcXpWbK+c#72bjSl5=u(pE%dKw2BiSa zaXp?!1w?NJ2$nGZ8tJ~Wm;_@Bxhz{>B|Mx^#3c>ma$;kx*(|$z4tq$} zE@uMcb#znl^dqdS8W*I$^p(=!@$BA#U)=pNnb^(%0 z)|wGLN6{)_RdarAXE@k$fm%<-?!m|^`3p#8;L?T>-2@c%yY@rWZxs2FhT^>r6``Z} zozEyW;z1LXwWU4`ZecAz>0&nd$f<9@&sb~e{rm}7^-=kCX7Vd;RPzT)O!$EX{m}wW zz>jB_kM%zLBgHikoOq~!Y>RWa{)afk-QxDZLK{3k_C$T&3GQO8j7vGdy%%)`FGJv^ zA97aDoVY`^$MaJ>UMe1sPk3b3-4nIPW0LB8ZXb9=M5>69rHn7LuG`qiQU=JV>jD=) zWlnCWX{i~F2> zGNQDSN#Ldrwcn;t=WtnuQ9qAz!^xk@^mxvlOtcyXCXgR&^1BamA@L|14Hp0i*5j>^ zcm2kkX7^hq4U~BBf4AAKdI!<9cmggdFBAP8LudKhMx=)lSE^T$rR`!o1oC;P4O$H3 z2kaDb4BddGJDvkjVu+J=2!ut6vO^U84b78_g1U{LszMp{-+>YB*O*W3O<7#1-xn|f zyWAJv?vORfkTTLM<8xZaI^n)V$ErZbY7cdGKfYU#L~oq6i${Rq;sN6;H@Ut#+ z!2x!NlsutAG4Vs)vAzlqnW+yTDf~-OMH#W_2#&bX2Uzd!2S`G<0b4*R2)m5{sm-Q8 zc-H=4Iy(s6U^HYc!UkbQ8_!`@TaT)kPM4VY1u?mO*I{U|)hBQPIN}zV%khWL#ZdDb zNQG)A|AXObxUhlOSgllxP)8wXs6>=&uolsAXjR>h+~Ld{jf1PGji`YUkSc#&fopx6 z37Mk%O^s%CD8!=aL%8vX@d4DD_=r_*d1q{GF=8tNW+# zIO*$;ve99%;EU#47dn>@d;y@JNzD%|Iqy@J$^Lv;tVK(FDT{q z9azwJagcACgTii9`}xKtGNTo8BDr^om^zYn!vc6|#c zMTx?aH{2qLM)L;hmL+lq^n%P|!PX{HSp(lN!H7J<1EZigmA%pE8>%BNWdRVh3Po}s zl5na*K7km;y-s{Z=j$SoFl}h5I0GKS)g)MhK}nDWGLjLkg@5%egiOdc=+IyrhFP;8 zrR3&Gh|{%_8{+m+ymN-T{YK;wl@BNzIXM^?RfWPo8@9?Cjq6ua@E}qpzc8H|%fw4a zl|IRt->U5PixwS!(T<~ex{4j+AeXYRZKA5iJKu_a1-e>VR!=69^D11@(OD$lpo`qb z(FUql$Qx_^-8%f*^(<|qGA}ct#yf0IC^6~wS_{uDo{WrbWfyny*Q3Td2w+J4W3Ud0 zw@8Pai0|>O(gesG&KMyjkPnrplm7!g>xHw780TV*7>^?2&e$YLe!=*w4VxYZ53yeR zm}T1DRXqH~Bo!y!v7TTOT?)QpsXDr2vWWJC0{3bTp|A)%kymu5SOp|>z=2zN8Wp+%Szq`crL zF#cQ=J|PLHTaZlnU?~&UZ(DF^nu;irp=UGnRTA3k3Y_O9z1-LjUd~A*&}7u_=uooT z@LAn-LwjA{v6K_B;*-HZ+AVhbx6E?>wdj4x(b|n;@e}_jndLVaV;t3+gyyMI=!2Xs z?s14XHX1(ME#OzFBst{agyRQR(qMd*`JVp@tQabhBvN*f!6lRevbMpQCu(pIzHx7t zhvKH`@G3HnA$;%!X2;4s;V4Zw%IFAMG54XTDP4>xWDjmvY^S=ViOn%|c3cwV2OA#k z5&N;cxY=7?l*IlCG&#RWSzlCT*fskTD~r-!SXsQASXpFG1nbo7XJTAav?4_q!^5n6 zYI0^Ax-)e>fxO`~YcDL#p@SqA7ytfOuMGG1ccEn>tIU*rhs63jv1*u?Ts4H^?#w%p z_z0C*$-w&)wF$Kfm908s0QYNrOWG4~5xFGUMHhsMPS!!{r{Ui@cOgZ0b6 z)4T$YwM19!zm)Qvl$Ok7J{82~z-up&cLw!fZa-#j9c+7`d2sB;sB((^wt-{wF=z)# z7fS}b)`uBdfAv%wjphxsa0sSnpW)31uE-Qj0`nfjjUOTr zzGD>m2O3sORJb{VI62@lKBky{HW4^es!SOq|{qX|28rdLu8a|s3Rra!6r z%;PQ}i~z!_cn5XJu?^~u_*ZV#i{!CEe@AiL@nm+eo6_lFzoxDh?W=!o;ppPax?jhh zLXCRos`|A*o+qe1&uvYVr%(qXr$wlrU_}1KCfH!weVciu77zOD#`y!Q>B;*QZ(^SW zKG5)Z&7~Wz-L4NU4O;GEqzlGS9#_4`Nqsc&%wXLtZlUeG4IS^ddf$yHBG*iD!=zCb zjEVRCkg4r}={uF4TPlf#1|lK6^D7B8BY{L(&|bL)=`iX!h*}lr1g|*Uc>J>}85i)y zsvq2jET&{j9=PGD5BF&KY9daU`oIqr*Hl-*I!HY{3$vD{bK?Dw54xuebN*JUdW7{| z{P?82OnpzgO;v}oaW>+1ub-TYVO;Nyo8>F(mg@>T>2VZ*Gd_Kuiv2(IcHK=@A|}}f z{8(J*CQIS^-*%JaF5s;tx|bxk0^QNKvJM9<*9 z#`fc3sm9RIpj@lNzN_7k0ahFRXF?ikuW6oZ^$8>b#? zHi*6~41&M;Ud;^!Jf*<|K)0Fc-v1k!0O2rvi+kiQFl>|myU%$B(DZdq)%ed@pg^Ck zc(vC0H?A`)Ernpym$|{r9X0mfS&itCp`%eh9Bc}}N0e{xVO0PNOAGKBHHBjV^>sJW zQW~Tn)-go7Ev*EqMf+YzeSqzUTujmS zKyZ;oAkHtcZXAI2-HK8w{!-D^qRzn&U%3z8jA0qZM7cQ&>l6)mNs>pnuvw1Vm{e|O@G z0c&Txzs&P$?3a*XvN7xsV%D$TD7L3U7;J8@MF(ySZHfgT8UuFk05o4_pD4mzfwxiRBGL;=YIC3dHpuhdN?Lg zBgZ!Ug5K#l?q?`lQtxyG#09cnfJy|fgC(Bfq9axBbW(vIR!!A>ZsH4+qE(y)6;fx1 z10@9~bV7V^Q{_}luxkV6iDgzouej_+w9-b+Ux)BtuCI&{+vs5b2_2|RXq##(9qUt|$KSCPOSHSB*`!PnN zbbGkDI2jrCx6ItdsPT`JIh1#p^!Lxq@f+C>g4v@A_NjBwtk5apH?--!ui>A!?xE4+ z`o^G6DU&$~WF#^au9~=nr^YaxPMZn$qO;glzH0lX5~MK^GCSx5R$)lTxQ=m{!Gd;o zJe(D}mGa!4if8#6Rr=1~4&!f!`ya3)N;^<$&e#j3026(|F&m=j=f!d!oY*jVpT?xuumsAA^lLo# zPd@>+4>K*t$El1pVm7QghhcpjW4mWg>`LHVyom&i?W}Lbdd!Dl9^h# zh_Pn$ge9_~huMTDS~+>?^S&G%XzSdOXG`FJ7r5H0FN4dNy&G*_J;p_ad;n3Kd{AB6 z#fwj*{mKe>#e{1lf3V|{#e+m#=-aPufB(;8iy2jcZoW7kMD)JI@lWENU4YE^%yL#Dg7L)T-0zu~~8bsk}(GUEj_;OYO zbX@TmAgUCL^}~@PWNZk|?UAt#LiT*5iitD5^XTfq8vCgt2nyU|kb4{c@N(Lsz`n)^ zHjgvl9~i*hKOmi;wK8bU@;vWjr*ZNRQ)wjoCk6RNETm#*p#Zvn+V$iriV(ziJ>sjj zp{=u%Y~>7?dXU{3gI%`J(-QQMJOL~ZC=j3ma|0D(2%dap6xkl&6W}cmC=uX#FAmt7 zWsq9WN0|V}dO)QB*Lr{{zz82I)f!T(b8Zb8iMa#|29ujq)8s@U))!sIeQ|W^o~aCO zEm(TSBB(RGzwW%Q%zXsl4V4;u38;JOwH%$psQC<0hlN=b)D+f^c2C4$+NZaFz+Y>~ zXk`C5WKPqO*$4vYloW_-13;%^Cn(`dEe@OkzND`qwba8Bc};yo(N=eYBM=fSPWF3_Afq}fkSmCu(|TPq=-RY>bm-stt) z4F#Bi{7gi5f()c^G3|>mk}lm3uOg{wwZDc^y8%ibm_%32#jg*)^YE*s_0Uq#kk&($ zw8n2G=tdli@xoWa3c=6K_vbOa$g}*}g#}XmTdIJ$hhy}rc1{kV>qGnq%WA147V(_{ zyT3=}Ll@V_ALT{q1{u+A`9vW1Z7G72pO4-x;=dHpr;7i&Fv_gtzT=cKD>zT)j~4&- zG?bh%se0ouU_|FpkfrL}K<%4zyN>2f663s*^O0?tBJd@7Pv9rV1LVR~$yd#`9xZ~) zm@U#OHxpxj^_T;wjGIx4n(^%vwk`GD;Rj`bRH@HU0aXpe96*@=*y=luqFAqZS0W+# z?WH9EXnU8VA5OXp7*<-S3EovjQ|^y0pxig}ATD1AM<$1WS5Q4T{${v{N(9sX*BGqE zdOtXQr;G$F07inbYP3}OtA>6ZlQgsE7NN4LofkPCKrXqxaPENd0K6>YL1z_6%Ue5Hh0=lF;5HFgXNhbU#liAa>^&I=wbA;6>mtf&Uz(@mHLolxlk+~jL=lPrGVP3`~3q0&r z&mYG*iEo^Taa0p*tcNvv*i9bBaZUVP=V7fLc9n;5WD|c^cvzc9=6NF zsyqzcSNjWi7!Qyn>`)KmW}aYv55rKZu|XaNO%{z+co-&5Kf}1AB=P;)^H=I&{XC2c z1LCjT!zw-O91k-+EE!*|hb8@u^sr=nqdjb(7vDG!JI})=cv!Lyrg+#8&tKTXf*v;8 z!;)>(;9=FCzquZEv4_p`u**DbzK13KE%2~pe2YA6xEHq3!$x`78V?)oVXYo^qlazq zup~dXdDtzUKi9*O{bQGhCHv9-Ltq&g&7{pIc=7QRRIp^&f*b}=!|wAi)5E5E7&V?G&q;qHJuK;Ow1*|r80TSAy!d8&SjfW~ zJZz$e&GoQk{mt{RyF7pM4}mT4u%t{}61dDuMf} zoC`7sW#FR`-HxctF>CPZ5jA20@XvW?Q{wYG_-rgZGV*C-_(0fN;Ww)G^*InIf9t*t zRtpY=pwL4P4_t?7Fm#9Np8}=!r17c@oY+Cb`D9{WxW;)?z0M);pFpFAE18<|pN!~2 z_|@71xu`bm4R2NFN`C^5YtVUoWy(-Hv)o2aKOBm}7Zt(QYTaz1QAEGe+mM3R^G>Il zw?j9GYpx2c?~_}!=W!9hEn03NCyojDW|DV*$G;ddAtSZ|D+j-_AQ5|=E15%uQT5oN zy+_)9tljT}ni`JEv3lnrD-K>Ox!4V&9ZdVmGE^3nt58@xACmV56Vs=t*l)-AJ=wst zOR(sb@_`?Wg@N1*@&l)=34Z9NIY9W~7)=R3j0C0mfzGP>M&XA*k{_@eLw+zbV~6C2 z&G?+c4@T9VJ_r2etR@?!Jo8hBfp|-6y|l;3U*eC(*p-S0lKim<31w*h zI4p%fOz=kt%0@~4=z*YU>yeAT|3&`bc$g7;h5SJYlM(wX^Mm|V+Lb;wwCZZ$zDlLK zqv~ODi9IO~$12Tv;EQf-Zy$w$oTHFTwl^Z`R%4&Sh#qC}K^IZ+fsT@z#F0yf_cx?} z?F@}mI&ELM&kswUyA1c+vr4gq#}0lFS*fvKE(3L_R?+WYqrd8Q3E?)XYLhFy_@IAq zD@w~(45|l)ihVFfg?c(P1yS%@g%f z5VS|J%d=PLeIWLSoNRW7hv75P9dJ~XA|4OZlynF7Jl!4W^u*)PWOpFPs_yV{yhzgd zpXB3r|C4+al{8wL!$l}WuNYx$YKQRN;=|jL&^%nldJmR=ZAAYL?^^qClbPrbP=e%b zN~qJI?r-I(c$;*Dj+b5kC;7-d7m<(PC-DFK&=S&{A$({P8zRSFu9~#$XMI5Aoyf-~ z^1sMOT1zE&`s`ZV;WeVaV_~;JDFWuc$FC=IRy*pMAk&E!%=)U!{`u&KG}P z7Ej*e2=IZMYe)MgK{JzwJZF6 zn-QhPapcqe;R6_eUtt9G8DO8=hDpTF)M(o2#y=McWYM`wYPD8;?X5(v@eY=OQS2(Xj9SHUw>N+W7$31FGD)e?Y8h9rczf+ zq$g>Ik#R}CQl*tbtGuMprHng;R(VOGRbEnPm6sH{HZAUU03Q|Y`knq5Bidr=zgOQTED=+ZR0ERC*AqdB8a zO|LeM=CmsH`{*=!TpB$gjh>Q5htufUX>>yxJvWV>mqyP|qZg#ni_+-EGE={A$JX*cUw)e7X`&2H>+F>XM zpRh9N6R@kgW9A(4^;^q+Z9##%;s>6Z<1MXI`4Ow9KzY+dWxFor{a?z*u<6CG%IFG!;orO}OP^qMq!LK+=Tqo<_Nt!eazG`cN~ zcGKuxY4rXyIs?O32mVQ;3)1MKG}@O&m!#39X>?f{U71FkX>@HGJu;0RokovKqbH=% zQ_|>g8a+FWZb+l&rqT1#==o{%f;4(j8r|s8obM~eait-sc0s60u=gLBBszm`e+;UJ zYFUiCMLrAy8Ezc{!zsIY?#h zdX>2%_v7<03);7Y8Q}DCn`AIFn5wVXSE6dKdVtkZmqOu0CL)!BA{)xg0#IZmQY$F3 z5*Z0+OQZ;Y`Oj>L_Ac8^ z2NW-RnYN0g+D>?9&KoY55T_ypqNiW}qdmKpsyyXvsVWd?i+k1@%meL7K3)#{5FlQO zN4{f>=+y0;VJnleZ!!XB$OJy$qAC_S9il20bGISX8Vz+Zox<1Vu%WX|`)q1$q5-$K zE1=~q`KETlHR!=8V?yn5i~E-ka2#%Zs^|1KEk=`Y`MJeC9yc|)m{O74_IDvrjG-!@v zi4Ddy?NWEhLR1GX*rTk_6C~#(OKQ~faGHxAJk300f{GWGcv~uUrB>=nZFcjQBxc);1RDX|K}jpT^fEVA_mj85lVEv5KemJnPTK!=MU7 zP6s?SyH~~{dcj>ASl{`xxL^l6EH2!-xgM_ny$wCw8u{#D)S9{y2P4CrqFa}t{kORr z-}egf1NEd)i9Q&~mwi5Na{1h%k326M;6*QO*AMhox#!e+&h8hXfT$p}0d_u6RMRST zzxpJ>I^c8m616k2#eElDBFQuTUdOpTO+CmwJk{fK@CYRb289tkpNe6pTYDK+LX%Yh z@S^HVY;ON@G%j>ze#YRj#u4c^4Yp&_bX(a&kqM*iT8^yTfG&T(AE%S``-|pLz&w#5)yu zlz69m$pt5{!m zgWRg~w_ibdmF&wOtwW0TUCN%R>bA{LW3P(ttAoAVv&p^-L94di?7m1RmV3x?azi$D zQyH5vz~)L7Y+59|ehCE|ZDpuSv21TG5rsXpw*_e5j;+ou#;XuG2Ay~vKax(SyHec; zf?02^;g0c3U0lwC($L@rh%_5!B=DXba) !iDW43SbtLPe;#3+o`w7!*H;e54N)A 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 o>SHO3W|+Y%A>fX$BLDyZ literal 0 HcmV?d00001 diff --git a/ext/vulkan/libvulkan.so.1.0.30 b/ext/vulkan/libvulkan.so.1.0.30 new file mode 100755 index 0000000000000000000000000000000000000000..cddc4d927936d7cd954a7c17a6d06c1fccaf848f GIT binary patch literal 205790 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
        t;;LD*i_7PYQ^w=L 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 !iDW43SbtLPe;#3+o`w7!*H;e54N)A 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 o>SHO3W|+Y%A>fX$BLDyZ literal 0 HcmV?d00001 diff --git a/ext/vulkan/spirv.h b/ext/vulkan/spirv.h index 07e6b7aae7..89354c0696 100644 --- a/ext/vulkan/spirv.h +++ b/ext/vulkan/spirv.h @@ -51,11 +51,11 @@ typedef unsigned int SpvId; #define SPV_VERSION 0x10100 -#define SPV_REVISION 5 +#define SPV_REVISION 6 static const unsigned int SpvMagicNumber = 0x07230203; static const unsigned int SpvVersion = 0x00010100; -static const unsigned int SpvRevision = 5; +static const unsigned int SpvRevision = 6; static const unsigned int SpvOpCodeMask = 0xffff; static const unsigned int SpvWordCountShift = 16; @@ -383,6 +383,10 @@ typedef enum SpvDecoration_ { SpvDecorationInputAttachmentIndex = 43, SpvDecorationAlignment = 44, SpvDecorationMaxByteOffset = 45, + SpvDecorationOverrideCoverageNV = 5248, + SpvDecorationPassthroughNV = 5250, + SpvDecorationViewportRelativeNV = 5252, + SpvDecorationSecondaryViewportRelativeNV = 5256, SpvDecorationMax = 0x7fffffff, } SpvDecoration; @@ -436,6 +440,13 @@ typedef enum SpvBuiltIn_ { SpvBuiltInBaseVertex = 4424, SpvBuiltInBaseInstance = 4425, SpvBuiltInDrawIndex = 4426, + SpvBuiltInDeviceIndex = 4438, + SpvBuiltInViewIndex = 4440, + SpvBuiltInViewportMaskNV = 5253, + SpvBuiltInSecondaryPositionNV = 5257, + SpvBuiltInSecondaryViewportMaskNV = 5258, + SpvBuiltInPositionPerViewNV = 5261, + SpvBuiltInViewportMaskPerViewNV = 5262, SpvBuiltInMax = 0x7fffffff, } SpvBuiltIn; @@ -621,6 +632,18 @@ typedef enum SpvCapability_ { SpvCapabilitySubgroupBallotKHR = 4423, SpvCapabilityDrawParameters = 4427, SpvCapabilitySubgroupVoteKHR = 4431, + SpvCapabilityStorageUniformBufferBlock16 = 4433, + SpvCapabilityStorageUniform16 = 4434, + SpvCapabilityStoragePushConstant16 = 4435, + SpvCapabilityStorageInputOutput16 = 4436, + SpvCapabilityDeviceGroup = 4437, + SpvCapabilityMultiView = 4439, + SpvCapabilitySampleMaskOverrideCoverageNV = 5249, + SpvCapabilityGeometryShaderPassthroughNV = 5251, + SpvCapabilityShaderViewportIndexLayerNV = 5254, + SpvCapabilityShaderViewportMaskNV = 5255, + SpvCapabilityShaderStereoViewNV = 5259, + SpvCapabilityPerViewAttributesNV = 5260, SpvCapabilityMax = 0x7fffffff, } SpvCapability; diff --git a/ext/vulkan/spirv.hpp b/ext/vulkan/spirv.hpp index 564f1b4190..1bac2c0277 100644 --- a/ext/vulkan/spirv.hpp +++ b/ext/vulkan/spirv.hpp @@ -1,951 +1,974 @@ -// Copyright (c) 2014-2017 The Khronos Group Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. - -// This header is automatically generated by the same tool that creates -// the Binary Section of the SPIR-V specification. - -// Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python -// -// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -// -// Some tokens act like mask values, which can be OR'd together, -// while others are mutually exclusive. The mask-like ones have -// "Mask" in their name, and a parallel enum that has the shift -// amount (1 << x) for each corresponding enumerant. - -#ifndef spirv_HPP -#define spirv_HPP - -namespace spv { - -typedef unsigned int Id; - -#define SPV_VERSION 0x10100 -#define SPV_REVISION 5 - -static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010100; -static const unsigned int Revision = 5; -static const unsigned int OpCodeMask = 0xffff; -static const unsigned int WordCountShift = 16; - -enum SourceLanguage { - SourceLanguageUnknown = 0, - SourceLanguageESSL = 1, - SourceLanguageGLSL = 2, - SourceLanguageOpenCL_C = 3, - SourceLanguageOpenCL_CPP = 4, - SourceLanguageMax = 0x7fffffff, -}; - -enum ExecutionModel { - ExecutionModelVertex = 0, - ExecutionModelTessellationControl = 1, - ExecutionModelTessellationEvaluation = 2, - ExecutionModelGeometry = 3, - ExecutionModelFragment = 4, - ExecutionModelGLCompute = 5, - ExecutionModelKernel = 6, - ExecutionModelMax = 0x7fffffff, -}; - -enum AddressingModel { - AddressingModelLogical = 0, - AddressingModelPhysical32 = 1, - AddressingModelPhysical64 = 2, - AddressingModelMax = 0x7fffffff, -}; - -enum MemoryModel { - MemoryModelSimple = 0, - MemoryModelGLSL450 = 1, - MemoryModelOpenCL = 2, - MemoryModelMax = 0x7fffffff, -}; - -enum ExecutionMode { - ExecutionModeInvocations = 0, - ExecutionModeSpacingEqual = 1, - ExecutionModeSpacingFractionalEven = 2, - ExecutionModeSpacingFractionalOdd = 3, - ExecutionModeVertexOrderCw = 4, - ExecutionModeVertexOrderCcw = 5, - ExecutionModePixelCenterInteger = 6, - ExecutionModeOriginUpperLeft = 7, - ExecutionModeOriginLowerLeft = 8, - ExecutionModeEarlyFragmentTests = 9, - ExecutionModePointMode = 10, - ExecutionModeXfb = 11, - ExecutionModeDepthReplacing = 12, - ExecutionModeDepthGreater = 14, - ExecutionModeDepthLess = 15, - ExecutionModeDepthUnchanged = 16, - ExecutionModeLocalSize = 17, - ExecutionModeLocalSizeHint = 18, - ExecutionModeInputPoints = 19, - ExecutionModeInputLines = 20, - ExecutionModeInputLinesAdjacency = 21, - ExecutionModeTriangles = 22, - ExecutionModeInputTrianglesAdjacency = 23, - ExecutionModeQuads = 24, - ExecutionModeIsolines = 25, - ExecutionModeOutputVertices = 26, - ExecutionModeOutputPoints = 27, - ExecutionModeOutputLineStrip = 28, - ExecutionModeOutputTriangleStrip = 29, - ExecutionModeVecTypeHint = 30, - ExecutionModeContractionOff = 31, - ExecutionModeInitializer = 33, - ExecutionModeFinalizer = 34, - ExecutionModeSubgroupSize = 35, - ExecutionModeSubgroupsPerWorkgroup = 36, - ExecutionModeMax = 0x7fffffff, -}; - -enum StorageClass { - StorageClassUniformConstant = 0, - StorageClassInput = 1, - StorageClassUniform = 2, - StorageClassOutput = 3, - StorageClassWorkgroup = 4, - StorageClassCrossWorkgroup = 5, - StorageClassPrivate = 6, - StorageClassFunction = 7, - StorageClassGeneric = 8, - StorageClassPushConstant = 9, - StorageClassAtomicCounter = 10, - StorageClassImage = 11, - StorageClassMax = 0x7fffffff, -}; - -enum Dim { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - DimCube = 3, - DimRect = 4, - DimBuffer = 5, - DimSubpassData = 6, - DimMax = 0x7fffffff, -}; - -enum SamplerAddressingMode { - SamplerAddressingModeNone = 0, - SamplerAddressingModeClampToEdge = 1, - SamplerAddressingModeClamp = 2, - SamplerAddressingModeRepeat = 3, - SamplerAddressingModeRepeatMirrored = 4, - SamplerAddressingModeMax = 0x7fffffff, -}; - -enum SamplerFilterMode { - SamplerFilterModeNearest = 0, - SamplerFilterModeLinear = 1, - SamplerFilterModeMax = 0x7fffffff, -}; - -enum ImageFormat { - ImageFormatUnknown = 0, - ImageFormatRgba32f = 1, - ImageFormatRgba16f = 2, - ImageFormatR32f = 3, - ImageFormatRgba8 = 4, - ImageFormatRgba8Snorm = 5, - ImageFormatRg32f = 6, - ImageFormatRg16f = 7, - ImageFormatR11fG11fB10f = 8, - ImageFormatR16f = 9, - ImageFormatRgba16 = 10, - ImageFormatRgb10A2 = 11, - ImageFormatRg16 = 12, - ImageFormatRg8 = 13, - ImageFormatR16 = 14, - ImageFormatR8 = 15, - ImageFormatRgba16Snorm = 16, - ImageFormatRg16Snorm = 17, - ImageFormatRg8Snorm = 18, - ImageFormatR16Snorm = 19, - ImageFormatR8Snorm = 20, - ImageFormatRgba32i = 21, - ImageFormatRgba16i = 22, - ImageFormatRgba8i = 23, - ImageFormatR32i = 24, - ImageFormatRg32i = 25, - ImageFormatRg16i = 26, - ImageFormatRg8i = 27, - ImageFormatR16i = 28, - ImageFormatR8i = 29, - ImageFormatRgba32ui = 30, - ImageFormatRgba16ui = 31, - ImageFormatRgba8ui = 32, - ImageFormatR32ui = 33, - ImageFormatRgb10a2ui = 34, - ImageFormatRg32ui = 35, - ImageFormatRg16ui = 36, - ImageFormatRg8ui = 37, - ImageFormatR16ui = 38, - ImageFormatR8ui = 39, - ImageFormatMax = 0x7fffffff, -}; - -enum ImageChannelOrder { - ImageChannelOrderR = 0, - ImageChannelOrderA = 1, - ImageChannelOrderRG = 2, - ImageChannelOrderRA = 3, - ImageChannelOrderRGB = 4, - ImageChannelOrderRGBA = 5, - ImageChannelOrderBGRA = 6, - ImageChannelOrderARGB = 7, - ImageChannelOrderIntensity = 8, - ImageChannelOrderLuminance = 9, - ImageChannelOrderRx = 10, - ImageChannelOrderRGx = 11, - ImageChannelOrderRGBx = 12, - ImageChannelOrderDepth = 13, - ImageChannelOrderDepthStencil = 14, - ImageChannelOrdersRGB = 15, - ImageChannelOrdersRGBx = 16, - ImageChannelOrdersRGBA = 17, - ImageChannelOrdersBGRA = 18, - ImageChannelOrderABGR = 19, - ImageChannelOrderMax = 0x7fffffff, -}; - -enum ImageChannelDataType { - ImageChannelDataTypeSnormInt8 = 0, - ImageChannelDataTypeSnormInt16 = 1, - ImageChannelDataTypeUnormInt8 = 2, - ImageChannelDataTypeUnormInt16 = 3, - ImageChannelDataTypeUnormShort565 = 4, - ImageChannelDataTypeUnormShort555 = 5, - ImageChannelDataTypeUnormInt101010 = 6, - ImageChannelDataTypeSignedInt8 = 7, - ImageChannelDataTypeSignedInt16 = 8, - ImageChannelDataTypeSignedInt32 = 9, - ImageChannelDataTypeUnsignedInt8 = 10, - ImageChannelDataTypeUnsignedInt16 = 11, - ImageChannelDataTypeUnsignedInt32 = 12, - ImageChannelDataTypeHalfFloat = 13, - ImageChannelDataTypeFloat = 14, - ImageChannelDataTypeUnormInt24 = 15, - ImageChannelDataTypeUnormInt101010_2 = 16, - ImageChannelDataTypeMax = 0x7fffffff, -}; - -enum ImageOperandsShift { - ImageOperandsBiasShift = 0, - ImageOperandsLodShift = 1, - ImageOperandsGradShift = 2, - ImageOperandsConstOffsetShift = 3, - ImageOperandsOffsetShift = 4, - ImageOperandsConstOffsetsShift = 5, - ImageOperandsSampleShift = 6, - ImageOperandsMinLodShift = 7, - ImageOperandsMax = 0x7fffffff, -}; - -enum ImageOperandsMask { - ImageOperandsMaskNone = 0, - ImageOperandsBiasMask = 0x00000001, - ImageOperandsLodMask = 0x00000002, - ImageOperandsGradMask = 0x00000004, - ImageOperandsConstOffsetMask = 0x00000008, - ImageOperandsOffsetMask = 0x00000010, - ImageOperandsConstOffsetsMask = 0x00000020, - ImageOperandsSampleMask = 0x00000040, - ImageOperandsMinLodMask = 0x00000080, -}; - -enum FPFastMathModeShift { - FPFastMathModeNotNaNShift = 0, - FPFastMathModeNotInfShift = 1, - FPFastMathModeNSZShift = 2, - FPFastMathModeAllowRecipShift = 3, - FPFastMathModeFastShift = 4, - FPFastMathModeMax = 0x7fffffff, -}; - -enum FPFastMathModeMask { - FPFastMathModeMaskNone = 0, - FPFastMathModeNotNaNMask = 0x00000001, - FPFastMathModeNotInfMask = 0x00000002, - FPFastMathModeNSZMask = 0x00000004, - FPFastMathModeAllowRecipMask = 0x00000008, - FPFastMathModeFastMask = 0x00000010, -}; - -enum FPRoundingMode { - FPRoundingModeRTE = 0, - FPRoundingModeRTZ = 1, - FPRoundingModeRTP = 2, - FPRoundingModeRTN = 3, - FPRoundingModeMax = 0x7fffffff, -}; - -enum LinkageType { - LinkageTypeExport = 0, - LinkageTypeImport = 1, - LinkageTypeMax = 0x7fffffff, -}; - -enum AccessQualifier { - AccessQualifierReadOnly = 0, - AccessQualifierWriteOnly = 1, - AccessQualifierReadWrite = 2, - AccessQualifierMax = 0x7fffffff, -}; - -enum FunctionParameterAttribute { - FunctionParameterAttributeZext = 0, - FunctionParameterAttributeSext = 1, - FunctionParameterAttributeByVal = 2, - FunctionParameterAttributeSret = 3, - FunctionParameterAttributeNoAlias = 4, - FunctionParameterAttributeNoCapture = 5, - FunctionParameterAttributeNoWrite = 6, - FunctionParameterAttributeNoReadWrite = 7, - FunctionParameterAttributeMax = 0x7fffffff, -}; - -enum Decoration { - DecorationRelaxedPrecision = 0, - DecorationSpecId = 1, - DecorationBlock = 2, - DecorationBufferBlock = 3, - DecorationRowMajor = 4, - DecorationColMajor = 5, - DecorationArrayStride = 6, - DecorationMatrixStride = 7, - DecorationGLSLShared = 8, - DecorationGLSLPacked = 9, - DecorationCPacked = 10, - DecorationBuiltIn = 11, - DecorationNoPerspective = 13, - DecorationFlat = 14, - DecorationPatch = 15, - DecorationCentroid = 16, - DecorationSample = 17, - DecorationInvariant = 18, - DecorationRestrict = 19, - DecorationAliased = 20, - DecorationVolatile = 21, - DecorationConstant = 22, - DecorationCoherent = 23, - DecorationNonWritable = 24, - DecorationNonReadable = 25, - DecorationUniform = 26, - DecorationSaturatedConversion = 28, - DecorationStream = 29, - DecorationLocation = 30, - DecorationComponent = 31, - DecorationIndex = 32, - DecorationBinding = 33, - DecorationDescriptorSet = 34, - DecorationOffset = 35, - DecorationXfbBuffer = 36, - DecorationXfbStride = 37, - DecorationFuncParamAttr = 38, - DecorationFPRoundingMode = 39, - DecorationFPFastMathMode = 40, - DecorationLinkageAttributes = 41, - DecorationNoContraction = 42, - DecorationInputAttachmentIndex = 43, - DecorationAlignment = 44, - DecorationMaxByteOffset = 45, - DecorationMax = 0x7fffffff, -}; - -enum BuiltIn { - BuiltInPosition = 0, - BuiltInPointSize = 1, - BuiltInClipDistance = 3, - BuiltInCullDistance = 4, - BuiltInVertexId = 5, - BuiltInInstanceId = 6, - BuiltInPrimitiveId = 7, - BuiltInInvocationId = 8, - BuiltInLayer = 9, - BuiltInViewportIndex = 10, - BuiltInTessLevelOuter = 11, - BuiltInTessLevelInner = 12, - BuiltInTessCoord = 13, - BuiltInPatchVertices = 14, - BuiltInFragCoord = 15, - BuiltInPointCoord = 16, - BuiltInFrontFacing = 17, - BuiltInSampleId = 18, - BuiltInSamplePosition = 19, - BuiltInSampleMask = 20, - BuiltInFragDepth = 22, - BuiltInHelperInvocation = 23, - BuiltInNumWorkgroups = 24, - BuiltInWorkgroupSize = 25, - BuiltInWorkgroupId = 26, - BuiltInLocalInvocationId = 27, - BuiltInGlobalInvocationId = 28, - BuiltInLocalInvocationIndex = 29, - BuiltInWorkDim = 30, - BuiltInGlobalSize = 31, - BuiltInEnqueuedWorkgroupSize = 32, - BuiltInGlobalOffset = 33, - BuiltInGlobalLinearId = 34, - BuiltInSubgroupSize = 36, - BuiltInSubgroupMaxSize = 37, - BuiltInNumSubgroups = 38, - BuiltInNumEnqueuedSubgroups = 39, - BuiltInSubgroupId = 40, - BuiltInSubgroupLocalInvocationId = 41, - BuiltInVertexIndex = 42, - BuiltInInstanceIndex = 43, - BuiltInSubgroupEqMaskKHR = 4416, - BuiltInSubgroupGeMaskKHR = 4417, - BuiltInSubgroupGtMaskKHR = 4418, - BuiltInSubgroupLeMaskKHR = 4419, - BuiltInSubgroupLtMaskKHR = 4420, - BuiltInBaseVertex = 4424, - BuiltInBaseInstance = 4425, - BuiltInDrawIndex = 4426, - BuiltInMax = 0x7fffffff, -}; - -enum SelectionControlShift { - SelectionControlFlattenShift = 0, - SelectionControlDontFlattenShift = 1, - SelectionControlMax = 0x7fffffff, -}; - -enum SelectionControlMask { - SelectionControlMaskNone = 0, - SelectionControlFlattenMask = 0x00000001, - SelectionControlDontFlattenMask = 0x00000002, -}; - -enum LoopControlShift { - LoopControlUnrollShift = 0, - LoopControlDontUnrollShift = 1, - LoopControlDependencyInfiniteShift = 2, - LoopControlDependencyLengthShift = 3, - LoopControlMax = 0x7fffffff, -}; - -enum LoopControlMask { - LoopControlMaskNone = 0, - LoopControlUnrollMask = 0x00000001, - LoopControlDontUnrollMask = 0x00000002, - LoopControlDependencyInfiniteMask = 0x00000004, - LoopControlDependencyLengthMask = 0x00000008, -}; - -enum FunctionControlShift { - FunctionControlInlineShift = 0, - FunctionControlDontInlineShift = 1, - FunctionControlPureShift = 2, - FunctionControlConstShift = 3, - FunctionControlMax = 0x7fffffff, -}; - -enum FunctionControlMask { - FunctionControlMaskNone = 0, - FunctionControlInlineMask = 0x00000001, - FunctionControlDontInlineMask = 0x00000002, - FunctionControlPureMask = 0x00000004, - FunctionControlConstMask = 0x00000008, -}; - -enum MemorySemanticsShift { - MemorySemanticsAcquireShift = 1, - MemorySemanticsReleaseShift = 2, - MemorySemanticsAcquireReleaseShift = 3, - MemorySemanticsSequentiallyConsistentShift = 4, - MemorySemanticsUniformMemoryShift = 6, - MemorySemanticsSubgroupMemoryShift = 7, - MemorySemanticsWorkgroupMemoryShift = 8, - MemorySemanticsCrossWorkgroupMemoryShift = 9, - MemorySemanticsAtomicCounterMemoryShift = 10, - MemorySemanticsImageMemoryShift = 11, - MemorySemanticsMax = 0x7fffffff, -}; - -enum MemorySemanticsMask { - MemorySemanticsMaskNone = 0, - MemorySemanticsAcquireMask = 0x00000002, - MemorySemanticsReleaseMask = 0x00000004, - MemorySemanticsAcquireReleaseMask = 0x00000008, - MemorySemanticsSequentiallyConsistentMask = 0x00000010, - MemorySemanticsUniformMemoryMask = 0x00000040, - MemorySemanticsSubgroupMemoryMask = 0x00000080, - MemorySemanticsWorkgroupMemoryMask = 0x00000100, - MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, - MemorySemanticsAtomicCounterMemoryMask = 0x00000400, - MemorySemanticsImageMemoryMask = 0x00000800, -}; - -enum MemoryAccessShift { - MemoryAccessVolatileShift = 0, - MemoryAccessAlignedShift = 1, - MemoryAccessNontemporalShift = 2, - MemoryAccessMax = 0x7fffffff, -}; - -enum MemoryAccessMask { - MemoryAccessMaskNone = 0, - MemoryAccessVolatileMask = 0x00000001, - MemoryAccessAlignedMask = 0x00000002, - MemoryAccessNontemporalMask = 0x00000004, -}; - -enum Scope { - ScopeCrossDevice = 0, - ScopeDevice = 1, - ScopeWorkgroup = 2, - ScopeSubgroup = 3, - ScopeInvocation = 4, - ScopeMax = 0x7fffffff, -}; - -enum GroupOperation { - GroupOperationReduce = 0, - GroupOperationInclusiveScan = 1, - GroupOperationExclusiveScan = 2, - GroupOperationMax = 0x7fffffff, -}; - -enum KernelEnqueueFlags { - KernelEnqueueFlagsNoWait = 0, - KernelEnqueueFlagsWaitKernel = 1, - KernelEnqueueFlagsWaitWorkGroup = 2, - KernelEnqueueFlagsMax = 0x7fffffff, -}; - -enum KernelProfilingInfoShift { - KernelProfilingInfoCmdExecTimeShift = 0, - KernelProfilingInfoMax = 0x7fffffff, -}; - -enum KernelProfilingInfoMask { - KernelProfilingInfoMaskNone = 0, - KernelProfilingInfoCmdExecTimeMask = 0x00000001, -}; - -enum Capability { - CapabilityMatrix = 0, - CapabilityShader = 1, - CapabilityGeometry = 2, - CapabilityTessellation = 3, - CapabilityAddresses = 4, - CapabilityLinkage = 5, - CapabilityKernel = 6, - CapabilityVector16 = 7, - CapabilityFloat16Buffer = 8, - CapabilityFloat16 = 9, - CapabilityFloat64 = 10, - CapabilityInt64 = 11, - CapabilityInt64Atomics = 12, - CapabilityImageBasic = 13, - CapabilityImageReadWrite = 14, - CapabilityImageMipmap = 15, - CapabilityPipes = 17, - CapabilityGroups = 18, - CapabilityDeviceEnqueue = 19, - CapabilityLiteralSampler = 20, - CapabilityAtomicStorage = 21, - CapabilityInt16 = 22, - CapabilityTessellationPointSize = 23, - CapabilityGeometryPointSize = 24, - CapabilityImageGatherExtended = 25, - CapabilityStorageImageMultisample = 27, - CapabilityUniformBufferArrayDynamicIndexing = 28, - CapabilitySampledImageArrayDynamicIndexing = 29, - CapabilityStorageBufferArrayDynamicIndexing = 30, - CapabilityStorageImageArrayDynamicIndexing = 31, - CapabilityClipDistance = 32, - CapabilityCullDistance = 33, - CapabilityImageCubeArray = 34, - CapabilitySampleRateShading = 35, - CapabilityImageRect = 36, - CapabilitySampledRect = 37, - CapabilityGenericPointer = 38, - CapabilityInt8 = 39, - CapabilityInputAttachment = 40, - CapabilitySparseResidency = 41, - CapabilityMinLod = 42, - CapabilitySampled1D = 43, - CapabilityImage1D = 44, - CapabilitySampledCubeArray = 45, - CapabilitySampledBuffer = 46, - CapabilityImageBuffer = 47, - CapabilityImageMSArray = 48, - CapabilityStorageImageExtendedFormats = 49, - CapabilityImageQuery = 50, - CapabilityDerivativeControl = 51, - CapabilityInterpolationFunction = 52, - CapabilityTransformFeedback = 53, - CapabilityGeometryStreams = 54, - CapabilityStorageImageReadWithoutFormat = 55, - CapabilityStorageImageWriteWithoutFormat = 56, - CapabilityMultiViewport = 57, - CapabilitySubgroupDispatch = 58, - CapabilityNamedBarrier = 59, - CapabilityPipeStorage = 60, - CapabilitySubgroupBallotKHR = 4423, - CapabilityDrawParameters = 4427, - CapabilitySubgroupVoteKHR = 4431, - CapabilityMax = 0x7fffffff, -}; - -enum Op { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpSubgroupReadInvocationKHR = 4432, - OpMax = 0x7fffffff, -}; - -// Overload operator| for mask bit combining - -inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } -inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } -inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } -inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } -inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } -inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } -inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } -inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } - -} // end namespace spv - -#endif // #ifndef spirv_HPP - +// Copyright (c) 2014-2017 The Khronos Group Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and/or associated documentation files (the "Materials"), +// to deal in the Materials without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Materials, and to permit persons to whom the +// Materials are furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Materials. +// +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// +// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +// IN THE MATERIALS. + +// This header is automatically generated by the same tool that creates +// the Binary Section of the SPIR-V specification. + +// Enumeration tokens for SPIR-V, in various styles: +// C, C++, C++11, JSON, Lua, Python +// +// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// +// Some tokens act like mask values, which can be OR'd together, +// while others are mutually exclusive. The mask-like ones have +// "Mask" in their name, and a parallel enum that has the shift +// amount (1 << x) for each corresponding enumerant. + +#ifndef spirv_HPP +#define spirv_HPP + +namespace spv { + +typedef unsigned int Id; + +#define SPV_VERSION 0x10100 +#define SPV_REVISION 6 + +static const unsigned int MagicNumber = 0x07230203; +static const unsigned int Version = 0x00010100; +static const unsigned int Revision = 6; +static const unsigned int OpCodeMask = 0xffff; +static const unsigned int WordCountShift = 16; + +enum SourceLanguage { + SourceLanguageUnknown = 0, + SourceLanguageESSL = 1, + SourceLanguageGLSL = 2, + SourceLanguageOpenCL_C = 3, + SourceLanguageOpenCL_CPP = 4, + SourceLanguageMax = 0x7fffffff, +}; + +enum ExecutionModel { + ExecutionModelVertex = 0, + ExecutionModelTessellationControl = 1, + ExecutionModelTessellationEvaluation = 2, + ExecutionModelGeometry = 3, + ExecutionModelFragment = 4, + ExecutionModelGLCompute = 5, + ExecutionModelKernel = 6, + ExecutionModelMax = 0x7fffffff, +}; + +enum AddressingModel { + AddressingModelLogical = 0, + AddressingModelPhysical32 = 1, + AddressingModelPhysical64 = 2, + AddressingModelMax = 0x7fffffff, +}; + +enum MemoryModel { + MemoryModelSimple = 0, + MemoryModelGLSL450 = 1, + MemoryModelOpenCL = 2, + MemoryModelMax = 0x7fffffff, +}; + +enum ExecutionMode { + ExecutionModeInvocations = 0, + ExecutionModeSpacingEqual = 1, + ExecutionModeSpacingFractionalEven = 2, + ExecutionModeSpacingFractionalOdd = 3, + ExecutionModeVertexOrderCw = 4, + ExecutionModeVertexOrderCcw = 5, + ExecutionModePixelCenterInteger = 6, + ExecutionModeOriginUpperLeft = 7, + ExecutionModeOriginLowerLeft = 8, + ExecutionModeEarlyFragmentTests = 9, + ExecutionModePointMode = 10, + ExecutionModeXfb = 11, + ExecutionModeDepthReplacing = 12, + ExecutionModeDepthGreater = 14, + ExecutionModeDepthLess = 15, + ExecutionModeDepthUnchanged = 16, + ExecutionModeLocalSize = 17, + ExecutionModeLocalSizeHint = 18, + ExecutionModeInputPoints = 19, + ExecutionModeInputLines = 20, + ExecutionModeInputLinesAdjacency = 21, + ExecutionModeTriangles = 22, + ExecutionModeInputTrianglesAdjacency = 23, + ExecutionModeQuads = 24, + ExecutionModeIsolines = 25, + ExecutionModeOutputVertices = 26, + ExecutionModeOutputPoints = 27, + ExecutionModeOutputLineStrip = 28, + ExecutionModeOutputTriangleStrip = 29, + ExecutionModeVecTypeHint = 30, + ExecutionModeContractionOff = 31, + ExecutionModeInitializer = 33, + ExecutionModeFinalizer = 34, + ExecutionModeSubgroupSize = 35, + ExecutionModeSubgroupsPerWorkgroup = 36, + ExecutionModeMax = 0x7fffffff, +}; + +enum StorageClass { + StorageClassUniformConstant = 0, + StorageClassInput = 1, + StorageClassUniform = 2, + StorageClassOutput = 3, + StorageClassWorkgroup = 4, + StorageClassCrossWorkgroup = 5, + StorageClassPrivate = 6, + StorageClassFunction = 7, + StorageClassGeneric = 8, + StorageClassPushConstant = 9, + StorageClassAtomicCounter = 10, + StorageClassImage = 11, + StorageClassMax = 0x7fffffff, +}; + +enum Dim { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + DimCube = 3, + DimRect = 4, + DimBuffer = 5, + DimSubpassData = 6, + DimMax = 0x7fffffff, +}; + +enum SamplerAddressingMode { + SamplerAddressingModeNone = 0, + SamplerAddressingModeClampToEdge = 1, + SamplerAddressingModeClamp = 2, + SamplerAddressingModeRepeat = 3, + SamplerAddressingModeRepeatMirrored = 4, + SamplerAddressingModeMax = 0x7fffffff, +}; + +enum SamplerFilterMode { + SamplerFilterModeNearest = 0, + SamplerFilterModeLinear = 1, + SamplerFilterModeMax = 0x7fffffff, +}; + +enum ImageFormat { + ImageFormatUnknown = 0, + ImageFormatRgba32f = 1, + ImageFormatRgba16f = 2, + ImageFormatR32f = 3, + ImageFormatRgba8 = 4, + ImageFormatRgba8Snorm = 5, + ImageFormatRg32f = 6, + ImageFormatRg16f = 7, + ImageFormatR11fG11fB10f = 8, + ImageFormatR16f = 9, + ImageFormatRgba16 = 10, + ImageFormatRgb10A2 = 11, + ImageFormatRg16 = 12, + ImageFormatRg8 = 13, + ImageFormatR16 = 14, + ImageFormatR8 = 15, + ImageFormatRgba16Snorm = 16, + ImageFormatRg16Snorm = 17, + ImageFormatRg8Snorm = 18, + ImageFormatR16Snorm = 19, + ImageFormatR8Snorm = 20, + ImageFormatRgba32i = 21, + ImageFormatRgba16i = 22, + ImageFormatRgba8i = 23, + ImageFormatR32i = 24, + ImageFormatRg32i = 25, + ImageFormatRg16i = 26, + ImageFormatRg8i = 27, + ImageFormatR16i = 28, + ImageFormatR8i = 29, + ImageFormatRgba32ui = 30, + ImageFormatRgba16ui = 31, + ImageFormatRgba8ui = 32, + ImageFormatR32ui = 33, + ImageFormatRgb10a2ui = 34, + ImageFormatRg32ui = 35, + ImageFormatRg16ui = 36, + ImageFormatRg8ui = 37, + ImageFormatR16ui = 38, + ImageFormatR8ui = 39, + ImageFormatMax = 0x7fffffff, +}; + +enum ImageChannelOrder { + ImageChannelOrderR = 0, + ImageChannelOrderA = 1, + ImageChannelOrderRG = 2, + ImageChannelOrderRA = 3, + ImageChannelOrderRGB = 4, + ImageChannelOrderRGBA = 5, + ImageChannelOrderBGRA = 6, + ImageChannelOrderARGB = 7, + ImageChannelOrderIntensity = 8, + ImageChannelOrderLuminance = 9, + ImageChannelOrderRx = 10, + ImageChannelOrderRGx = 11, + ImageChannelOrderRGBx = 12, + ImageChannelOrderDepth = 13, + ImageChannelOrderDepthStencil = 14, + ImageChannelOrdersRGB = 15, + ImageChannelOrdersRGBx = 16, + ImageChannelOrdersRGBA = 17, + ImageChannelOrdersBGRA = 18, + ImageChannelOrderABGR = 19, + ImageChannelOrderMax = 0x7fffffff, +}; + +enum ImageChannelDataType { + ImageChannelDataTypeSnormInt8 = 0, + ImageChannelDataTypeSnormInt16 = 1, + ImageChannelDataTypeUnormInt8 = 2, + ImageChannelDataTypeUnormInt16 = 3, + ImageChannelDataTypeUnormShort565 = 4, + ImageChannelDataTypeUnormShort555 = 5, + ImageChannelDataTypeUnormInt101010 = 6, + ImageChannelDataTypeSignedInt8 = 7, + ImageChannelDataTypeSignedInt16 = 8, + ImageChannelDataTypeSignedInt32 = 9, + ImageChannelDataTypeUnsignedInt8 = 10, + ImageChannelDataTypeUnsignedInt16 = 11, + ImageChannelDataTypeUnsignedInt32 = 12, + ImageChannelDataTypeHalfFloat = 13, + ImageChannelDataTypeFloat = 14, + ImageChannelDataTypeUnormInt24 = 15, + ImageChannelDataTypeUnormInt101010_2 = 16, + ImageChannelDataTypeMax = 0x7fffffff, +}; + +enum ImageOperandsShift { + ImageOperandsBiasShift = 0, + ImageOperandsLodShift = 1, + ImageOperandsGradShift = 2, + ImageOperandsConstOffsetShift = 3, + ImageOperandsOffsetShift = 4, + ImageOperandsConstOffsetsShift = 5, + ImageOperandsSampleShift = 6, + ImageOperandsMinLodShift = 7, + ImageOperandsMax = 0x7fffffff, +}; + +enum ImageOperandsMask { + ImageOperandsMaskNone = 0, + ImageOperandsBiasMask = 0x00000001, + ImageOperandsLodMask = 0x00000002, + ImageOperandsGradMask = 0x00000004, + ImageOperandsConstOffsetMask = 0x00000008, + ImageOperandsOffsetMask = 0x00000010, + ImageOperandsConstOffsetsMask = 0x00000020, + ImageOperandsSampleMask = 0x00000040, + ImageOperandsMinLodMask = 0x00000080, +}; + +enum FPFastMathModeShift { + FPFastMathModeNotNaNShift = 0, + FPFastMathModeNotInfShift = 1, + FPFastMathModeNSZShift = 2, + FPFastMathModeAllowRecipShift = 3, + FPFastMathModeFastShift = 4, + FPFastMathModeMax = 0x7fffffff, +}; + +enum FPFastMathModeMask { + FPFastMathModeMaskNone = 0, + FPFastMathModeNotNaNMask = 0x00000001, + FPFastMathModeNotInfMask = 0x00000002, + FPFastMathModeNSZMask = 0x00000004, + FPFastMathModeAllowRecipMask = 0x00000008, + FPFastMathModeFastMask = 0x00000010, +}; + +enum FPRoundingMode { + FPRoundingModeRTE = 0, + FPRoundingModeRTZ = 1, + FPRoundingModeRTP = 2, + FPRoundingModeRTN = 3, + FPRoundingModeMax = 0x7fffffff, +}; + +enum LinkageType { + LinkageTypeExport = 0, + LinkageTypeImport = 1, + LinkageTypeMax = 0x7fffffff, +}; + +enum AccessQualifier { + AccessQualifierReadOnly = 0, + AccessQualifierWriteOnly = 1, + AccessQualifierReadWrite = 2, + AccessQualifierMax = 0x7fffffff, +}; + +enum FunctionParameterAttribute { + FunctionParameterAttributeZext = 0, + FunctionParameterAttributeSext = 1, + FunctionParameterAttributeByVal = 2, + FunctionParameterAttributeSret = 3, + FunctionParameterAttributeNoAlias = 4, + FunctionParameterAttributeNoCapture = 5, + FunctionParameterAttributeNoWrite = 6, + FunctionParameterAttributeNoReadWrite = 7, + FunctionParameterAttributeMax = 0x7fffffff, +}; + +enum Decoration { + DecorationRelaxedPrecision = 0, + DecorationSpecId = 1, + DecorationBlock = 2, + DecorationBufferBlock = 3, + DecorationRowMajor = 4, + DecorationColMajor = 5, + DecorationArrayStride = 6, + DecorationMatrixStride = 7, + DecorationGLSLShared = 8, + DecorationGLSLPacked = 9, + DecorationCPacked = 10, + DecorationBuiltIn = 11, + DecorationNoPerspective = 13, + DecorationFlat = 14, + DecorationPatch = 15, + DecorationCentroid = 16, + DecorationSample = 17, + DecorationInvariant = 18, + DecorationRestrict = 19, + DecorationAliased = 20, + DecorationVolatile = 21, + DecorationConstant = 22, + DecorationCoherent = 23, + DecorationNonWritable = 24, + DecorationNonReadable = 25, + DecorationUniform = 26, + DecorationSaturatedConversion = 28, + DecorationStream = 29, + DecorationLocation = 30, + DecorationComponent = 31, + DecorationIndex = 32, + DecorationBinding = 33, + DecorationDescriptorSet = 34, + DecorationOffset = 35, + DecorationXfbBuffer = 36, + DecorationXfbStride = 37, + DecorationFuncParamAttr = 38, + DecorationFPRoundingMode = 39, + DecorationFPFastMathMode = 40, + DecorationLinkageAttributes = 41, + DecorationNoContraction = 42, + DecorationInputAttachmentIndex = 43, + DecorationAlignment = 44, + DecorationMaxByteOffset = 45, + DecorationOverrideCoverageNV = 5248, + DecorationPassthroughNV = 5250, + DecorationViewportRelativeNV = 5252, + DecorationSecondaryViewportRelativeNV = 5256, + DecorationMax = 0x7fffffff, +}; + +enum BuiltIn { + BuiltInPosition = 0, + BuiltInPointSize = 1, + BuiltInClipDistance = 3, + BuiltInCullDistance = 4, + BuiltInVertexId = 5, + BuiltInInstanceId = 6, + BuiltInPrimitiveId = 7, + BuiltInInvocationId = 8, + BuiltInLayer = 9, + BuiltInViewportIndex = 10, + BuiltInTessLevelOuter = 11, + BuiltInTessLevelInner = 12, + BuiltInTessCoord = 13, + BuiltInPatchVertices = 14, + BuiltInFragCoord = 15, + BuiltInPointCoord = 16, + BuiltInFrontFacing = 17, + BuiltInSampleId = 18, + BuiltInSamplePosition = 19, + BuiltInSampleMask = 20, + BuiltInFragDepth = 22, + BuiltInHelperInvocation = 23, + BuiltInNumWorkgroups = 24, + BuiltInWorkgroupSize = 25, + BuiltInWorkgroupId = 26, + BuiltInLocalInvocationId = 27, + BuiltInGlobalInvocationId = 28, + BuiltInLocalInvocationIndex = 29, + BuiltInWorkDim = 30, + BuiltInGlobalSize = 31, + BuiltInEnqueuedWorkgroupSize = 32, + BuiltInGlobalOffset = 33, + BuiltInGlobalLinearId = 34, + BuiltInSubgroupSize = 36, + BuiltInSubgroupMaxSize = 37, + BuiltInNumSubgroups = 38, + BuiltInNumEnqueuedSubgroups = 39, + BuiltInSubgroupId = 40, + BuiltInSubgroupLocalInvocationId = 41, + BuiltInVertexIndex = 42, + BuiltInInstanceIndex = 43, + BuiltInSubgroupEqMaskKHR = 4416, + BuiltInSubgroupGeMaskKHR = 4417, + BuiltInSubgroupGtMaskKHR = 4418, + BuiltInSubgroupLeMaskKHR = 4419, + BuiltInSubgroupLtMaskKHR = 4420, + BuiltInBaseVertex = 4424, + BuiltInBaseInstance = 4425, + BuiltInDrawIndex = 4426, + BuiltInDeviceIndex = 4438, + BuiltInViewIndex = 4440, + BuiltInViewportMaskNV = 5253, + BuiltInSecondaryPositionNV = 5257, + BuiltInSecondaryViewportMaskNV = 5258, + BuiltInPositionPerViewNV = 5261, + BuiltInViewportMaskPerViewNV = 5262, + BuiltInMax = 0x7fffffff, +}; + +enum SelectionControlShift { + SelectionControlFlattenShift = 0, + SelectionControlDontFlattenShift = 1, + SelectionControlMax = 0x7fffffff, +}; + +enum SelectionControlMask { + SelectionControlMaskNone = 0, + SelectionControlFlattenMask = 0x00000001, + SelectionControlDontFlattenMask = 0x00000002, +}; + +enum LoopControlShift { + LoopControlUnrollShift = 0, + LoopControlDontUnrollShift = 1, + LoopControlDependencyInfiniteShift = 2, + LoopControlDependencyLengthShift = 3, + LoopControlMax = 0x7fffffff, +}; + +enum LoopControlMask { + LoopControlMaskNone = 0, + LoopControlUnrollMask = 0x00000001, + LoopControlDontUnrollMask = 0x00000002, + LoopControlDependencyInfiniteMask = 0x00000004, + LoopControlDependencyLengthMask = 0x00000008, +}; + +enum FunctionControlShift { + FunctionControlInlineShift = 0, + FunctionControlDontInlineShift = 1, + FunctionControlPureShift = 2, + FunctionControlConstShift = 3, + FunctionControlMax = 0x7fffffff, +}; + +enum FunctionControlMask { + FunctionControlMaskNone = 0, + FunctionControlInlineMask = 0x00000001, + FunctionControlDontInlineMask = 0x00000002, + FunctionControlPureMask = 0x00000004, + FunctionControlConstMask = 0x00000008, +}; + +enum MemorySemanticsShift { + MemorySemanticsAcquireShift = 1, + MemorySemanticsReleaseShift = 2, + MemorySemanticsAcquireReleaseShift = 3, + MemorySemanticsSequentiallyConsistentShift = 4, + MemorySemanticsUniformMemoryShift = 6, + MemorySemanticsSubgroupMemoryShift = 7, + MemorySemanticsWorkgroupMemoryShift = 8, + MemorySemanticsCrossWorkgroupMemoryShift = 9, + MemorySemanticsAtomicCounterMemoryShift = 10, + MemorySemanticsImageMemoryShift = 11, + MemorySemanticsMax = 0x7fffffff, +}; + +enum MemorySemanticsMask { + MemorySemanticsMaskNone = 0, + MemorySemanticsAcquireMask = 0x00000002, + MemorySemanticsReleaseMask = 0x00000004, + MemorySemanticsAcquireReleaseMask = 0x00000008, + MemorySemanticsSequentiallyConsistentMask = 0x00000010, + MemorySemanticsUniformMemoryMask = 0x00000040, + MemorySemanticsSubgroupMemoryMask = 0x00000080, + MemorySemanticsWorkgroupMemoryMask = 0x00000100, + MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, + MemorySemanticsAtomicCounterMemoryMask = 0x00000400, + MemorySemanticsImageMemoryMask = 0x00000800, +}; + +enum MemoryAccessShift { + MemoryAccessVolatileShift = 0, + MemoryAccessAlignedShift = 1, + MemoryAccessNontemporalShift = 2, + MemoryAccessMax = 0x7fffffff, +}; + +enum MemoryAccessMask { + MemoryAccessMaskNone = 0, + MemoryAccessVolatileMask = 0x00000001, + MemoryAccessAlignedMask = 0x00000002, + MemoryAccessNontemporalMask = 0x00000004, +}; + +enum Scope { + ScopeCrossDevice = 0, + ScopeDevice = 1, + ScopeWorkgroup = 2, + ScopeSubgroup = 3, + ScopeInvocation = 4, + ScopeMax = 0x7fffffff, +}; + +enum GroupOperation { + GroupOperationReduce = 0, + GroupOperationInclusiveScan = 1, + GroupOperationExclusiveScan = 2, + GroupOperationMax = 0x7fffffff, +}; + +enum KernelEnqueueFlags { + KernelEnqueueFlagsNoWait = 0, + KernelEnqueueFlagsWaitKernel = 1, + KernelEnqueueFlagsWaitWorkGroup = 2, + KernelEnqueueFlagsMax = 0x7fffffff, +}; + +enum KernelProfilingInfoShift { + KernelProfilingInfoCmdExecTimeShift = 0, + KernelProfilingInfoMax = 0x7fffffff, +}; + +enum KernelProfilingInfoMask { + KernelProfilingInfoMaskNone = 0, + KernelProfilingInfoCmdExecTimeMask = 0x00000001, +}; + +enum Capability { + CapabilityMatrix = 0, + CapabilityShader = 1, + CapabilityGeometry = 2, + CapabilityTessellation = 3, + CapabilityAddresses = 4, + CapabilityLinkage = 5, + CapabilityKernel = 6, + CapabilityVector16 = 7, + CapabilityFloat16Buffer = 8, + CapabilityFloat16 = 9, + CapabilityFloat64 = 10, + CapabilityInt64 = 11, + CapabilityInt64Atomics = 12, + CapabilityImageBasic = 13, + CapabilityImageReadWrite = 14, + CapabilityImageMipmap = 15, + CapabilityPipes = 17, + CapabilityGroups = 18, + CapabilityDeviceEnqueue = 19, + CapabilityLiteralSampler = 20, + CapabilityAtomicStorage = 21, + CapabilityInt16 = 22, + CapabilityTessellationPointSize = 23, + CapabilityGeometryPointSize = 24, + CapabilityImageGatherExtended = 25, + CapabilityStorageImageMultisample = 27, + CapabilityUniformBufferArrayDynamicIndexing = 28, + CapabilitySampledImageArrayDynamicIndexing = 29, + CapabilityStorageBufferArrayDynamicIndexing = 30, + CapabilityStorageImageArrayDynamicIndexing = 31, + CapabilityClipDistance = 32, + CapabilityCullDistance = 33, + CapabilityImageCubeArray = 34, + CapabilitySampleRateShading = 35, + CapabilityImageRect = 36, + CapabilitySampledRect = 37, + CapabilityGenericPointer = 38, + CapabilityInt8 = 39, + CapabilityInputAttachment = 40, + CapabilitySparseResidency = 41, + CapabilityMinLod = 42, + CapabilitySampled1D = 43, + CapabilityImage1D = 44, + CapabilitySampledCubeArray = 45, + CapabilitySampledBuffer = 46, + CapabilityImageBuffer = 47, + CapabilityImageMSArray = 48, + CapabilityStorageImageExtendedFormats = 49, + CapabilityImageQuery = 50, + CapabilityDerivativeControl = 51, + CapabilityInterpolationFunction = 52, + CapabilityTransformFeedback = 53, + CapabilityGeometryStreams = 54, + CapabilityStorageImageReadWithoutFormat = 55, + CapabilityStorageImageWriteWithoutFormat = 56, + CapabilityMultiViewport = 57, + CapabilitySubgroupDispatch = 58, + CapabilityNamedBarrier = 59, + CapabilityPipeStorage = 60, + CapabilitySubgroupBallotKHR = 4423, + CapabilityDrawParameters = 4427, + CapabilitySubgroupVoteKHR = 4431, + CapabilityStorageUniformBufferBlock16 = 4433, + CapabilityStorageUniform16 = 4434, + CapabilityStoragePushConstant16 = 4435, + CapabilityStorageInputOutput16 = 4436, + CapabilityDeviceGroup = 4437, + CapabilityMultiView = 4439, + CapabilitySampleMaskOverrideCoverageNV = 5249, + CapabilityGeometryShaderPassthroughNV = 5251, + CapabilityShaderViewportIndexLayerNV = 5254, + CapabilityShaderViewportMaskNV = 5255, + CapabilityShaderStereoViewNV = 5259, + CapabilityPerViewAttributesNV = 5260, + CapabilityMax = 0x7fffffff, +}; + +enum Op { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSizeOf = 321, + OpTypePipeStorage = 322, + OpConstantPipeStorage = 323, + OpCreatePipeFromPipeStorage = 324, + OpGetKernelLocalSizeForSubgroupCount = 325, + OpGetKernelMaxNumSubgroups = 326, + OpTypeNamedBarrier = 327, + OpNamedBarrierInitialize = 328, + OpMemoryNamedBarrier = 329, + OpModuleProcessed = 330, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + OpMax = 0x7fffffff, +}; + +// Overload operator| for mask bit combining + +inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } +inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } +inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } +inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } +inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } +inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } +inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } +inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } + +} // end namespace spv + +#endif // #ifndef spirv_HPP + diff --git a/ext/vulkan/spirv.hpp11 b/ext/vulkan/spirv.hpp11 index af30c6e860..b99396378c 100644 --- a/ext/vulkan/spirv.hpp11 +++ b/ext/vulkan/spirv.hpp11 @@ -1,951 +1,974 @@ -// Copyright (c) 2014-2017 The Khronos Group Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. - -// This header is automatically generated by the same tool that creates -// the Binary Section of the SPIR-V specification. - -// Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python -// -// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -// -// Some tokens act like mask values, which can be OR'd together, -// while others are mutually exclusive. The mask-like ones have -// "Mask" in their name, and a parallel enum that has the shift -// amount (1 << x) for each corresponding enumerant. - -#ifndef spirv_HPP -#define spirv_HPP - -namespace spv { - -typedef unsigned int Id; - -#define SPV_VERSION 0x10100 -#define SPV_REVISION 5 - -static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010100; -static const unsigned int Revision = 5; -static const unsigned int OpCodeMask = 0xffff; -static const unsigned int WordCountShift = 16; - -enum class SourceLanguage : unsigned { - Unknown = 0, - ESSL = 1, - GLSL = 2, - OpenCL_C = 3, - OpenCL_CPP = 4, - Max = 0x7fffffff, -}; - -enum class ExecutionModel : unsigned { - Vertex = 0, - TessellationControl = 1, - TessellationEvaluation = 2, - Geometry = 3, - Fragment = 4, - GLCompute = 5, - Kernel = 6, - Max = 0x7fffffff, -}; - -enum class AddressingModel : unsigned { - Logical = 0, - Physical32 = 1, - Physical64 = 2, - Max = 0x7fffffff, -}; - -enum class MemoryModel : unsigned { - Simple = 0, - GLSL450 = 1, - OpenCL = 2, - Max = 0x7fffffff, -}; - -enum class ExecutionMode : unsigned { - Invocations = 0, - SpacingEqual = 1, - SpacingFractionalEven = 2, - SpacingFractionalOdd = 3, - VertexOrderCw = 4, - VertexOrderCcw = 5, - PixelCenterInteger = 6, - OriginUpperLeft = 7, - OriginLowerLeft = 8, - EarlyFragmentTests = 9, - PointMode = 10, - Xfb = 11, - DepthReplacing = 12, - DepthGreater = 14, - DepthLess = 15, - DepthUnchanged = 16, - LocalSize = 17, - LocalSizeHint = 18, - InputPoints = 19, - InputLines = 20, - InputLinesAdjacency = 21, - Triangles = 22, - InputTrianglesAdjacency = 23, - Quads = 24, - Isolines = 25, - OutputVertices = 26, - OutputPoints = 27, - OutputLineStrip = 28, - OutputTriangleStrip = 29, - VecTypeHint = 30, - ContractionOff = 31, - Initializer = 33, - Finalizer = 34, - SubgroupSize = 35, - SubgroupsPerWorkgroup = 36, - Max = 0x7fffffff, -}; - -enum class StorageClass : unsigned { - UniformConstant = 0, - Input = 1, - Uniform = 2, - Output = 3, - Workgroup = 4, - CrossWorkgroup = 5, - Private = 6, - Function = 7, - Generic = 8, - PushConstant = 9, - AtomicCounter = 10, - Image = 11, - Max = 0x7fffffff, -}; - -enum class Dim : unsigned { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - Cube = 3, - Rect = 4, - Buffer = 5, - SubpassData = 6, - Max = 0x7fffffff, -}; - -enum class SamplerAddressingMode : unsigned { - None = 0, - ClampToEdge = 1, - Clamp = 2, - Repeat = 3, - RepeatMirrored = 4, - Max = 0x7fffffff, -}; - -enum class SamplerFilterMode : unsigned { - Nearest = 0, - Linear = 1, - Max = 0x7fffffff, -}; - -enum class ImageFormat : unsigned { - Unknown = 0, - Rgba32f = 1, - Rgba16f = 2, - R32f = 3, - Rgba8 = 4, - Rgba8Snorm = 5, - Rg32f = 6, - Rg16f = 7, - R11fG11fB10f = 8, - R16f = 9, - Rgba16 = 10, - Rgb10A2 = 11, - Rg16 = 12, - Rg8 = 13, - R16 = 14, - R8 = 15, - Rgba16Snorm = 16, - Rg16Snorm = 17, - Rg8Snorm = 18, - R16Snorm = 19, - R8Snorm = 20, - Rgba32i = 21, - Rgba16i = 22, - Rgba8i = 23, - R32i = 24, - Rg32i = 25, - Rg16i = 26, - Rg8i = 27, - R16i = 28, - R8i = 29, - Rgba32ui = 30, - Rgba16ui = 31, - Rgba8ui = 32, - R32ui = 33, - Rgb10a2ui = 34, - Rg32ui = 35, - Rg16ui = 36, - Rg8ui = 37, - R16ui = 38, - R8ui = 39, - Max = 0x7fffffff, -}; - -enum class ImageChannelOrder : unsigned { - R = 0, - A = 1, - RG = 2, - RA = 3, - RGB = 4, - RGBA = 5, - BGRA = 6, - ARGB = 7, - Intensity = 8, - Luminance = 9, - Rx = 10, - RGx = 11, - RGBx = 12, - Depth = 13, - DepthStencil = 14, - sRGB = 15, - sRGBx = 16, - sRGBA = 17, - sBGRA = 18, - ABGR = 19, - Max = 0x7fffffff, -}; - -enum class ImageChannelDataType : unsigned { - SnormInt8 = 0, - SnormInt16 = 1, - UnormInt8 = 2, - UnormInt16 = 3, - UnormShort565 = 4, - UnormShort555 = 5, - UnormInt101010 = 6, - SignedInt8 = 7, - SignedInt16 = 8, - SignedInt32 = 9, - UnsignedInt8 = 10, - UnsignedInt16 = 11, - UnsignedInt32 = 12, - HalfFloat = 13, - Float = 14, - UnormInt24 = 15, - UnormInt101010_2 = 16, - Max = 0x7fffffff, -}; - -enum class ImageOperandsShift : unsigned { - Bias = 0, - Lod = 1, - Grad = 2, - ConstOffset = 3, - Offset = 4, - ConstOffsets = 5, - Sample = 6, - MinLod = 7, - Max = 0x7fffffff, -}; - -enum class ImageOperandsMask : unsigned { - MaskNone = 0, - Bias = 0x00000001, - Lod = 0x00000002, - Grad = 0x00000004, - ConstOffset = 0x00000008, - Offset = 0x00000010, - ConstOffsets = 0x00000020, - Sample = 0x00000040, - MinLod = 0x00000080, -}; - -enum class FPFastMathModeShift : unsigned { - NotNaN = 0, - NotInf = 1, - NSZ = 2, - AllowRecip = 3, - Fast = 4, - Max = 0x7fffffff, -}; - -enum class FPFastMathModeMask : unsigned { - MaskNone = 0, - NotNaN = 0x00000001, - NotInf = 0x00000002, - NSZ = 0x00000004, - AllowRecip = 0x00000008, - Fast = 0x00000010, -}; - -enum class FPRoundingMode : unsigned { - RTE = 0, - RTZ = 1, - RTP = 2, - RTN = 3, - Max = 0x7fffffff, -}; - -enum class LinkageType : unsigned { - Export = 0, - Import = 1, - Max = 0x7fffffff, -}; - -enum class AccessQualifier : unsigned { - ReadOnly = 0, - WriteOnly = 1, - ReadWrite = 2, - Max = 0x7fffffff, -}; - -enum class FunctionParameterAttribute : unsigned { - Zext = 0, - Sext = 1, - ByVal = 2, - Sret = 3, - NoAlias = 4, - NoCapture = 5, - NoWrite = 6, - NoReadWrite = 7, - Max = 0x7fffffff, -}; - -enum class Decoration : unsigned { - RelaxedPrecision = 0, - SpecId = 1, - Block = 2, - BufferBlock = 3, - RowMajor = 4, - ColMajor = 5, - ArrayStride = 6, - MatrixStride = 7, - GLSLShared = 8, - GLSLPacked = 9, - CPacked = 10, - BuiltIn = 11, - NoPerspective = 13, - Flat = 14, - Patch = 15, - Centroid = 16, - Sample = 17, - Invariant = 18, - Restrict = 19, - Aliased = 20, - Volatile = 21, - Constant = 22, - Coherent = 23, - NonWritable = 24, - NonReadable = 25, - Uniform = 26, - SaturatedConversion = 28, - Stream = 29, - Location = 30, - Component = 31, - Index = 32, - Binding = 33, - DescriptorSet = 34, - Offset = 35, - XfbBuffer = 36, - XfbStride = 37, - FuncParamAttr = 38, - FPRoundingMode = 39, - FPFastMathMode = 40, - LinkageAttributes = 41, - NoContraction = 42, - InputAttachmentIndex = 43, - Alignment = 44, - MaxByteOffset = 45, - Max = 0x7fffffff, -}; - -enum class BuiltIn : unsigned { - Position = 0, - PointSize = 1, - ClipDistance = 3, - CullDistance = 4, - VertexId = 5, - InstanceId = 6, - PrimitiveId = 7, - InvocationId = 8, - Layer = 9, - ViewportIndex = 10, - TessLevelOuter = 11, - TessLevelInner = 12, - TessCoord = 13, - PatchVertices = 14, - FragCoord = 15, - PointCoord = 16, - FrontFacing = 17, - SampleId = 18, - SamplePosition = 19, - SampleMask = 20, - FragDepth = 22, - HelperInvocation = 23, - NumWorkgroups = 24, - WorkgroupSize = 25, - WorkgroupId = 26, - LocalInvocationId = 27, - GlobalInvocationId = 28, - LocalInvocationIndex = 29, - WorkDim = 30, - GlobalSize = 31, - EnqueuedWorkgroupSize = 32, - GlobalOffset = 33, - GlobalLinearId = 34, - SubgroupSize = 36, - SubgroupMaxSize = 37, - NumSubgroups = 38, - NumEnqueuedSubgroups = 39, - SubgroupId = 40, - SubgroupLocalInvocationId = 41, - VertexIndex = 42, - InstanceIndex = 43, - SubgroupEqMaskKHR = 4416, - SubgroupGeMaskKHR = 4417, - SubgroupGtMaskKHR = 4418, - SubgroupLeMaskKHR = 4419, - SubgroupLtMaskKHR = 4420, - BaseVertex = 4424, - BaseInstance = 4425, - DrawIndex = 4426, - Max = 0x7fffffff, -}; - -enum class SelectionControlShift : unsigned { - Flatten = 0, - DontFlatten = 1, - Max = 0x7fffffff, -}; - -enum class SelectionControlMask : unsigned { - MaskNone = 0, - Flatten = 0x00000001, - DontFlatten = 0x00000002, -}; - -enum class LoopControlShift : unsigned { - Unroll = 0, - DontUnroll = 1, - DependencyInfinite = 2, - DependencyLength = 3, - Max = 0x7fffffff, -}; - -enum class LoopControlMask : unsigned { - MaskNone = 0, - Unroll = 0x00000001, - DontUnroll = 0x00000002, - DependencyInfinite = 0x00000004, - DependencyLength = 0x00000008, -}; - -enum class FunctionControlShift : unsigned { - Inline = 0, - DontInline = 1, - Pure = 2, - Const = 3, - Max = 0x7fffffff, -}; - -enum class FunctionControlMask : unsigned { - MaskNone = 0, - Inline = 0x00000001, - DontInline = 0x00000002, - Pure = 0x00000004, - Const = 0x00000008, -}; - -enum class MemorySemanticsShift : unsigned { - Acquire = 1, - Release = 2, - AcquireRelease = 3, - SequentiallyConsistent = 4, - UniformMemory = 6, - SubgroupMemory = 7, - WorkgroupMemory = 8, - CrossWorkgroupMemory = 9, - AtomicCounterMemory = 10, - ImageMemory = 11, - Max = 0x7fffffff, -}; - -enum class MemorySemanticsMask : unsigned { - MaskNone = 0, - Acquire = 0x00000002, - Release = 0x00000004, - AcquireRelease = 0x00000008, - SequentiallyConsistent = 0x00000010, - UniformMemory = 0x00000040, - SubgroupMemory = 0x00000080, - WorkgroupMemory = 0x00000100, - CrossWorkgroupMemory = 0x00000200, - AtomicCounterMemory = 0x00000400, - ImageMemory = 0x00000800, -}; - -enum class MemoryAccessShift : unsigned { - Volatile = 0, - Aligned = 1, - Nontemporal = 2, - Max = 0x7fffffff, -}; - -enum class MemoryAccessMask : unsigned { - MaskNone = 0, - Volatile = 0x00000001, - Aligned = 0x00000002, - Nontemporal = 0x00000004, -}; - -enum class Scope : unsigned { - CrossDevice = 0, - Device = 1, - Workgroup = 2, - Subgroup = 3, - Invocation = 4, - Max = 0x7fffffff, -}; - -enum class GroupOperation : unsigned { - Reduce = 0, - InclusiveScan = 1, - ExclusiveScan = 2, - Max = 0x7fffffff, -}; - -enum class KernelEnqueueFlags : unsigned { - NoWait = 0, - WaitKernel = 1, - WaitWorkGroup = 2, - Max = 0x7fffffff, -}; - -enum class KernelProfilingInfoShift : unsigned { - CmdExecTime = 0, - Max = 0x7fffffff, -}; - -enum class KernelProfilingInfoMask : unsigned { - MaskNone = 0, - CmdExecTime = 0x00000001, -}; - -enum class Capability : unsigned { - Matrix = 0, - Shader = 1, - Geometry = 2, - Tessellation = 3, - Addresses = 4, - Linkage = 5, - Kernel = 6, - Vector16 = 7, - Float16Buffer = 8, - Float16 = 9, - Float64 = 10, - Int64 = 11, - Int64Atomics = 12, - ImageBasic = 13, - ImageReadWrite = 14, - ImageMipmap = 15, - Pipes = 17, - Groups = 18, - DeviceEnqueue = 19, - LiteralSampler = 20, - AtomicStorage = 21, - Int16 = 22, - TessellationPointSize = 23, - GeometryPointSize = 24, - ImageGatherExtended = 25, - StorageImageMultisample = 27, - UniformBufferArrayDynamicIndexing = 28, - SampledImageArrayDynamicIndexing = 29, - StorageBufferArrayDynamicIndexing = 30, - StorageImageArrayDynamicIndexing = 31, - ClipDistance = 32, - CullDistance = 33, - ImageCubeArray = 34, - SampleRateShading = 35, - ImageRect = 36, - SampledRect = 37, - GenericPointer = 38, - Int8 = 39, - InputAttachment = 40, - SparseResidency = 41, - MinLod = 42, - Sampled1D = 43, - Image1D = 44, - SampledCubeArray = 45, - SampledBuffer = 46, - ImageBuffer = 47, - ImageMSArray = 48, - StorageImageExtendedFormats = 49, - ImageQuery = 50, - DerivativeControl = 51, - InterpolationFunction = 52, - TransformFeedback = 53, - GeometryStreams = 54, - StorageImageReadWithoutFormat = 55, - StorageImageWriteWithoutFormat = 56, - MultiViewport = 57, - SubgroupDispatch = 58, - NamedBarrier = 59, - PipeStorage = 60, - SubgroupBallotKHR = 4423, - DrawParameters = 4427, - SubgroupVoteKHR = 4431, - Max = 0x7fffffff, -}; - -enum class Op : unsigned { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpSubgroupReadInvocationKHR = 4432, - Max = 0x7fffffff, -}; - -// Overload operator| for mask bit combining - -inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } -inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } -inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } -inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } -inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } -inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } -inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } -inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } - -} // end namespace spv - -#endif // #ifndef spirv_HPP - +// Copyright (c) 2014-2017 The Khronos Group Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and/or associated documentation files (the "Materials"), +// to deal in the Materials without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Materials, and to permit persons to whom the +// Materials are furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Materials. +// +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// +// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +// IN THE MATERIALS. + +// This header is automatically generated by the same tool that creates +// the Binary Section of the SPIR-V specification. + +// Enumeration tokens for SPIR-V, in various styles: +// C, C++, C++11, JSON, Lua, Python +// +// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// +// Some tokens act like mask values, which can be OR'd together, +// while others are mutually exclusive. The mask-like ones have +// "Mask" in their name, and a parallel enum that has the shift +// amount (1 << x) for each corresponding enumerant. + +#ifndef spirv_HPP +#define spirv_HPP + +namespace spv { + +typedef unsigned int Id; + +#define SPV_VERSION 0x10100 +#define SPV_REVISION 6 + +static const unsigned int MagicNumber = 0x07230203; +static const unsigned int Version = 0x00010100; +static const unsigned int Revision = 6; +static const unsigned int OpCodeMask = 0xffff; +static const unsigned int WordCountShift = 16; + +enum class SourceLanguage : unsigned { + Unknown = 0, + ESSL = 1, + GLSL = 2, + OpenCL_C = 3, + OpenCL_CPP = 4, + Max = 0x7fffffff, +}; + +enum class ExecutionModel : unsigned { + Vertex = 0, + TessellationControl = 1, + TessellationEvaluation = 2, + Geometry = 3, + Fragment = 4, + GLCompute = 5, + Kernel = 6, + Max = 0x7fffffff, +}; + +enum class AddressingModel : unsigned { + Logical = 0, + Physical32 = 1, + Physical64 = 2, + Max = 0x7fffffff, +}; + +enum class MemoryModel : unsigned { + Simple = 0, + GLSL450 = 1, + OpenCL = 2, + Max = 0x7fffffff, +}; + +enum class ExecutionMode : unsigned { + Invocations = 0, + SpacingEqual = 1, + SpacingFractionalEven = 2, + SpacingFractionalOdd = 3, + VertexOrderCw = 4, + VertexOrderCcw = 5, + PixelCenterInteger = 6, + OriginUpperLeft = 7, + OriginLowerLeft = 8, + EarlyFragmentTests = 9, + PointMode = 10, + Xfb = 11, + DepthReplacing = 12, + DepthGreater = 14, + DepthLess = 15, + DepthUnchanged = 16, + LocalSize = 17, + LocalSizeHint = 18, + InputPoints = 19, + InputLines = 20, + InputLinesAdjacency = 21, + Triangles = 22, + InputTrianglesAdjacency = 23, + Quads = 24, + Isolines = 25, + OutputVertices = 26, + OutputPoints = 27, + OutputLineStrip = 28, + OutputTriangleStrip = 29, + VecTypeHint = 30, + ContractionOff = 31, + Initializer = 33, + Finalizer = 34, + SubgroupSize = 35, + SubgroupsPerWorkgroup = 36, + Max = 0x7fffffff, +}; + +enum class StorageClass : unsigned { + UniformConstant = 0, + Input = 1, + Uniform = 2, + Output = 3, + Workgroup = 4, + CrossWorkgroup = 5, + Private = 6, + Function = 7, + Generic = 8, + PushConstant = 9, + AtomicCounter = 10, + Image = 11, + Max = 0x7fffffff, +}; + +enum class Dim : unsigned { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + Cube = 3, + Rect = 4, + Buffer = 5, + SubpassData = 6, + Max = 0x7fffffff, +}; + +enum class SamplerAddressingMode : unsigned { + None = 0, + ClampToEdge = 1, + Clamp = 2, + Repeat = 3, + RepeatMirrored = 4, + Max = 0x7fffffff, +}; + +enum class SamplerFilterMode : unsigned { + Nearest = 0, + Linear = 1, + Max = 0x7fffffff, +}; + +enum class ImageFormat : unsigned { + Unknown = 0, + Rgba32f = 1, + Rgba16f = 2, + R32f = 3, + Rgba8 = 4, + Rgba8Snorm = 5, + Rg32f = 6, + Rg16f = 7, + R11fG11fB10f = 8, + R16f = 9, + Rgba16 = 10, + Rgb10A2 = 11, + Rg16 = 12, + Rg8 = 13, + R16 = 14, + R8 = 15, + Rgba16Snorm = 16, + Rg16Snorm = 17, + Rg8Snorm = 18, + R16Snorm = 19, + R8Snorm = 20, + Rgba32i = 21, + Rgba16i = 22, + Rgba8i = 23, + R32i = 24, + Rg32i = 25, + Rg16i = 26, + Rg8i = 27, + R16i = 28, + R8i = 29, + Rgba32ui = 30, + Rgba16ui = 31, + Rgba8ui = 32, + R32ui = 33, + Rgb10a2ui = 34, + Rg32ui = 35, + Rg16ui = 36, + Rg8ui = 37, + R16ui = 38, + R8ui = 39, + Max = 0x7fffffff, +}; + +enum class ImageChannelOrder : unsigned { + R = 0, + A = 1, + RG = 2, + RA = 3, + RGB = 4, + RGBA = 5, + BGRA = 6, + ARGB = 7, + Intensity = 8, + Luminance = 9, + Rx = 10, + RGx = 11, + RGBx = 12, + Depth = 13, + DepthStencil = 14, + sRGB = 15, + sRGBx = 16, + sRGBA = 17, + sBGRA = 18, + ABGR = 19, + Max = 0x7fffffff, +}; + +enum class ImageChannelDataType : unsigned { + SnormInt8 = 0, + SnormInt16 = 1, + UnormInt8 = 2, + UnormInt16 = 3, + UnormShort565 = 4, + UnormShort555 = 5, + UnormInt101010 = 6, + SignedInt8 = 7, + SignedInt16 = 8, + SignedInt32 = 9, + UnsignedInt8 = 10, + UnsignedInt16 = 11, + UnsignedInt32 = 12, + HalfFloat = 13, + Float = 14, + UnormInt24 = 15, + UnormInt101010_2 = 16, + Max = 0x7fffffff, +}; + +enum class ImageOperandsShift : unsigned { + Bias = 0, + Lod = 1, + Grad = 2, + ConstOffset = 3, + Offset = 4, + ConstOffsets = 5, + Sample = 6, + MinLod = 7, + Max = 0x7fffffff, +}; + +enum class ImageOperandsMask : unsigned { + MaskNone = 0, + Bias = 0x00000001, + Lod = 0x00000002, + Grad = 0x00000004, + ConstOffset = 0x00000008, + Offset = 0x00000010, + ConstOffsets = 0x00000020, + Sample = 0x00000040, + MinLod = 0x00000080, +}; + +enum class FPFastMathModeShift : unsigned { + NotNaN = 0, + NotInf = 1, + NSZ = 2, + AllowRecip = 3, + Fast = 4, + Max = 0x7fffffff, +}; + +enum class FPFastMathModeMask : unsigned { + MaskNone = 0, + NotNaN = 0x00000001, + NotInf = 0x00000002, + NSZ = 0x00000004, + AllowRecip = 0x00000008, + Fast = 0x00000010, +}; + +enum class FPRoundingMode : unsigned { + RTE = 0, + RTZ = 1, + RTP = 2, + RTN = 3, + Max = 0x7fffffff, +}; + +enum class LinkageType : unsigned { + Export = 0, + Import = 1, + Max = 0x7fffffff, +}; + +enum class AccessQualifier : unsigned { + ReadOnly = 0, + WriteOnly = 1, + ReadWrite = 2, + Max = 0x7fffffff, +}; + +enum class FunctionParameterAttribute : unsigned { + Zext = 0, + Sext = 1, + ByVal = 2, + Sret = 3, + NoAlias = 4, + NoCapture = 5, + NoWrite = 6, + NoReadWrite = 7, + Max = 0x7fffffff, +}; + +enum class Decoration : unsigned { + RelaxedPrecision = 0, + SpecId = 1, + Block = 2, + BufferBlock = 3, + RowMajor = 4, + ColMajor = 5, + ArrayStride = 6, + MatrixStride = 7, + GLSLShared = 8, + GLSLPacked = 9, + CPacked = 10, + BuiltIn = 11, + NoPerspective = 13, + Flat = 14, + Patch = 15, + Centroid = 16, + Sample = 17, + Invariant = 18, + Restrict = 19, + Aliased = 20, + Volatile = 21, + Constant = 22, + Coherent = 23, + NonWritable = 24, + NonReadable = 25, + Uniform = 26, + SaturatedConversion = 28, + Stream = 29, + Location = 30, + Component = 31, + Index = 32, + Binding = 33, + DescriptorSet = 34, + Offset = 35, + XfbBuffer = 36, + XfbStride = 37, + FuncParamAttr = 38, + FPRoundingMode = 39, + FPFastMathMode = 40, + LinkageAttributes = 41, + NoContraction = 42, + InputAttachmentIndex = 43, + Alignment = 44, + MaxByteOffset = 45, + OverrideCoverageNV = 5248, + PassthroughNV = 5250, + ViewportRelativeNV = 5252, + SecondaryViewportRelativeNV = 5256, + Max = 0x7fffffff, +}; + +enum class BuiltIn : unsigned { + Position = 0, + PointSize = 1, + ClipDistance = 3, + CullDistance = 4, + VertexId = 5, + InstanceId = 6, + PrimitiveId = 7, + InvocationId = 8, + Layer = 9, + ViewportIndex = 10, + TessLevelOuter = 11, + TessLevelInner = 12, + TessCoord = 13, + PatchVertices = 14, + FragCoord = 15, + PointCoord = 16, + FrontFacing = 17, + SampleId = 18, + SamplePosition = 19, + SampleMask = 20, + FragDepth = 22, + HelperInvocation = 23, + NumWorkgroups = 24, + WorkgroupSize = 25, + WorkgroupId = 26, + LocalInvocationId = 27, + GlobalInvocationId = 28, + LocalInvocationIndex = 29, + WorkDim = 30, + GlobalSize = 31, + EnqueuedWorkgroupSize = 32, + GlobalOffset = 33, + GlobalLinearId = 34, + SubgroupSize = 36, + SubgroupMaxSize = 37, + NumSubgroups = 38, + NumEnqueuedSubgroups = 39, + SubgroupId = 40, + SubgroupLocalInvocationId = 41, + VertexIndex = 42, + InstanceIndex = 43, + SubgroupEqMaskKHR = 4416, + SubgroupGeMaskKHR = 4417, + SubgroupGtMaskKHR = 4418, + SubgroupLeMaskKHR = 4419, + SubgroupLtMaskKHR = 4420, + BaseVertex = 4424, + BaseInstance = 4425, + DrawIndex = 4426, + DeviceIndex = 4438, + ViewIndex = 4440, + ViewportMaskNV = 5253, + SecondaryPositionNV = 5257, + SecondaryViewportMaskNV = 5258, + PositionPerViewNV = 5261, + ViewportMaskPerViewNV = 5262, + Max = 0x7fffffff, +}; + +enum class SelectionControlShift : unsigned { + Flatten = 0, + DontFlatten = 1, + Max = 0x7fffffff, +}; + +enum class SelectionControlMask : unsigned { + MaskNone = 0, + Flatten = 0x00000001, + DontFlatten = 0x00000002, +}; + +enum class LoopControlShift : unsigned { + Unroll = 0, + DontUnroll = 1, + DependencyInfinite = 2, + DependencyLength = 3, + Max = 0x7fffffff, +}; + +enum class LoopControlMask : unsigned { + MaskNone = 0, + Unroll = 0x00000001, + DontUnroll = 0x00000002, + DependencyInfinite = 0x00000004, + DependencyLength = 0x00000008, +}; + +enum class FunctionControlShift : unsigned { + Inline = 0, + DontInline = 1, + Pure = 2, + Const = 3, + Max = 0x7fffffff, +}; + +enum class FunctionControlMask : unsigned { + MaskNone = 0, + Inline = 0x00000001, + DontInline = 0x00000002, + Pure = 0x00000004, + Const = 0x00000008, +}; + +enum class MemorySemanticsShift : unsigned { + Acquire = 1, + Release = 2, + AcquireRelease = 3, + SequentiallyConsistent = 4, + UniformMemory = 6, + SubgroupMemory = 7, + WorkgroupMemory = 8, + CrossWorkgroupMemory = 9, + AtomicCounterMemory = 10, + ImageMemory = 11, + Max = 0x7fffffff, +}; + +enum class MemorySemanticsMask : unsigned { + MaskNone = 0, + Acquire = 0x00000002, + Release = 0x00000004, + AcquireRelease = 0x00000008, + SequentiallyConsistent = 0x00000010, + UniformMemory = 0x00000040, + SubgroupMemory = 0x00000080, + WorkgroupMemory = 0x00000100, + CrossWorkgroupMemory = 0x00000200, + AtomicCounterMemory = 0x00000400, + ImageMemory = 0x00000800, +}; + +enum class MemoryAccessShift : unsigned { + Volatile = 0, + Aligned = 1, + Nontemporal = 2, + Max = 0x7fffffff, +}; + +enum class MemoryAccessMask : unsigned { + MaskNone = 0, + Volatile = 0x00000001, + Aligned = 0x00000002, + Nontemporal = 0x00000004, +}; + +enum class Scope : unsigned { + CrossDevice = 0, + Device = 1, + Workgroup = 2, + Subgroup = 3, + Invocation = 4, + Max = 0x7fffffff, +}; + +enum class GroupOperation : unsigned { + Reduce = 0, + InclusiveScan = 1, + ExclusiveScan = 2, + Max = 0x7fffffff, +}; + +enum class KernelEnqueueFlags : unsigned { + NoWait = 0, + WaitKernel = 1, + WaitWorkGroup = 2, + Max = 0x7fffffff, +}; + +enum class KernelProfilingInfoShift : unsigned { + CmdExecTime = 0, + Max = 0x7fffffff, +}; + +enum class KernelProfilingInfoMask : unsigned { + MaskNone = 0, + CmdExecTime = 0x00000001, +}; + +enum class Capability : unsigned { + Matrix = 0, + Shader = 1, + Geometry = 2, + Tessellation = 3, + Addresses = 4, + Linkage = 5, + Kernel = 6, + Vector16 = 7, + Float16Buffer = 8, + Float16 = 9, + Float64 = 10, + Int64 = 11, + Int64Atomics = 12, + ImageBasic = 13, + ImageReadWrite = 14, + ImageMipmap = 15, + Pipes = 17, + Groups = 18, + DeviceEnqueue = 19, + LiteralSampler = 20, + AtomicStorage = 21, + Int16 = 22, + TessellationPointSize = 23, + GeometryPointSize = 24, + ImageGatherExtended = 25, + StorageImageMultisample = 27, + UniformBufferArrayDynamicIndexing = 28, + SampledImageArrayDynamicIndexing = 29, + StorageBufferArrayDynamicIndexing = 30, + StorageImageArrayDynamicIndexing = 31, + ClipDistance = 32, + CullDistance = 33, + ImageCubeArray = 34, + SampleRateShading = 35, + ImageRect = 36, + SampledRect = 37, + GenericPointer = 38, + Int8 = 39, + InputAttachment = 40, + SparseResidency = 41, + MinLod = 42, + Sampled1D = 43, + Image1D = 44, + SampledCubeArray = 45, + SampledBuffer = 46, + ImageBuffer = 47, + ImageMSArray = 48, + StorageImageExtendedFormats = 49, + ImageQuery = 50, + DerivativeControl = 51, + InterpolationFunction = 52, + TransformFeedback = 53, + GeometryStreams = 54, + StorageImageReadWithoutFormat = 55, + StorageImageWriteWithoutFormat = 56, + MultiViewport = 57, + SubgroupDispatch = 58, + NamedBarrier = 59, + PipeStorage = 60, + SubgroupBallotKHR = 4423, + DrawParameters = 4427, + SubgroupVoteKHR = 4431, + StorageUniformBufferBlock16 = 4433, + StorageUniform16 = 4434, + StoragePushConstant16 = 4435, + StorageInputOutput16 = 4436, + DeviceGroup = 4437, + MultiView = 4439, + SampleMaskOverrideCoverageNV = 5249, + GeometryShaderPassthroughNV = 5251, + ShaderViewportIndexLayerNV = 5254, + ShaderViewportMaskNV = 5255, + ShaderStereoViewNV = 5259, + PerViewAttributesNV = 5260, + Max = 0x7fffffff, +}; + +enum class Op : unsigned { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSizeOf = 321, + OpTypePipeStorage = 322, + OpConstantPipeStorage = 323, + OpCreatePipeFromPipeStorage = 324, + OpGetKernelLocalSizeForSubgroupCount = 325, + OpGetKernelMaxNumSubgroups = 326, + OpTypeNamedBarrier = 327, + OpNamedBarrierInitialize = 328, + OpMemoryNamedBarrier = 329, + OpModuleProcessed = 330, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + Max = 0x7fffffff, +}; + +// Overload operator| for mask bit combining + +inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } +inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } +inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } +inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } +inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } +inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } +inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } +inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } + +} // end namespace spv + +#endif // #ifndef spirv_HPP + diff --git a/ext/vulkan/spirv.json b/ext/vulkan/spirv.json index b201a90ab5..a966cfbc10 100644 --- a/ext/vulkan/spirv.json +++ b/ext/vulkan/spirv.json @@ -1,967 +1,990 @@ -{ - "spv": - { - "meta": - { - "Comment": - [ - [ - "Copyright (c) 2014-2017 The Khronos Group Inc.", - "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." - ], - [ - "This header is automatically generated by the same tool that creates", - "the Binary Section of the SPIR-V specification." - ], - [ - "Enumeration tokens for SPIR-V, in various styles:", - " C, C++, C++11, JSON, Lua, Python", - "", - "- C will have tokens with a \"Spv\" prefix, e.g.: SpvSourceLanguageGLSL", - "- C++ will have tokens in the \"spv\" name space, e.g.: spv::SourceLanguageGLSL", - "- C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL", - "- Lua will use tables, e.g.: spv.SourceLanguage.GLSL", - "- Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']", - "", - "Some tokens act like mask values, which can be OR'd together,", - "while others are mutually exclusive. The mask-like ones have", - "\"Mask\" in their name, and a parallel enum that has the shift", - "amount (1 << x) for each corresponding enumerant." - ] - ], - "MagicNumber": 119734787, - "Version": 65792, - "Revision": 5, - "OpCodeMask": 65535, - "WordCountShift": 16 - }, - "enum": - [ - { - "Name": "SourceLanguage", - "Type": "Value", - "Values": - { - "Unknown": 0, - "ESSL": 1, - "GLSL": 2, - "OpenCL_C": 3, - "OpenCL_CPP": 4 - } - }, - { - "Name": "ExecutionModel", - "Type": "Value", - "Values": - { - "Vertex": 0, - "TessellationControl": 1, - "TessellationEvaluation": 2, - "Geometry": 3, - "Fragment": 4, - "GLCompute": 5, - "Kernel": 6 - } - }, - { - "Name": "AddressingModel", - "Type": "Value", - "Values": - { - "Logical": 0, - "Physical32": 1, - "Physical64": 2 - } - }, - { - "Name": "MemoryModel", - "Type": "Value", - "Values": - { - "Simple": 0, - "GLSL450": 1, - "OpenCL": 2 - } - }, - { - "Name": "ExecutionMode", - "Type": "Value", - "Values": - { - "Invocations": 0, - "SpacingEqual": 1, - "SpacingFractionalEven": 2, - "SpacingFractionalOdd": 3, - "VertexOrderCw": 4, - "VertexOrderCcw": 5, - "PixelCenterInteger": 6, - "OriginUpperLeft": 7, - "OriginLowerLeft": 8, - "EarlyFragmentTests": 9, - "PointMode": 10, - "Xfb": 11, - "DepthReplacing": 12, - "DepthGreater": 14, - "DepthLess": 15, - "DepthUnchanged": 16, - "LocalSize": 17, - "LocalSizeHint": 18, - "InputPoints": 19, - "InputLines": 20, - "InputLinesAdjacency": 21, - "Triangles": 22, - "InputTrianglesAdjacency": 23, - "Quads": 24, - "Isolines": 25, - "OutputVertices": 26, - "OutputPoints": 27, - "OutputLineStrip": 28, - "OutputTriangleStrip": 29, - "VecTypeHint": 30, - "ContractionOff": 31, - "Initializer": 33, - "Finalizer": 34, - "SubgroupSize": 35, - "SubgroupsPerWorkgroup": 36 - } - }, - { - "Name": "StorageClass", - "Type": "Value", - "Values": - { - "UniformConstant": 0, - "Input": 1, - "Uniform": 2, - "Output": 3, - "Workgroup": 4, - "CrossWorkgroup": 5, - "Private": 6, - "Function": 7, - "Generic": 8, - "PushConstant": 9, - "AtomicCounter": 10, - "Image": 11 - } - }, - { - "Name": "Dim", - "Type": "Value", - "Values": - { - "Dim1D": 0, - "Dim2D": 1, - "Dim3D": 2, - "Cube": 3, - "Rect": 4, - "Buffer": 5, - "SubpassData": 6 - } - }, - { - "Name": "SamplerAddressingMode", - "Type": "Value", - "Values": - { - "None": 0, - "ClampToEdge": 1, - "Clamp": 2, - "Repeat": 3, - "RepeatMirrored": 4 - } - }, - { - "Name": "SamplerFilterMode", - "Type": "Value", - "Values": - { - "Nearest": 0, - "Linear": 1 - } - }, - { - "Name": "ImageFormat", - "Type": "Value", - "Values": - { - "Unknown": 0, - "Rgba32f": 1, - "Rgba16f": 2, - "R32f": 3, - "Rgba8": 4, - "Rgba8Snorm": 5, - "Rg32f": 6, - "Rg16f": 7, - "R11fG11fB10f": 8, - "R16f": 9, - "Rgba16": 10, - "Rgb10A2": 11, - "Rg16": 12, - "Rg8": 13, - "R16": 14, - "R8": 15, - "Rgba16Snorm": 16, - "Rg16Snorm": 17, - "Rg8Snorm": 18, - "R16Snorm": 19, - "R8Snorm": 20, - "Rgba32i": 21, - "Rgba16i": 22, - "Rgba8i": 23, - "R32i": 24, - "Rg32i": 25, - "Rg16i": 26, - "Rg8i": 27, - "R16i": 28, - "R8i": 29, - "Rgba32ui": 30, - "Rgba16ui": 31, - "Rgba8ui": 32, - "R32ui": 33, - "Rgb10a2ui": 34, - "Rg32ui": 35, - "Rg16ui": 36, - "Rg8ui": 37, - "R16ui": 38, - "R8ui": 39 - } - }, - { - "Name": "ImageChannelOrder", - "Type": "Value", - "Values": - { - "R": 0, - "A": 1, - "RG": 2, - "RA": 3, - "RGB": 4, - "RGBA": 5, - "BGRA": 6, - "ARGB": 7, - "Intensity": 8, - "Luminance": 9, - "Rx": 10, - "RGx": 11, - "RGBx": 12, - "Depth": 13, - "DepthStencil": 14, - "sRGB": 15, - "sRGBx": 16, - "sRGBA": 17, - "sBGRA": 18, - "ABGR": 19 - } - }, - { - "Name": "ImageChannelDataType", - "Type": "Value", - "Values": - { - "SnormInt8": 0, - "SnormInt16": 1, - "UnormInt8": 2, - "UnormInt16": 3, - "UnormShort565": 4, - "UnormShort555": 5, - "UnormInt101010": 6, - "SignedInt8": 7, - "SignedInt16": 8, - "SignedInt32": 9, - "UnsignedInt8": 10, - "UnsignedInt16": 11, - "UnsignedInt32": 12, - "HalfFloat": 13, - "Float": 14, - "UnormInt24": 15, - "UnormInt101010_2": 16 - } - }, - { - "Name": "ImageOperands", - "Type": "Bit", - "Values": - { - "Bias": 0, - "Lod": 1, - "Grad": 2, - "ConstOffset": 3, - "Offset": 4, - "ConstOffsets": 5, - "Sample": 6, - "MinLod": 7 - } - }, - { - "Name": "FPFastMathMode", - "Type": "Bit", - "Values": - { - "NotNaN": 0, - "NotInf": 1, - "NSZ": 2, - "AllowRecip": 3, - "Fast": 4 - } - }, - { - "Name": "FPRoundingMode", - "Type": "Value", - "Values": - { - "RTE": 0, - "RTZ": 1, - "RTP": 2, - "RTN": 3 - } - }, - { - "Name": "LinkageType", - "Type": "Value", - "Values": - { - "Export": 0, - "Import": 1 - } - }, - { - "Name": "AccessQualifier", - "Type": "Value", - "Values": - { - "ReadOnly": 0, - "WriteOnly": 1, - "ReadWrite": 2 - } - }, - { - "Name": "FunctionParameterAttribute", - "Type": "Value", - "Values": - { - "Zext": 0, - "Sext": 1, - "ByVal": 2, - "Sret": 3, - "NoAlias": 4, - "NoCapture": 5, - "NoWrite": 6, - "NoReadWrite": 7 - } - }, - { - "Name": "Decoration", - "Type": "Value", - "Values": - { - "RelaxedPrecision": 0, - "SpecId": 1, - "Block": 2, - "BufferBlock": 3, - "RowMajor": 4, - "ColMajor": 5, - "ArrayStride": 6, - "MatrixStride": 7, - "GLSLShared": 8, - "GLSLPacked": 9, - "CPacked": 10, - "BuiltIn": 11, - "NoPerspective": 13, - "Flat": 14, - "Patch": 15, - "Centroid": 16, - "Sample": 17, - "Invariant": 18, - "Restrict": 19, - "Aliased": 20, - "Volatile": 21, - "Constant": 22, - "Coherent": 23, - "NonWritable": 24, - "NonReadable": 25, - "Uniform": 26, - "SaturatedConversion": 28, - "Stream": 29, - "Location": 30, - "Component": 31, - "Index": 32, - "Binding": 33, - "DescriptorSet": 34, - "Offset": 35, - "XfbBuffer": 36, - "XfbStride": 37, - "FuncParamAttr": 38, - "FPRoundingMode": 39, - "FPFastMathMode": 40, - "LinkageAttributes": 41, - "NoContraction": 42, - "InputAttachmentIndex": 43, - "Alignment": 44, - "MaxByteOffset": 45 - } - }, - { - "Name": "BuiltIn", - "Type": "Value", - "Values": - { - "Position": 0, - "PointSize": 1, - "ClipDistance": 3, - "CullDistance": 4, - "VertexId": 5, - "InstanceId": 6, - "PrimitiveId": 7, - "InvocationId": 8, - "Layer": 9, - "ViewportIndex": 10, - "TessLevelOuter": 11, - "TessLevelInner": 12, - "TessCoord": 13, - "PatchVertices": 14, - "FragCoord": 15, - "PointCoord": 16, - "FrontFacing": 17, - "SampleId": 18, - "SamplePosition": 19, - "SampleMask": 20, - "FragDepth": 22, - "HelperInvocation": 23, - "NumWorkgroups": 24, - "WorkgroupSize": 25, - "WorkgroupId": 26, - "LocalInvocationId": 27, - "GlobalInvocationId": 28, - "LocalInvocationIndex": 29, - "WorkDim": 30, - "GlobalSize": 31, - "EnqueuedWorkgroupSize": 32, - "GlobalOffset": 33, - "GlobalLinearId": 34, - "SubgroupSize": 36, - "SubgroupMaxSize": 37, - "NumSubgroups": 38, - "NumEnqueuedSubgroups": 39, - "SubgroupId": 40, - "SubgroupLocalInvocationId": 41, - "VertexIndex": 42, - "InstanceIndex": 43, - "SubgroupEqMaskKHR": 4416, - "SubgroupGeMaskKHR": 4417, - "SubgroupGtMaskKHR": 4418, - "SubgroupLeMaskKHR": 4419, - "SubgroupLtMaskKHR": 4420, - "BaseVertex": 4424, - "BaseInstance": 4425, - "DrawIndex": 4426 - } - }, - { - "Name": "SelectionControl", - "Type": "Bit", - "Values": - { - "Flatten": 0, - "DontFlatten": 1 - } - }, - { - "Name": "LoopControl", - "Type": "Bit", - "Values": - { - "Unroll": 0, - "DontUnroll": 1, - "DependencyInfinite": 2, - "DependencyLength": 3 - } - }, - { - "Name": "FunctionControl", - "Type": "Bit", - "Values": - { - "Inline": 0, - "DontInline": 1, - "Pure": 2, - "Const": 3 - } - }, - { - "Name": "MemorySemantics", - "Type": "Bit", - "Values": - { - "Acquire": 1, - "Release": 2, - "AcquireRelease": 3, - "SequentiallyConsistent": 4, - "UniformMemory": 6, - "SubgroupMemory": 7, - "WorkgroupMemory": 8, - "CrossWorkgroupMemory": 9, - "AtomicCounterMemory": 10, - "ImageMemory": 11 - } - }, - { - "Name": "MemoryAccess", - "Type": "Bit", - "Values": - { - "Volatile": 0, - "Aligned": 1, - "Nontemporal": 2 - } - }, - { - "Name": "Scope", - "Type": "Value", - "Values": - { - "CrossDevice": 0, - "Device": 1, - "Workgroup": 2, - "Subgroup": 3, - "Invocation": 4 - } - }, - { - "Name": "GroupOperation", - "Type": "Value", - "Values": - { - "Reduce": 0, - "InclusiveScan": 1, - "ExclusiveScan": 2 - } - }, - { - "Name": "KernelEnqueueFlags", - "Type": "Value", - "Values": - { - "NoWait": 0, - "WaitKernel": 1, - "WaitWorkGroup": 2 - } - }, - { - "Name": "KernelProfilingInfo", - "Type": "Bit", - "Values": - { - "CmdExecTime": 0 - } - }, - { - "Name": "Capability", - "Type": "Value", - "Values": - { - "Matrix": 0, - "Shader": 1, - "Geometry": 2, - "Tessellation": 3, - "Addresses": 4, - "Linkage": 5, - "Kernel": 6, - "Vector16": 7, - "Float16Buffer": 8, - "Float16": 9, - "Float64": 10, - "Int64": 11, - "Int64Atomics": 12, - "ImageBasic": 13, - "ImageReadWrite": 14, - "ImageMipmap": 15, - "Pipes": 17, - "Groups": 18, - "DeviceEnqueue": 19, - "LiteralSampler": 20, - "AtomicStorage": 21, - "Int16": 22, - "TessellationPointSize": 23, - "GeometryPointSize": 24, - "ImageGatherExtended": 25, - "StorageImageMultisample": 27, - "UniformBufferArrayDynamicIndexing": 28, - "SampledImageArrayDynamicIndexing": 29, - "StorageBufferArrayDynamicIndexing": 30, - "StorageImageArrayDynamicIndexing": 31, - "ClipDistance": 32, - "CullDistance": 33, - "ImageCubeArray": 34, - "SampleRateShading": 35, - "ImageRect": 36, - "SampledRect": 37, - "GenericPointer": 38, - "Int8": 39, - "InputAttachment": 40, - "SparseResidency": 41, - "MinLod": 42, - "Sampled1D": 43, - "Image1D": 44, - "SampledCubeArray": 45, - "SampledBuffer": 46, - "ImageBuffer": 47, - "ImageMSArray": 48, - "StorageImageExtendedFormats": 49, - "ImageQuery": 50, - "DerivativeControl": 51, - "InterpolationFunction": 52, - "TransformFeedback": 53, - "GeometryStreams": 54, - "StorageImageReadWithoutFormat": 55, - "StorageImageWriteWithoutFormat": 56, - "MultiViewport": 57, - "SubgroupDispatch": 58, - "NamedBarrier": 59, - "PipeStorage": 60, - "SubgroupBallotKHR": 4423, - "DrawParameters": 4427, - "SubgroupVoteKHR": 4431 - } - }, - { - "Name": "Op", - "Type": "Value", - "Values": - { - "OpNop": 0, - "OpUndef": 1, - "OpSourceContinued": 2, - "OpSource": 3, - "OpSourceExtension": 4, - "OpName": 5, - "OpMemberName": 6, - "OpString": 7, - "OpLine": 8, - "OpExtension": 10, - "OpExtInstImport": 11, - "OpExtInst": 12, - "OpMemoryModel": 14, - "OpEntryPoint": 15, - "OpExecutionMode": 16, - "OpCapability": 17, - "OpTypeVoid": 19, - "OpTypeBool": 20, - "OpTypeInt": 21, - "OpTypeFloat": 22, - "OpTypeVector": 23, - "OpTypeMatrix": 24, - "OpTypeImage": 25, - "OpTypeSampler": 26, - "OpTypeSampledImage": 27, - "OpTypeArray": 28, - "OpTypeRuntimeArray": 29, - "OpTypeStruct": 30, - "OpTypeOpaque": 31, - "OpTypePointer": 32, - "OpTypeFunction": 33, - "OpTypeEvent": 34, - "OpTypeDeviceEvent": 35, - "OpTypeReserveId": 36, - "OpTypeQueue": 37, - "OpTypePipe": 38, - "OpTypeForwardPointer": 39, - "OpConstantTrue": 41, - "OpConstantFalse": 42, - "OpConstant": 43, - "OpConstantComposite": 44, - "OpConstantSampler": 45, - "OpConstantNull": 46, - "OpSpecConstantTrue": 48, - "OpSpecConstantFalse": 49, - "OpSpecConstant": 50, - "OpSpecConstantComposite": 51, - "OpSpecConstantOp": 52, - "OpFunction": 54, - "OpFunctionParameter": 55, - "OpFunctionEnd": 56, - "OpFunctionCall": 57, - "OpVariable": 59, - "OpImageTexelPointer": 60, - "OpLoad": 61, - "OpStore": 62, - "OpCopyMemory": 63, - "OpCopyMemorySized": 64, - "OpAccessChain": 65, - "OpInBoundsAccessChain": 66, - "OpPtrAccessChain": 67, - "OpArrayLength": 68, - "OpGenericPtrMemSemantics": 69, - "OpInBoundsPtrAccessChain": 70, - "OpDecorate": 71, - "OpMemberDecorate": 72, - "OpDecorationGroup": 73, - "OpGroupDecorate": 74, - "OpGroupMemberDecorate": 75, - "OpVectorExtractDynamic": 77, - "OpVectorInsertDynamic": 78, - "OpVectorShuffle": 79, - "OpCompositeConstruct": 80, - "OpCompositeExtract": 81, - "OpCompositeInsert": 82, - "OpCopyObject": 83, - "OpTranspose": 84, - "OpSampledImage": 86, - "OpImageSampleImplicitLod": 87, - "OpImageSampleExplicitLod": 88, - "OpImageSampleDrefImplicitLod": 89, - "OpImageSampleDrefExplicitLod": 90, - "OpImageSampleProjImplicitLod": 91, - "OpImageSampleProjExplicitLod": 92, - "OpImageSampleProjDrefImplicitLod": 93, - "OpImageSampleProjDrefExplicitLod": 94, - "OpImageFetch": 95, - "OpImageGather": 96, - "OpImageDrefGather": 97, - "OpImageRead": 98, - "OpImageWrite": 99, - "OpImage": 100, - "OpImageQueryFormat": 101, - "OpImageQueryOrder": 102, - "OpImageQuerySizeLod": 103, - "OpImageQuerySize": 104, - "OpImageQueryLod": 105, - "OpImageQueryLevels": 106, - "OpImageQuerySamples": 107, - "OpConvertFToU": 109, - "OpConvertFToS": 110, - "OpConvertSToF": 111, - "OpConvertUToF": 112, - "OpUConvert": 113, - "OpSConvert": 114, - "OpFConvert": 115, - "OpQuantizeToF16": 116, - "OpConvertPtrToU": 117, - "OpSatConvertSToU": 118, - "OpSatConvertUToS": 119, - "OpConvertUToPtr": 120, - "OpPtrCastToGeneric": 121, - "OpGenericCastToPtr": 122, - "OpGenericCastToPtrExplicit": 123, - "OpBitcast": 124, - "OpSNegate": 126, - "OpFNegate": 127, - "OpIAdd": 128, - "OpFAdd": 129, - "OpISub": 130, - "OpFSub": 131, - "OpIMul": 132, - "OpFMul": 133, - "OpUDiv": 134, - "OpSDiv": 135, - "OpFDiv": 136, - "OpUMod": 137, - "OpSRem": 138, - "OpSMod": 139, - "OpFRem": 140, - "OpFMod": 141, - "OpVectorTimesScalar": 142, - "OpMatrixTimesScalar": 143, - "OpVectorTimesMatrix": 144, - "OpMatrixTimesVector": 145, - "OpMatrixTimesMatrix": 146, - "OpOuterProduct": 147, - "OpDot": 148, - "OpIAddCarry": 149, - "OpISubBorrow": 150, - "OpUMulExtended": 151, - "OpSMulExtended": 152, - "OpAny": 154, - "OpAll": 155, - "OpIsNan": 156, - "OpIsInf": 157, - "OpIsFinite": 158, - "OpIsNormal": 159, - "OpSignBitSet": 160, - "OpLessOrGreater": 161, - "OpOrdered": 162, - "OpUnordered": 163, - "OpLogicalEqual": 164, - "OpLogicalNotEqual": 165, - "OpLogicalOr": 166, - "OpLogicalAnd": 167, - "OpLogicalNot": 168, - "OpSelect": 169, - "OpIEqual": 170, - "OpINotEqual": 171, - "OpUGreaterThan": 172, - "OpSGreaterThan": 173, - "OpUGreaterThanEqual": 174, - "OpSGreaterThanEqual": 175, - "OpULessThan": 176, - "OpSLessThan": 177, - "OpULessThanEqual": 178, - "OpSLessThanEqual": 179, - "OpFOrdEqual": 180, - "OpFUnordEqual": 181, - "OpFOrdNotEqual": 182, - "OpFUnordNotEqual": 183, - "OpFOrdLessThan": 184, - "OpFUnordLessThan": 185, - "OpFOrdGreaterThan": 186, - "OpFUnordGreaterThan": 187, - "OpFOrdLessThanEqual": 188, - "OpFUnordLessThanEqual": 189, - "OpFOrdGreaterThanEqual": 190, - "OpFUnordGreaterThanEqual": 191, - "OpShiftRightLogical": 194, - "OpShiftRightArithmetic": 195, - "OpShiftLeftLogical": 196, - "OpBitwiseOr": 197, - "OpBitwiseXor": 198, - "OpBitwiseAnd": 199, - "OpNot": 200, - "OpBitFieldInsert": 201, - "OpBitFieldSExtract": 202, - "OpBitFieldUExtract": 203, - "OpBitReverse": 204, - "OpBitCount": 205, - "OpDPdx": 207, - "OpDPdy": 208, - "OpFwidth": 209, - "OpDPdxFine": 210, - "OpDPdyFine": 211, - "OpFwidthFine": 212, - "OpDPdxCoarse": 213, - "OpDPdyCoarse": 214, - "OpFwidthCoarse": 215, - "OpEmitVertex": 218, - "OpEndPrimitive": 219, - "OpEmitStreamVertex": 220, - "OpEndStreamPrimitive": 221, - "OpControlBarrier": 224, - "OpMemoryBarrier": 225, - "OpAtomicLoad": 227, - "OpAtomicStore": 228, - "OpAtomicExchange": 229, - "OpAtomicCompareExchange": 230, - "OpAtomicCompareExchangeWeak": 231, - "OpAtomicIIncrement": 232, - "OpAtomicIDecrement": 233, - "OpAtomicIAdd": 234, - "OpAtomicISub": 235, - "OpAtomicSMin": 236, - "OpAtomicUMin": 237, - "OpAtomicSMax": 238, - "OpAtomicUMax": 239, - "OpAtomicAnd": 240, - "OpAtomicOr": 241, - "OpAtomicXor": 242, - "OpPhi": 245, - "OpLoopMerge": 246, - "OpSelectionMerge": 247, - "OpLabel": 248, - "OpBranch": 249, - "OpBranchConditional": 250, - "OpSwitch": 251, - "OpKill": 252, - "OpReturn": 253, - "OpReturnValue": 254, - "OpUnreachable": 255, - "OpLifetimeStart": 256, - "OpLifetimeStop": 257, - "OpGroupAsyncCopy": 259, - "OpGroupWaitEvents": 260, - "OpGroupAll": 261, - "OpGroupAny": 262, - "OpGroupBroadcast": 263, - "OpGroupIAdd": 264, - "OpGroupFAdd": 265, - "OpGroupFMin": 266, - "OpGroupUMin": 267, - "OpGroupSMin": 268, - "OpGroupFMax": 269, - "OpGroupUMax": 270, - "OpGroupSMax": 271, - "OpReadPipe": 274, - "OpWritePipe": 275, - "OpReservedReadPipe": 276, - "OpReservedWritePipe": 277, - "OpReserveReadPipePackets": 278, - "OpReserveWritePipePackets": 279, - "OpCommitReadPipe": 280, - "OpCommitWritePipe": 281, - "OpIsValidReserveId": 282, - "OpGetNumPipePackets": 283, - "OpGetMaxPipePackets": 284, - "OpGroupReserveReadPipePackets": 285, - "OpGroupReserveWritePipePackets": 286, - "OpGroupCommitReadPipe": 287, - "OpGroupCommitWritePipe": 288, - "OpEnqueueMarker": 291, - "OpEnqueueKernel": 292, - "OpGetKernelNDrangeSubGroupCount": 293, - "OpGetKernelNDrangeMaxSubGroupSize": 294, - "OpGetKernelWorkGroupSize": 295, - "OpGetKernelPreferredWorkGroupSizeMultiple": 296, - "OpRetainEvent": 297, - "OpReleaseEvent": 298, - "OpCreateUserEvent": 299, - "OpIsValidEvent": 300, - "OpSetUserEventStatus": 301, - "OpCaptureEventProfilingInfo": 302, - "OpGetDefaultQueue": 303, - "OpBuildNDRange": 304, - "OpImageSparseSampleImplicitLod": 305, - "OpImageSparseSampleExplicitLod": 306, - "OpImageSparseSampleDrefImplicitLod": 307, - "OpImageSparseSampleDrefExplicitLod": 308, - "OpImageSparseSampleProjImplicitLod": 309, - "OpImageSparseSampleProjExplicitLod": 310, - "OpImageSparseSampleProjDrefImplicitLod": 311, - "OpImageSparseSampleProjDrefExplicitLod": 312, - "OpImageSparseFetch": 313, - "OpImageSparseGather": 314, - "OpImageSparseDrefGather": 315, - "OpImageSparseTexelsResident": 316, - "OpNoLine": 317, - "OpAtomicFlagTestAndSet": 318, - "OpAtomicFlagClear": 319, - "OpImageSparseRead": 320, - "OpSizeOf": 321, - "OpTypePipeStorage": 322, - "OpConstantPipeStorage": 323, - "OpCreatePipeFromPipeStorage": 324, - "OpGetKernelLocalSizeForSubgroupCount": 325, - "OpGetKernelMaxNumSubgroups": 326, - "OpTypeNamedBarrier": 327, - "OpNamedBarrierInitialize": 328, - "OpMemoryNamedBarrier": 329, - "OpModuleProcessed": 330, - "OpSubgroupBallotKHR": 4421, - "OpSubgroupFirstInvocationKHR": 4422, - "OpSubgroupAllKHR": 4428, - "OpSubgroupAnyKHR": 4429, - "OpSubgroupAllEqualKHR": 4430, - "OpSubgroupReadInvocationKHR": 4432 - } - } - ] - } -} - +{ + "spv": + { + "meta": + { + "Comment": + [ + [ + "Copyright (c) 2014-2017 The Khronos Group Inc.", + "", + "Permission is hereby granted, free of charge, to any person obtaining a copy", + "of this software and/or associated documentation files (the \"Materials\"),", + "to deal in the Materials without restriction, including without limitation", + "the rights to use, copy, modify, merge, publish, distribute, sublicense,", + "and/or sell copies of the Materials, and to permit persons to whom the", + "Materials are furnished to do so, subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be included in", + "all copies or substantial portions of the Materials.", + "", + "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", + "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", + "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", + "", + "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", + "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", + "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", + "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", + "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", + "IN THE MATERIALS." + ], + [ + "This header is automatically generated by the same tool that creates", + "the Binary Section of the SPIR-V specification." + ], + [ + "Enumeration tokens for SPIR-V, in various styles:", + " C, C++, C++11, JSON, Lua, Python", + "", + "- C will have tokens with a \"Spv\" prefix, e.g.: SpvSourceLanguageGLSL", + "- C++ will have tokens in the \"spv\" name space, e.g.: spv::SourceLanguageGLSL", + "- C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL", + "- Lua will use tables, e.g.: spv.SourceLanguage.GLSL", + "- Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']", + "", + "Some tokens act like mask values, which can be OR'd together,", + "while others are mutually exclusive. The mask-like ones have", + "\"Mask\" in their name, and a parallel enum that has the shift", + "amount (1 << x) for each corresponding enumerant." + ] + ], + "MagicNumber": 119734787, + "Version": 65792, + "Revision": 6, + "OpCodeMask": 65535, + "WordCountShift": 16 + }, + "enum": + [ + { + "Name": "SourceLanguage", + "Type": "Value", + "Values": + { + "Unknown": 0, + "ESSL": 1, + "GLSL": 2, + "OpenCL_C": 3, + "OpenCL_CPP": 4 + } + }, + { + "Name": "ExecutionModel", + "Type": "Value", + "Values": + { + "Vertex": 0, + "TessellationControl": 1, + "TessellationEvaluation": 2, + "Geometry": 3, + "Fragment": 4, + "GLCompute": 5, + "Kernel": 6 + } + }, + { + "Name": "AddressingModel", + "Type": "Value", + "Values": + { + "Logical": 0, + "Physical32": 1, + "Physical64": 2 + } + }, + { + "Name": "MemoryModel", + "Type": "Value", + "Values": + { + "Simple": 0, + "GLSL450": 1, + "OpenCL": 2 + } + }, + { + "Name": "ExecutionMode", + "Type": "Value", + "Values": + { + "Invocations": 0, + "SpacingEqual": 1, + "SpacingFractionalEven": 2, + "SpacingFractionalOdd": 3, + "VertexOrderCw": 4, + "VertexOrderCcw": 5, + "PixelCenterInteger": 6, + "OriginUpperLeft": 7, + "OriginLowerLeft": 8, + "EarlyFragmentTests": 9, + "PointMode": 10, + "Xfb": 11, + "DepthReplacing": 12, + "DepthGreater": 14, + "DepthLess": 15, + "DepthUnchanged": 16, + "LocalSize": 17, + "LocalSizeHint": 18, + "InputPoints": 19, + "InputLines": 20, + "InputLinesAdjacency": 21, + "Triangles": 22, + "InputTrianglesAdjacency": 23, + "Quads": 24, + "Isolines": 25, + "OutputVertices": 26, + "OutputPoints": 27, + "OutputLineStrip": 28, + "OutputTriangleStrip": 29, + "VecTypeHint": 30, + "ContractionOff": 31, + "Initializer": 33, + "Finalizer": 34, + "SubgroupSize": 35, + "SubgroupsPerWorkgroup": 36 + } + }, + { + "Name": "StorageClass", + "Type": "Value", + "Values": + { + "UniformConstant": 0, + "Input": 1, + "Uniform": 2, + "Output": 3, + "Workgroup": 4, + "CrossWorkgroup": 5, + "Private": 6, + "Function": 7, + "Generic": 8, + "PushConstant": 9, + "AtomicCounter": 10, + "Image": 11 + } + }, + { + "Name": "Dim", + "Type": "Value", + "Values": + { + "Dim1D": 0, + "Dim2D": 1, + "Dim3D": 2, + "Cube": 3, + "Rect": 4, + "Buffer": 5, + "SubpassData": 6 + } + }, + { + "Name": "SamplerAddressingMode", + "Type": "Value", + "Values": + { + "None": 0, + "ClampToEdge": 1, + "Clamp": 2, + "Repeat": 3, + "RepeatMirrored": 4 + } + }, + { + "Name": "SamplerFilterMode", + "Type": "Value", + "Values": + { + "Nearest": 0, + "Linear": 1 + } + }, + { + "Name": "ImageFormat", + "Type": "Value", + "Values": + { + "Unknown": 0, + "Rgba32f": 1, + "Rgba16f": 2, + "R32f": 3, + "Rgba8": 4, + "Rgba8Snorm": 5, + "Rg32f": 6, + "Rg16f": 7, + "R11fG11fB10f": 8, + "R16f": 9, + "Rgba16": 10, + "Rgb10A2": 11, + "Rg16": 12, + "Rg8": 13, + "R16": 14, + "R8": 15, + "Rgba16Snorm": 16, + "Rg16Snorm": 17, + "Rg8Snorm": 18, + "R16Snorm": 19, + "R8Snorm": 20, + "Rgba32i": 21, + "Rgba16i": 22, + "Rgba8i": 23, + "R32i": 24, + "Rg32i": 25, + "Rg16i": 26, + "Rg8i": 27, + "R16i": 28, + "R8i": 29, + "Rgba32ui": 30, + "Rgba16ui": 31, + "Rgba8ui": 32, + "R32ui": 33, + "Rgb10a2ui": 34, + "Rg32ui": 35, + "Rg16ui": 36, + "Rg8ui": 37, + "R16ui": 38, + "R8ui": 39 + } + }, + { + "Name": "ImageChannelOrder", + "Type": "Value", + "Values": + { + "R": 0, + "A": 1, + "RG": 2, + "RA": 3, + "RGB": 4, + "RGBA": 5, + "BGRA": 6, + "ARGB": 7, + "Intensity": 8, + "Luminance": 9, + "Rx": 10, + "RGx": 11, + "RGBx": 12, + "Depth": 13, + "DepthStencil": 14, + "sRGB": 15, + "sRGBx": 16, + "sRGBA": 17, + "sBGRA": 18, + "ABGR": 19 + } + }, + { + "Name": "ImageChannelDataType", + "Type": "Value", + "Values": + { + "SnormInt8": 0, + "SnormInt16": 1, + "UnormInt8": 2, + "UnormInt16": 3, + "UnormShort565": 4, + "UnormShort555": 5, + "UnormInt101010": 6, + "SignedInt8": 7, + "SignedInt16": 8, + "SignedInt32": 9, + "UnsignedInt8": 10, + "UnsignedInt16": 11, + "UnsignedInt32": 12, + "HalfFloat": 13, + "Float": 14, + "UnormInt24": 15, + "UnormInt101010_2": 16 + } + }, + { + "Name": "ImageOperands", + "Type": "Bit", + "Values": + { + "Bias": 0, + "Lod": 1, + "Grad": 2, + "ConstOffset": 3, + "Offset": 4, + "ConstOffsets": 5, + "Sample": 6, + "MinLod": 7 + } + }, + { + "Name": "FPFastMathMode", + "Type": "Bit", + "Values": + { + "NotNaN": 0, + "NotInf": 1, + "NSZ": 2, + "AllowRecip": 3, + "Fast": 4 + } + }, + { + "Name": "FPRoundingMode", + "Type": "Value", + "Values": + { + "RTE": 0, + "RTZ": 1, + "RTP": 2, + "RTN": 3 + } + }, + { + "Name": "LinkageType", + "Type": "Value", + "Values": + { + "Export": 0, + "Import": 1 + } + }, + { + "Name": "AccessQualifier", + "Type": "Value", + "Values": + { + "ReadOnly": 0, + "WriteOnly": 1, + "ReadWrite": 2 + } + }, + { + "Name": "FunctionParameterAttribute", + "Type": "Value", + "Values": + { + "Zext": 0, + "Sext": 1, + "ByVal": 2, + "Sret": 3, + "NoAlias": 4, + "NoCapture": 5, + "NoWrite": 6, + "NoReadWrite": 7 + } + }, + { + "Name": "Decoration", + "Type": "Value", + "Values": + { + "RelaxedPrecision": 0, + "SpecId": 1, + "Block": 2, + "BufferBlock": 3, + "RowMajor": 4, + "ColMajor": 5, + "ArrayStride": 6, + "MatrixStride": 7, + "GLSLShared": 8, + "GLSLPacked": 9, + "CPacked": 10, + "BuiltIn": 11, + "NoPerspective": 13, + "Flat": 14, + "Patch": 15, + "Centroid": 16, + "Sample": 17, + "Invariant": 18, + "Restrict": 19, + "Aliased": 20, + "Volatile": 21, + "Constant": 22, + "Coherent": 23, + "NonWritable": 24, + "NonReadable": 25, + "Uniform": 26, + "SaturatedConversion": 28, + "Stream": 29, + "Location": 30, + "Component": 31, + "Index": 32, + "Binding": 33, + "DescriptorSet": 34, + "Offset": 35, + "XfbBuffer": 36, + "XfbStride": 37, + "FuncParamAttr": 38, + "FPRoundingMode": 39, + "FPFastMathMode": 40, + "LinkageAttributes": 41, + "NoContraction": 42, + "InputAttachmentIndex": 43, + "Alignment": 44, + "MaxByteOffset": 45, + "OverrideCoverageNV": 5248, + "PassthroughNV": 5250, + "ViewportRelativeNV": 5252, + "SecondaryViewportRelativeNV": 5256 + } + }, + { + "Name": "BuiltIn", + "Type": "Value", + "Values": + { + "Position": 0, + "PointSize": 1, + "ClipDistance": 3, + "CullDistance": 4, + "VertexId": 5, + "InstanceId": 6, + "PrimitiveId": 7, + "InvocationId": 8, + "Layer": 9, + "ViewportIndex": 10, + "TessLevelOuter": 11, + "TessLevelInner": 12, + "TessCoord": 13, + "PatchVertices": 14, + "FragCoord": 15, + "PointCoord": 16, + "FrontFacing": 17, + "SampleId": 18, + "SamplePosition": 19, + "SampleMask": 20, + "FragDepth": 22, + "HelperInvocation": 23, + "NumWorkgroups": 24, + "WorkgroupSize": 25, + "WorkgroupId": 26, + "LocalInvocationId": 27, + "GlobalInvocationId": 28, + "LocalInvocationIndex": 29, + "WorkDim": 30, + "GlobalSize": 31, + "EnqueuedWorkgroupSize": 32, + "GlobalOffset": 33, + "GlobalLinearId": 34, + "SubgroupSize": 36, + "SubgroupMaxSize": 37, + "NumSubgroups": 38, + "NumEnqueuedSubgroups": 39, + "SubgroupId": 40, + "SubgroupLocalInvocationId": 41, + "VertexIndex": 42, + "InstanceIndex": 43, + "SubgroupEqMaskKHR": 4416, + "SubgroupGeMaskKHR": 4417, + "SubgroupGtMaskKHR": 4418, + "SubgroupLeMaskKHR": 4419, + "SubgroupLtMaskKHR": 4420, + "BaseVertex": 4424, + "BaseInstance": 4425, + "DrawIndex": 4426, + "DeviceIndex": 4438, + "ViewIndex": 4440, + "ViewportMaskNV": 5253, + "SecondaryPositionNV": 5257, + "SecondaryViewportMaskNV": 5258, + "PositionPerViewNV": 5261, + "ViewportMaskPerViewNV": 5262 + } + }, + { + "Name": "SelectionControl", + "Type": "Bit", + "Values": + { + "Flatten": 0, + "DontFlatten": 1 + } + }, + { + "Name": "LoopControl", + "Type": "Bit", + "Values": + { + "Unroll": 0, + "DontUnroll": 1, + "DependencyInfinite": 2, + "DependencyLength": 3 + } + }, + { + "Name": "FunctionControl", + "Type": "Bit", + "Values": + { + "Inline": 0, + "DontInline": 1, + "Pure": 2, + "Const": 3 + } + }, + { + "Name": "MemorySemantics", + "Type": "Bit", + "Values": + { + "Acquire": 1, + "Release": 2, + "AcquireRelease": 3, + "SequentiallyConsistent": 4, + "UniformMemory": 6, + "SubgroupMemory": 7, + "WorkgroupMemory": 8, + "CrossWorkgroupMemory": 9, + "AtomicCounterMemory": 10, + "ImageMemory": 11 + } + }, + { + "Name": "MemoryAccess", + "Type": "Bit", + "Values": + { + "Volatile": 0, + "Aligned": 1, + "Nontemporal": 2 + } + }, + { + "Name": "Scope", + "Type": "Value", + "Values": + { + "CrossDevice": 0, + "Device": 1, + "Workgroup": 2, + "Subgroup": 3, + "Invocation": 4 + } + }, + { + "Name": "GroupOperation", + "Type": "Value", + "Values": + { + "Reduce": 0, + "InclusiveScan": 1, + "ExclusiveScan": 2 + } + }, + { + "Name": "KernelEnqueueFlags", + "Type": "Value", + "Values": + { + "NoWait": 0, + "WaitKernel": 1, + "WaitWorkGroup": 2 + } + }, + { + "Name": "KernelProfilingInfo", + "Type": "Bit", + "Values": + { + "CmdExecTime": 0 + } + }, + { + "Name": "Capability", + "Type": "Value", + "Values": + { + "Matrix": 0, + "Shader": 1, + "Geometry": 2, + "Tessellation": 3, + "Addresses": 4, + "Linkage": 5, + "Kernel": 6, + "Vector16": 7, + "Float16Buffer": 8, + "Float16": 9, + "Float64": 10, + "Int64": 11, + "Int64Atomics": 12, + "ImageBasic": 13, + "ImageReadWrite": 14, + "ImageMipmap": 15, + "Pipes": 17, + "Groups": 18, + "DeviceEnqueue": 19, + "LiteralSampler": 20, + "AtomicStorage": 21, + "Int16": 22, + "TessellationPointSize": 23, + "GeometryPointSize": 24, + "ImageGatherExtended": 25, + "StorageImageMultisample": 27, + "UniformBufferArrayDynamicIndexing": 28, + "SampledImageArrayDynamicIndexing": 29, + "StorageBufferArrayDynamicIndexing": 30, + "StorageImageArrayDynamicIndexing": 31, + "ClipDistance": 32, + "CullDistance": 33, + "ImageCubeArray": 34, + "SampleRateShading": 35, + "ImageRect": 36, + "SampledRect": 37, + "GenericPointer": 38, + "Int8": 39, + "InputAttachment": 40, + "SparseResidency": 41, + "MinLod": 42, + "Sampled1D": 43, + "Image1D": 44, + "SampledCubeArray": 45, + "SampledBuffer": 46, + "ImageBuffer": 47, + "ImageMSArray": 48, + "StorageImageExtendedFormats": 49, + "ImageQuery": 50, + "DerivativeControl": 51, + "InterpolationFunction": 52, + "TransformFeedback": 53, + "GeometryStreams": 54, + "StorageImageReadWithoutFormat": 55, + "StorageImageWriteWithoutFormat": 56, + "MultiViewport": 57, + "SubgroupDispatch": 58, + "NamedBarrier": 59, + "PipeStorage": 60, + "SubgroupBallotKHR": 4423, + "DrawParameters": 4427, + "SubgroupVoteKHR": 4431, + "StorageUniformBufferBlock16": 4433, + "StorageUniform16": 4434, + "StoragePushConstant16": 4435, + "StorageInputOutput16": 4436, + "DeviceGroup": 4437, + "MultiView": 4439, + "SampleMaskOverrideCoverageNV": 5249, + "GeometryShaderPassthroughNV": 5251, + "ShaderViewportIndexLayerNV": 5254, + "ShaderViewportMaskNV": 5255, + "ShaderStereoViewNV": 5259, + "PerViewAttributesNV": 5260 + } + }, + { + "Name": "Op", + "Type": "Value", + "Values": + { + "OpNop": 0, + "OpUndef": 1, + "OpSourceContinued": 2, + "OpSource": 3, + "OpSourceExtension": 4, + "OpName": 5, + "OpMemberName": 6, + "OpString": 7, + "OpLine": 8, + "OpExtension": 10, + "OpExtInstImport": 11, + "OpExtInst": 12, + "OpMemoryModel": 14, + "OpEntryPoint": 15, + "OpExecutionMode": 16, + "OpCapability": 17, + "OpTypeVoid": 19, + "OpTypeBool": 20, + "OpTypeInt": 21, + "OpTypeFloat": 22, + "OpTypeVector": 23, + "OpTypeMatrix": 24, + "OpTypeImage": 25, + "OpTypeSampler": 26, + "OpTypeSampledImage": 27, + "OpTypeArray": 28, + "OpTypeRuntimeArray": 29, + "OpTypeStruct": 30, + "OpTypeOpaque": 31, + "OpTypePointer": 32, + "OpTypeFunction": 33, + "OpTypeEvent": 34, + "OpTypeDeviceEvent": 35, + "OpTypeReserveId": 36, + "OpTypeQueue": 37, + "OpTypePipe": 38, + "OpTypeForwardPointer": 39, + "OpConstantTrue": 41, + "OpConstantFalse": 42, + "OpConstant": 43, + "OpConstantComposite": 44, + "OpConstantSampler": 45, + "OpConstantNull": 46, + "OpSpecConstantTrue": 48, + "OpSpecConstantFalse": 49, + "OpSpecConstant": 50, + "OpSpecConstantComposite": 51, + "OpSpecConstantOp": 52, + "OpFunction": 54, + "OpFunctionParameter": 55, + "OpFunctionEnd": 56, + "OpFunctionCall": 57, + "OpVariable": 59, + "OpImageTexelPointer": 60, + "OpLoad": 61, + "OpStore": 62, + "OpCopyMemory": 63, + "OpCopyMemorySized": 64, + "OpAccessChain": 65, + "OpInBoundsAccessChain": 66, + "OpPtrAccessChain": 67, + "OpArrayLength": 68, + "OpGenericPtrMemSemantics": 69, + "OpInBoundsPtrAccessChain": 70, + "OpDecorate": 71, + "OpMemberDecorate": 72, + "OpDecorationGroup": 73, + "OpGroupDecorate": 74, + "OpGroupMemberDecorate": 75, + "OpVectorExtractDynamic": 77, + "OpVectorInsertDynamic": 78, + "OpVectorShuffle": 79, + "OpCompositeConstruct": 80, + "OpCompositeExtract": 81, + "OpCompositeInsert": 82, + "OpCopyObject": 83, + "OpTranspose": 84, + "OpSampledImage": 86, + "OpImageSampleImplicitLod": 87, + "OpImageSampleExplicitLod": 88, + "OpImageSampleDrefImplicitLod": 89, + "OpImageSampleDrefExplicitLod": 90, + "OpImageSampleProjImplicitLod": 91, + "OpImageSampleProjExplicitLod": 92, + "OpImageSampleProjDrefImplicitLod": 93, + "OpImageSampleProjDrefExplicitLod": 94, + "OpImageFetch": 95, + "OpImageGather": 96, + "OpImageDrefGather": 97, + "OpImageRead": 98, + "OpImageWrite": 99, + "OpImage": 100, + "OpImageQueryFormat": 101, + "OpImageQueryOrder": 102, + "OpImageQuerySizeLod": 103, + "OpImageQuerySize": 104, + "OpImageQueryLod": 105, + "OpImageQueryLevels": 106, + "OpImageQuerySamples": 107, + "OpConvertFToU": 109, + "OpConvertFToS": 110, + "OpConvertSToF": 111, + "OpConvertUToF": 112, + "OpUConvert": 113, + "OpSConvert": 114, + "OpFConvert": 115, + "OpQuantizeToF16": 116, + "OpConvertPtrToU": 117, + "OpSatConvertSToU": 118, + "OpSatConvertUToS": 119, + "OpConvertUToPtr": 120, + "OpPtrCastToGeneric": 121, + "OpGenericCastToPtr": 122, + "OpGenericCastToPtrExplicit": 123, + "OpBitcast": 124, + "OpSNegate": 126, + "OpFNegate": 127, + "OpIAdd": 128, + "OpFAdd": 129, + "OpISub": 130, + "OpFSub": 131, + "OpIMul": 132, + "OpFMul": 133, + "OpUDiv": 134, + "OpSDiv": 135, + "OpFDiv": 136, + "OpUMod": 137, + "OpSRem": 138, + "OpSMod": 139, + "OpFRem": 140, + "OpFMod": 141, + "OpVectorTimesScalar": 142, + "OpMatrixTimesScalar": 143, + "OpVectorTimesMatrix": 144, + "OpMatrixTimesVector": 145, + "OpMatrixTimesMatrix": 146, + "OpOuterProduct": 147, + "OpDot": 148, + "OpIAddCarry": 149, + "OpISubBorrow": 150, + "OpUMulExtended": 151, + "OpSMulExtended": 152, + "OpAny": 154, + "OpAll": 155, + "OpIsNan": 156, + "OpIsInf": 157, + "OpIsFinite": 158, + "OpIsNormal": 159, + "OpSignBitSet": 160, + "OpLessOrGreater": 161, + "OpOrdered": 162, + "OpUnordered": 163, + "OpLogicalEqual": 164, + "OpLogicalNotEqual": 165, + "OpLogicalOr": 166, + "OpLogicalAnd": 167, + "OpLogicalNot": 168, + "OpSelect": 169, + "OpIEqual": 170, + "OpINotEqual": 171, + "OpUGreaterThan": 172, + "OpSGreaterThan": 173, + "OpUGreaterThanEqual": 174, + "OpSGreaterThanEqual": 175, + "OpULessThan": 176, + "OpSLessThan": 177, + "OpULessThanEqual": 178, + "OpSLessThanEqual": 179, + "OpFOrdEqual": 180, + "OpFUnordEqual": 181, + "OpFOrdNotEqual": 182, + "OpFUnordNotEqual": 183, + "OpFOrdLessThan": 184, + "OpFUnordLessThan": 185, + "OpFOrdGreaterThan": 186, + "OpFUnordGreaterThan": 187, + "OpFOrdLessThanEqual": 188, + "OpFUnordLessThanEqual": 189, + "OpFOrdGreaterThanEqual": 190, + "OpFUnordGreaterThanEqual": 191, + "OpShiftRightLogical": 194, + "OpShiftRightArithmetic": 195, + "OpShiftLeftLogical": 196, + "OpBitwiseOr": 197, + "OpBitwiseXor": 198, + "OpBitwiseAnd": 199, + "OpNot": 200, + "OpBitFieldInsert": 201, + "OpBitFieldSExtract": 202, + "OpBitFieldUExtract": 203, + "OpBitReverse": 204, + "OpBitCount": 205, + "OpDPdx": 207, + "OpDPdy": 208, + "OpFwidth": 209, + "OpDPdxFine": 210, + "OpDPdyFine": 211, + "OpFwidthFine": 212, + "OpDPdxCoarse": 213, + "OpDPdyCoarse": 214, + "OpFwidthCoarse": 215, + "OpEmitVertex": 218, + "OpEndPrimitive": 219, + "OpEmitStreamVertex": 220, + "OpEndStreamPrimitive": 221, + "OpControlBarrier": 224, + "OpMemoryBarrier": 225, + "OpAtomicLoad": 227, + "OpAtomicStore": 228, + "OpAtomicExchange": 229, + "OpAtomicCompareExchange": 230, + "OpAtomicCompareExchangeWeak": 231, + "OpAtomicIIncrement": 232, + "OpAtomicIDecrement": 233, + "OpAtomicIAdd": 234, + "OpAtomicISub": 235, + "OpAtomicSMin": 236, + "OpAtomicUMin": 237, + "OpAtomicSMax": 238, + "OpAtomicUMax": 239, + "OpAtomicAnd": 240, + "OpAtomicOr": 241, + "OpAtomicXor": 242, + "OpPhi": 245, + "OpLoopMerge": 246, + "OpSelectionMerge": 247, + "OpLabel": 248, + "OpBranch": 249, + "OpBranchConditional": 250, + "OpSwitch": 251, + "OpKill": 252, + "OpReturn": 253, + "OpReturnValue": 254, + "OpUnreachable": 255, + "OpLifetimeStart": 256, + "OpLifetimeStop": 257, + "OpGroupAsyncCopy": 259, + "OpGroupWaitEvents": 260, + "OpGroupAll": 261, + "OpGroupAny": 262, + "OpGroupBroadcast": 263, + "OpGroupIAdd": 264, + "OpGroupFAdd": 265, + "OpGroupFMin": 266, + "OpGroupUMin": 267, + "OpGroupSMin": 268, + "OpGroupFMax": 269, + "OpGroupUMax": 270, + "OpGroupSMax": 271, + "OpReadPipe": 274, + "OpWritePipe": 275, + "OpReservedReadPipe": 276, + "OpReservedWritePipe": 277, + "OpReserveReadPipePackets": 278, + "OpReserveWritePipePackets": 279, + "OpCommitReadPipe": 280, + "OpCommitWritePipe": 281, + "OpIsValidReserveId": 282, + "OpGetNumPipePackets": 283, + "OpGetMaxPipePackets": 284, + "OpGroupReserveReadPipePackets": 285, + "OpGroupReserveWritePipePackets": 286, + "OpGroupCommitReadPipe": 287, + "OpGroupCommitWritePipe": 288, + "OpEnqueueMarker": 291, + "OpEnqueueKernel": 292, + "OpGetKernelNDrangeSubGroupCount": 293, + "OpGetKernelNDrangeMaxSubGroupSize": 294, + "OpGetKernelWorkGroupSize": 295, + "OpGetKernelPreferredWorkGroupSizeMultiple": 296, + "OpRetainEvent": 297, + "OpReleaseEvent": 298, + "OpCreateUserEvent": 299, + "OpIsValidEvent": 300, + "OpSetUserEventStatus": 301, + "OpCaptureEventProfilingInfo": 302, + "OpGetDefaultQueue": 303, + "OpBuildNDRange": 304, + "OpImageSparseSampleImplicitLod": 305, + "OpImageSparseSampleExplicitLod": 306, + "OpImageSparseSampleDrefImplicitLod": 307, + "OpImageSparseSampleDrefExplicitLod": 308, + "OpImageSparseSampleProjImplicitLod": 309, + "OpImageSparseSampleProjExplicitLod": 310, + "OpImageSparseSampleProjDrefImplicitLod": 311, + "OpImageSparseSampleProjDrefExplicitLod": 312, + "OpImageSparseFetch": 313, + "OpImageSparseGather": 314, + "OpImageSparseDrefGather": 315, + "OpImageSparseTexelsResident": 316, + "OpNoLine": 317, + "OpAtomicFlagTestAndSet": 318, + "OpAtomicFlagClear": 319, + "OpImageSparseRead": 320, + "OpSizeOf": 321, + "OpTypePipeStorage": 322, + "OpConstantPipeStorage": 323, + "OpCreatePipeFromPipeStorage": 324, + "OpGetKernelLocalSizeForSubgroupCount": 325, + "OpGetKernelMaxNumSubgroups": 326, + "OpTypeNamedBarrier": 327, + "OpNamedBarrierInitialize": 328, + "OpMemoryNamedBarrier": 329, + "OpModuleProcessed": 330, + "OpSubgroupBallotKHR": 4421, + "OpSubgroupFirstInvocationKHR": 4422, + "OpSubgroupAllKHR": 4428, + "OpSubgroupAnyKHR": 4429, + "OpSubgroupAllEqualKHR": 4430, + "OpSubgroupReadInvocationKHR": 4432 + } + } + ] + } +} + diff --git a/ext/vulkan/spirv.lua b/ext/vulkan/spirv.lua index db2f3c6d31..421c1f45bb 100644 --- a/ext/vulkan/spirv.lua +++ b/ext/vulkan/spirv.lua @@ -1,898 +1,921 @@ --- Copyright (c) 2014-2017 The Khronos Group Inc. --- --- Permission is hereby granted, free of charge, to any person obtaining a copy --- of this software and/or associated documentation files (the "Materials"), --- to deal in the Materials without restriction, including without limitation --- the rights to use, copy, modify, merge, publish, distribute, sublicense, --- and/or sell copies of the Materials, and to permit persons to whom the --- Materials are furnished to do so, subject to the following conditions: --- --- The above copyright notice and this permission notice shall be included in --- all copies or substantial portions of the Materials. --- --- MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS --- STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND --- HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ --- --- THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, --- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL --- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER --- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING --- FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS --- IN THE MATERIALS. - --- This header is automatically generated by the same tool that creates --- the Binary Section of the SPIR-V specification. - --- Enumeration tokens for SPIR-V, in various styles: --- C, C++, C++11, JSON, Lua, Python --- --- - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL --- - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL --- - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL --- - Lua will use tables, e.g.: spv.SourceLanguage.GLSL --- - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] --- --- Some tokens act like mask values, which can be OR'd together, --- while others are mutually exclusive. The mask-like ones have --- "Mask" in their name, and a parallel enum that has the shift --- amount (1 << x) for each corresponding enumerant. - -spv = { - MagicNumber = 0x07230203, - Version = 0x00010100, - Revision = 5, - OpCodeMask = 0xffff, - WordCountShift = 16, - - SourceLanguage = { - Unknown = 0, - ESSL = 1, - GLSL = 2, - OpenCL_C = 3, - OpenCL_CPP = 4, - }, - - ExecutionModel = { - Vertex = 0, - TessellationControl = 1, - TessellationEvaluation = 2, - Geometry = 3, - Fragment = 4, - GLCompute = 5, - Kernel = 6, - }, - - AddressingModel = { - Logical = 0, - Physical32 = 1, - Physical64 = 2, - }, - - MemoryModel = { - Simple = 0, - GLSL450 = 1, - OpenCL = 2, - }, - - ExecutionMode = { - Invocations = 0, - SpacingEqual = 1, - SpacingFractionalEven = 2, - SpacingFractionalOdd = 3, - VertexOrderCw = 4, - VertexOrderCcw = 5, - PixelCenterInteger = 6, - OriginUpperLeft = 7, - OriginLowerLeft = 8, - EarlyFragmentTests = 9, - PointMode = 10, - Xfb = 11, - DepthReplacing = 12, - DepthGreater = 14, - DepthLess = 15, - DepthUnchanged = 16, - LocalSize = 17, - LocalSizeHint = 18, - InputPoints = 19, - InputLines = 20, - InputLinesAdjacency = 21, - Triangles = 22, - InputTrianglesAdjacency = 23, - Quads = 24, - Isolines = 25, - OutputVertices = 26, - OutputPoints = 27, - OutputLineStrip = 28, - OutputTriangleStrip = 29, - VecTypeHint = 30, - ContractionOff = 31, - Initializer = 33, - Finalizer = 34, - SubgroupSize = 35, - SubgroupsPerWorkgroup = 36, - }, - - StorageClass = { - UniformConstant = 0, - Input = 1, - Uniform = 2, - Output = 3, - Workgroup = 4, - CrossWorkgroup = 5, - Private = 6, - Function = 7, - Generic = 8, - PushConstant = 9, - AtomicCounter = 10, - Image = 11, - }, - - Dim = { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - Cube = 3, - Rect = 4, - Buffer = 5, - SubpassData = 6, - }, - - SamplerAddressingMode = { - None = 0, - ClampToEdge = 1, - Clamp = 2, - Repeat = 3, - RepeatMirrored = 4, - }, - - SamplerFilterMode = { - Nearest = 0, - Linear = 1, - }, - - ImageFormat = { - Unknown = 0, - Rgba32f = 1, - Rgba16f = 2, - R32f = 3, - Rgba8 = 4, - Rgba8Snorm = 5, - Rg32f = 6, - Rg16f = 7, - R11fG11fB10f = 8, - R16f = 9, - Rgba16 = 10, - Rgb10A2 = 11, - Rg16 = 12, - Rg8 = 13, - R16 = 14, - R8 = 15, - Rgba16Snorm = 16, - Rg16Snorm = 17, - Rg8Snorm = 18, - R16Snorm = 19, - R8Snorm = 20, - Rgba32i = 21, - Rgba16i = 22, - Rgba8i = 23, - R32i = 24, - Rg32i = 25, - Rg16i = 26, - Rg8i = 27, - R16i = 28, - R8i = 29, - Rgba32ui = 30, - Rgba16ui = 31, - Rgba8ui = 32, - R32ui = 33, - Rgb10a2ui = 34, - Rg32ui = 35, - Rg16ui = 36, - Rg8ui = 37, - R16ui = 38, - R8ui = 39, - }, - - ImageChannelOrder = { - R = 0, - A = 1, - RG = 2, - RA = 3, - RGB = 4, - RGBA = 5, - BGRA = 6, - ARGB = 7, - Intensity = 8, - Luminance = 9, - Rx = 10, - RGx = 11, - RGBx = 12, - Depth = 13, - DepthStencil = 14, - sRGB = 15, - sRGBx = 16, - sRGBA = 17, - sBGRA = 18, - ABGR = 19, - }, - - ImageChannelDataType = { - SnormInt8 = 0, - SnormInt16 = 1, - UnormInt8 = 2, - UnormInt16 = 3, - UnormShort565 = 4, - UnormShort555 = 5, - UnormInt101010 = 6, - SignedInt8 = 7, - SignedInt16 = 8, - SignedInt32 = 9, - UnsignedInt8 = 10, - UnsignedInt16 = 11, - UnsignedInt32 = 12, - HalfFloat = 13, - Float = 14, - UnormInt24 = 15, - UnormInt101010_2 = 16, - }, - - ImageOperandsShift = { - Bias = 0, - Lod = 1, - Grad = 2, - ConstOffset = 3, - Offset = 4, - ConstOffsets = 5, - Sample = 6, - MinLod = 7, - }, - - ImageOperandsMask = { - MaskNone = 0, - Bias = 0x00000001, - Lod = 0x00000002, - Grad = 0x00000004, - ConstOffset = 0x00000008, - Offset = 0x00000010, - ConstOffsets = 0x00000020, - Sample = 0x00000040, - MinLod = 0x00000080, - }, - - FPFastMathModeShift = { - NotNaN = 0, - NotInf = 1, - NSZ = 2, - AllowRecip = 3, - Fast = 4, - }, - - FPFastMathModeMask = { - MaskNone = 0, - NotNaN = 0x00000001, - NotInf = 0x00000002, - NSZ = 0x00000004, - AllowRecip = 0x00000008, - Fast = 0x00000010, - }, - - FPRoundingMode = { - RTE = 0, - RTZ = 1, - RTP = 2, - RTN = 3, - }, - - LinkageType = { - Export = 0, - Import = 1, - }, - - AccessQualifier = { - ReadOnly = 0, - WriteOnly = 1, - ReadWrite = 2, - }, - - FunctionParameterAttribute = { - Zext = 0, - Sext = 1, - ByVal = 2, - Sret = 3, - NoAlias = 4, - NoCapture = 5, - NoWrite = 6, - NoReadWrite = 7, - }, - - Decoration = { - RelaxedPrecision = 0, - SpecId = 1, - Block = 2, - BufferBlock = 3, - RowMajor = 4, - ColMajor = 5, - ArrayStride = 6, - MatrixStride = 7, - GLSLShared = 8, - GLSLPacked = 9, - CPacked = 10, - BuiltIn = 11, - NoPerspective = 13, - Flat = 14, - Patch = 15, - Centroid = 16, - Sample = 17, - Invariant = 18, - Restrict = 19, - Aliased = 20, - Volatile = 21, - Constant = 22, - Coherent = 23, - NonWritable = 24, - NonReadable = 25, - Uniform = 26, - SaturatedConversion = 28, - Stream = 29, - Location = 30, - Component = 31, - Index = 32, - Binding = 33, - DescriptorSet = 34, - Offset = 35, - XfbBuffer = 36, - XfbStride = 37, - FuncParamAttr = 38, - FPRoundingMode = 39, - FPFastMathMode = 40, - LinkageAttributes = 41, - NoContraction = 42, - InputAttachmentIndex = 43, - Alignment = 44, - MaxByteOffset = 45, - }, - - BuiltIn = { - Position = 0, - PointSize = 1, - ClipDistance = 3, - CullDistance = 4, - VertexId = 5, - InstanceId = 6, - PrimitiveId = 7, - InvocationId = 8, - Layer = 9, - ViewportIndex = 10, - TessLevelOuter = 11, - TessLevelInner = 12, - TessCoord = 13, - PatchVertices = 14, - FragCoord = 15, - PointCoord = 16, - FrontFacing = 17, - SampleId = 18, - SamplePosition = 19, - SampleMask = 20, - FragDepth = 22, - HelperInvocation = 23, - NumWorkgroups = 24, - WorkgroupSize = 25, - WorkgroupId = 26, - LocalInvocationId = 27, - GlobalInvocationId = 28, - LocalInvocationIndex = 29, - WorkDim = 30, - GlobalSize = 31, - EnqueuedWorkgroupSize = 32, - GlobalOffset = 33, - GlobalLinearId = 34, - SubgroupSize = 36, - SubgroupMaxSize = 37, - NumSubgroups = 38, - NumEnqueuedSubgroups = 39, - SubgroupId = 40, - SubgroupLocalInvocationId = 41, - VertexIndex = 42, - InstanceIndex = 43, - SubgroupEqMaskKHR = 4416, - SubgroupGeMaskKHR = 4417, - SubgroupGtMaskKHR = 4418, - SubgroupLeMaskKHR = 4419, - SubgroupLtMaskKHR = 4420, - BaseVertex = 4424, - BaseInstance = 4425, - DrawIndex = 4426, - }, - - SelectionControlShift = { - Flatten = 0, - DontFlatten = 1, - }, - - SelectionControlMask = { - MaskNone = 0, - Flatten = 0x00000001, - DontFlatten = 0x00000002, - }, - - LoopControlShift = { - Unroll = 0, - DontUnroll = 1, - DependencyInfinite = 2, - DependencyLength = 3, - }, - - LoopControlMask = { - MaskNone = 0, - Unroll = 0x00000001, - DontUnroll = 0x00000002, - DependencyInfinite = 0x00000004, - DependencyLength = 0x00000008, - }, - - FunctionControlShift = { - Inline = 0, - DontInline = 1, - Pure = 2, - Const = 3, - }, - - FunctionControlMask = { - MaskNone = 0, - Inline = 0x00000001, - DontInline = 0x00000002, - Pure = 0x00000004, - Const = 0x00000008, - }, - - MemorySemanticsShift = { - Acquire = 1, - Release = 2, - AcquireRelease = 3, - SequentiallyConsistent = 4, - UniformMemory = 6, - SubgroupMemory = 7, - WorkgroupMemory = 8, - CrossWorkgroupMemory = 9, - AtomicCounterMemory = 10, - ImageMemory = 11, - }, - - MemorySemanticsMask = { - MaskNone = 0, - Acquire = 0x00000002, - Release = 0x00000004, - AcquireRelease = 0x00000008, - SequentiallyConsistent = 0x00000010, - UniformMemory = 0x00000040, - SubgroupMemory = 0x00000080, - WorkgroupMemory = 0x00000100, - CrossWorkgroupMemory = 0x00000200, - AtomicCounterMemory = 0x00000400, - ImageMemory = 0x00000800, - }, - - MemoryAccessShift = { - Volatile = 0, - Aligned = 1, - Nontemporal = 2, - }, - - MemoryAccessMask = { - MaskNone = 0, - Volatile = 0x00000001, - Aligned = 0x00000002, - Nontemporal = 0x00000004, - }, - - Scope = { - CrossDevice = 0, - Device = 1, - Workgroup = 2, - Subgroup = 3, - Invocation = 4, - }, - - GroupOperation = { - Reduce = 0, - InclusiveScan = 1, - ExclusiveScan = 2, - }, - - KernelEnqueueFlags = { - NoWait = 0, - WaitKernel = 1, - WaitWorkGroup = 2, - }, - - KernelProfilingInfoShift = { - CmdExecTime = 0, - }, - - KernelProfilingInfoMask = { - MaskNone = 0, - CmdExecTime = 0x00000001, - }, - - Capability = { - Matrix = 0, - Shader = 1, - Geometry = 2, - Tessellation = 3, - Addresses = 4, - Linkage = 5, - Kernel = 6, - Vector16 = 7, - Float16Buffer = 8, - Float16 = 9, - Float64 = 10, - Int64 = 11, - Int64Atomics = 12, - ImageBasic = 13, - ImageReadWrite = 14, - ImageMipmap = 15, - Pipes = 17, - Groups = 18, - DeviceEnqueue = 19, - LiteralSampler = 20, - AtomicStorage = 21, - Int16 = 22, - TessellationPointSize = 23, - GeometryPointSize = 24, - ImageGatherExtended = 25, - StorageImageMultisample = 27, - UniformBufferArrayDynamicIndexing = 28, - SampledImageArrayDynamicIndexing = 29, - StorageBufferArrayDynamicIndexing = 30, - StorageImageArrayDynamicIndexing = 31, - ClipDistance = 32, - CullDistance = 33, - ImageCubeArray = 34, - SampleRateShading = 35, - ImageRect = 36, - SampledRect = 37, - GenericPointer = 38, - Int8 = 39, - InputAttachment = 40, - SparseResidency = 41, - MinLod = 42, - Sampled1D = 43, - Image1D = 44, - SampledCubeArray = 45, - SampledBuffer = 46, - ImageBuffer = 47, - ImageMSArray = 48, - StorageImageExtendedFormats = 49, - ImageQuery = 50, - DerivativeControl = 51, - InterpolationFunction = 52, - TransformFeedback = 53, - GeometryStreams = 54, - StorageImageReadWithoutFormat = 55, - StorageImageWriteWithoutFormat = 56, - MultiViewport = 57, - SubgroupDispatch = 58, - NamedBarrier = 59, - PipeStorage = 60, - SubgroupBallotKHR = 4423, - DrawParameters = 4427, - SubgroupVoteKHR = 4431, - }, - - Op = { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpSubgroupReadInvocationKHR = 4432, - }, - -} - +-- Copyright (c) 2014-2017 The Khronos Group Inc. +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy +-- of this software and/or associated documentation files (the "Materials"), +-- to deal in the Materials without restriction, including without limitation +-- the rights to use, copy, modify, merge, publish, distribute, sublicense, +-- and/or sell copies of the Materials, and to permit persons to whom the +-- Materials are furnished to do so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in +-- all copies or substantial portions of the Materials. +-- +-- MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +-- STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +-- HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +-- +-- THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +-- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +-- FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +-- IN THE MATERIALS. + +-- This header is automatically generated by the same tool that creates +-- the Binary Section of the SPIR-V specification. + +-- Enumeration tokens for SPIR-V, in various styles: +-- C, C++, C++11, JSON, Lua, Python +-- +-- - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +-- - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +-- - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +-- - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +-- - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +-- +-- Some tokens act like mask values, which can be OR'd together, +-- while others are mutually exclusive. The mask-like ones have +-- "Mask" in their name, and a parallel enum that has the shift +-- amount (1 << x) for each corresponding enumerant. + +spv = { + MagicNumber = 0x07230203, + Version = 0x00010100, + Revision = 6, + OpCodeMask = 0xffff, + WordCountShift = 16, + + SourceLanguage = { + Unknown = 0, + ESSL = 1, + GLSL = 2, + OpenCL_C = 3, + OpenCL_CPP = 4, + }, + + ExecutionModel = { + Vertex = 0, + TessellationControl = 1, + TessellationEvaluation = 2, + Geometry = 3, + Fragment = 4, + GLCompute = 5, + Kernel = 6, + }, + + AddressingModel = { + Logical = 0, + Physical32 = 1, + Physical64 = 2, + }, + + MemoryModel = { + Simple = 0, + GLSL450 = 1, + OpenCL = 2, + }, + + ExecutionMode = { + Invocations = 0, + SpacingEqual = 1, + SpacingFractionalEven = 2, + SpacingFractionalOdd = 3, + VertexOrderCw = 4, + VertexOrderCcw = 5, + PixelCenterInteger = 6, + OriginUpperLeft = 7, + OriginLowerLeft = 8, + EarlyFragmentTests = 9, + PointMode = 10, + Xfb = 11, + DepthReplacing = 12, + DepthGreater = 14, + DepthLess = 15, + DepthUnchanged = 16, + LocalSize = 17, + LocalSizeHint = 18, + InputPoints = 19, + InputLines = 20, + InputLinesAdjacency = 21, + Triangles = 22, + InputTrianglesAdjacency = 23, + Quads = 24, + Isolines = 25, + OutputVertices = 26, + OutputPoints = 27, + OutputLineStrip = 28, + OutputTriangleStrip = 29, + VecTypeHint = 30, + ContractionOff = 31, + Initializer = 33, + Finalizer = 34, + SubgroupSize = 35, + SubgroupsPerWorkgroup = 36, + }, + + StorageClass = { + UniformConstant = 0, + Input = 1, + Uniform = 2, + Output = 3, + Workgroup = 4, + CrossWorkgroup = 5, + Private = 6, + Function = 7, + Generic = 8, + PushConstant = 9, + AtomicCounter = 10, + Image = 11, + }, + + Dim = { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + Cube = 3, + Rect = 4, + Buffer = 5, + SubpassData = 6, + }, + + SamplerAddressingMode = { + None = 0, + ClampToEdge = 1, + Clamp = 2, + Repeat = 3, + RepeatMirrored = 4, + }, + + SamplerFilterMode = { + Nearest = 0, + Linear = 1, + }, + + ImageFormat = { + Unknown = 0, + Rgba32f = 1, + Rgba16f = 2, + R32f = 3, + Rgba8 = 4, + Rgba8Snorm = 5, + Rg32f = 6, + Rg16f = 7, + R11fG11fB10f = 8, + R16f = 9, + Rgba16 = 10, + Rgb10A2 = 11, + Rg16 = 12, + Rg8 = 13, + R16 = 14, + R8 = 15, + Rgba16Snorm = 16, + Rg16Snorm = 17, + Rg8Snorm = 18, + R16Snorm = 19, + R8Snorm = 20, + Rgba32i = 21, + Rgba16i = 22, + Rgba8i = 23, + R32i = 24, + Rg32i = 25, + Rg16i = 26, + Rg8i = 27, + R16i = 28, + R8i = 29, + Rgba32ui = 30, + Rgba16ui = 31, + Rgba8ui = 32, + R32ui = 33, + Rgb10a2ui = 34, + Rg32ui = 35, + Rg16ui = 36, + Rg8ui = 37, + R16ui = 38, + R8ui = 39, + }, + + ImageChannelOrder = { + R = 0, + A = 1, + RG = 2, + RA = 3, + RGB = 4, + RGBA = 5, + BGRA = 6, + ARGB = 7, + Intensity = 8, + Luminance = 9, + Rx = 10, + RGx = 11, + RGBx = 12, + Depth = 13, + DepthStencil = 14, + sRGB = 15, + sRGBx = 16, + sRGBA = 17, + sBGRA = 18, + ABGR = 19, + }, + + ImageChannelDataType = { + SnormInt8 = 0, + SnormInt16 = 1, + UnormInt8 = 2, + UnormInt16 = 3, + UnormShort565 = 4, + UnormShort555 = 5, + UnormInt101010 = 6, + SignedInt8 = 7, + SignedInt16 = 8, + SignedInt32 = 9, + UnsignedInt8 = 10, + UnsignedInt16 = 11, + UnsignedInt32 = 12, + HalfFloat = 13, + Float = 14, + UnormInt24 = 15, + UnormInt101010_2 = 16, + }, + + ImageOperandsShift = { + Bias = 0, + Lod = 1, + Grad = 2, + ConstOffset = 3, + Offset = 4, + ConstOffsets = 5, + Sample = 6, + MinLod = 7, + }, + + ImageOperandsMask = { + MaskNone = 0, + Bias = 0x00000001, + Lod = 0x00000002, + Grad = 0x00000004, + ConstOffset = 0x00000008, + Offset = 0x00000010, + ConstOffsets = 0x00000020, + Sample = 0x00000040, + MinLod = 0x00000080, + }, + + FPFastMathModeShift = { + NotNaN = 0, + NotInf = 1, + NSZ = 2, + AllowRecip = 3, + Fast = 4, + }, + + FPFastMathModeMask = { + MaskNone = 0, + NotNaN = 0x00000001, + NotInf = 0x00000002, + NSZ = 0x00000004, + AllowRecip = 0x00000008, + Fast = 0x00000010, + }, + + FPRoundingMode = { + RTE = 0, + RTZ = 1, + RTP = 2, + RTN = 3, + }, + + LinkageType = { + Export = 0, + Import = 1, + }, + + AccessQualifier = { + ReadOnly = 0, + WriteOnly = 1, + ReadWrite = 2, + }, + + FunctionParameterAttribute = { + Zext = 0, + Sext = 1, + ByVal = 2, + Sret = 3, + NoAlias = 4, + NoCapture = 5, + NoWrite = 6, + NoReadWrite = 7, + }, + + Decoration = { + RelaxedPrecision = 0, + SpecId = 1, + Block = 2, + BufferBlock = 3, + RowMajor = 4, + ColMajor = 5, + ArrayStride = 6, + MatrixStride = 7, + GLSLShared = 8, + GLSLPacked = 9, + CPacked = 10, + BuiltIn = 11, + NoPerspective = 13, + Flat = 14, + Patch = 15, + Centroid = 16, + Sample = 17, + Invariant = 18, + Restrict = 19, + Aliased = 20, + Volatile = 21, + Constant = 22, + Coherent = 23, + NonWritable = 24, + NonReadable = 25, + Uniform = 26, + SaturatedConversion = 28, + Stream = 29, + Location = 30, + Component = 31, + Index = 32, + Binding = 33, + DescriptorSet = 34, + Offset = 35, + XfbBuffer = 36, + XfbStride = 37, + FuncParamAttr = 38, + FPRoundingMode = 39, + FPFastMathMode = 40, + LinkageAttributes = 41, + NoContraction = 42, + InputAttachmentIndex = 43, + Alignment = 44, + MaxByteOffset = 45, + OverrideCoverageNV = 5248, + PassthroughNV = 5250, + ViewportRelativeNV = 5252, + SecondaryViewportRelativeNV = 5256, + }, + + BuiltIn = { + Position = 0, + PointSize = 1, + ClipDistance = 3, + CullDistance = 4, + VertexId = 5, + InstanceId = 6, + PrimitiveId = 7, + InvocationId = 8, + Layer = 9, + ViewportIndex = 10, + TessLevelOuter = 11, + TessLevelInner = 12, + TessCoord = 13, + PatchVertices = 14, + FragCoord = 15, + PointCoord = 16, + FrontFacing = 17, + SampleId = 18, + SamplePosition = 19, + SampleMask = 20, + FragDepth = 22, + HelperInvocation = 23, + NumWorkgroups = 24, + WorkgroupSize = 25, + WorkgroupId = 26, + LocalInvocationId = 27, + GlobalInvocationId = 28, + LocalInvocationIndex = 29, + WorkDim = 30, + GlobalSize = 31, + EnqueuedWorkgroupSize = 32, + GlobalOffset = 33, + GlobalLinearId = 34, + SubgroupSize = 36, + SubgroupMaxSize = 37, + NumSubgroups = 38, + NumEnqueuedSubgroups = 39, + SubgroupId = 40, + SubgroupLocalInvocationId = 41, + VertexIndex = 42, + InstanceIndex = 43, + SubgroupEqMaskKHR = 4416, + SubgroupGeMaskKHR = 4417, + SubgroupGtMaskKHR = 4418, + SubgroupLeMaskKHR = 4419, + SubgroupLtMaskKHR = 4420, + BaseVertex = 4424, + BaseInstance = 4425, + DrawIndex = 4426, + DeviceIndex = 4438, + ViewIndex = 4440, + ViewportMaskNV = 5253, + SecondaryPositionNV = 5257, + SecondaryViewportMaskNV = 5258, + PositionPerViewNV = 5261, + ViewportMaskPerViewNV = 5262, + }, + + SelectionControlShift = { + Flatten = 0, + DontFlatten = 1, + }, + + SelectionControlMask = { + MaskNone = 0, + Flatten = 0x00000001, + DontFlatten = 0x00000002, + }, + + LoopControlShift = { + Unroll = 0, + DontUnroll = 1, + DependencyInfinite = 2, + DependencyLength = 3, + }, + + LoopControlMask = { + MaskNone = 0, + Unroll = 0x00000001, + DontUnroll = 0x00000002, + DependencyInfinite = 0x00000004, + DependencyLength = 0x00000008, + }, + + FunctionControlShift = { + Inline = 0, + DontInline = 1, + Pure = 2, + Const = 3, + }, + + FunctionControlMask = { + MaskNone = 0, + Inline = 0x00000001, + DontInline = 0x00000002, + Pure = 0x00000004, + Const = 0x00000008, + }, + + MemorySemanticsShift = { + Acquire = 1, + Release = 2, + AcquireRelease = 3, + SequentiallyConsistent = 4, + UniformMemory = 6, + SubgroupMemory = 7, + WorkgroupMemory = 8, + CrossWorkgroupMemory = 9, + AtomicCounterMemory = 10, + ImageMemory = 11, + }, + + MemorySemanticsMask = { + MaskNone = 0, + Acquire = 0x00000002, + Release = 0x00000004, + AcquireRelease = 0x00000008, + SequentiallyConsistent = 0x00000010, + UniformMemory = 0x00000040, + SubgroupMemory = 0x00000080, + WorkgroupMemory = 0x00000100, + CrossWorkgroupMemory = 0x00000200, + AtomicCounterMemory = 0x00000400, + ImageMemory = 0x00000800, + }, + + MemoryAccessShift = { + Volatile = 0, + Aligned = 1, + Nontemporal = 2, + }, + + MemoryAccessMask = { + MaskNone = 0, + Volatile = 0x00000001, + Aligned = 0x00000002, + Nontemporal = 0x00000004, + }, + + Scope = { + CrossDevice = 0, + Device = 1, + Workgroup = 2, + Subgroup = 3, + Invocation = 4, + }, + + GroupOperation = { + Reduce = 0, + InclusiveScan = 1, + ExclusiveScan = 2, + }, + + KernelEnqueueFlags = { + NoWait = 0, + WaitKernel = 1, + WaitWorkGroup = 2, + }, + + KernelProfilingInfoShift = { + CmdExecTime = 0, + }, + + KernelProfilingInfoMask = { + MaskNone = 0, + CmdExecTime = 0x00000001, + }, + + Capability = { + Matrix = 0, + Shader = 1, + Geometry = 2, + Tessellation = 3, + Addresses = 4, + Linkage = 5, + Kernel = 6, + Vector16 = 7, + Float16Buffer = 8, + Float16 = 9, + Float64 = 10, + Int64 = 11, + Int64Atomics = 12, + ImageBasic = 13, + ImageReadWrite = 14, + ImageMipmap = 15, + Pipes = 17, + Groups = 18, + DeviceEnqueue = 19, + LiteralSampler = 20, + AtomicStorage = 21, + Int16 = 22, + TessellationPointSize = 23, + GeometryPointSize = 24, + ImageGatherExtended = 25, + StorageImageMultisample = 27, + UniformBufferArrayDynamicIndexing = 28, + SampledImageArrayDynamicIndexing = 29, + StorageBufferArrayDynamicIndexing = 30, + StorageImageArrayDynamicIndexing = 31, + ClipDistance = 32, + CullDistance = 33, + ImageCubeArray = 34, + SampleRateShading = 35, + ImageRect = 36, + SampledRect = 37, + GenericPointer = 38, + Int8 = 39, + InputAttachment = 40, + SparseResidency = 41, + MinLod = 42, + Sampled1D = 43, + Image1D = 44, + SampledCubeArray = 45, + SampledBuffer = 46, + ImageBuffer = 47, + ImageMSArray = 48, + StorageImageExtendedFormats = 49, + ImageQuery = 50, + DerivativeControl = 51, + InterpolationFunction = 52, + TransformFeedback = 53, + GeometryStreams = 54, + StorageImageReadWithoutFormat = 55, + StorageImageWriteWithoutFormat = 56, + MultiViewport = 57, + SubgroupDispatch = 58, + NamedBarrier = 59, + PipeStorage = 60, + SubgroupBallotKHR = 4423, + DrawParameters = 4427, + SubgroupVoteKHR = 4431, + StorageUniformBufferBlock16 = 4433, + StorageUniform16 = 4434, + StoragePushConstant16 = 4435, + StorageInputOutput16 = 4436, + DeviceGroup = 4437, + MultiView = 4439, + SampleMaskOverrideCoverageNV = 5249, + GeometryShaderPassthroughNV = 5251, + ShaderViewportIndexLayerNV = 5254, + ShaderViewportMaskNV = 5255, + ShaderStereoViewNV = 5259, + PerViewAttributesNV = 5260, + }, + + Op = { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSizeOf = 321, + OpTypePipeStorage = 322, + OpConstantPipeStorage = 323, + OpCreatePipeFromPipeStorage = 324, + OpGetKernelLocalSizeForSubgroupCount = 325, + OpGetKernelMaxNumSubgroups = 326, + OpTypeNamedBarrier = 327, + OpNamedBarrierInitialize = 328, + OpMemoryNamedBarrier = 329, + OpModuleProcessed = 330, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + }, + +} + diff --git a/ext/vulkan/spirv.py b/ext/vulkan/spirv.py index cd20ddde9b..d0bce4d169 100644 --- a/ext/vulkan/spirv.py +++ b/ext/vulkan/spirv.py @@ -1,898 +1,921 @@ -# Copyright (c) 2014-2017 The Khronos Group Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and/or associated documentation files (the "Materials"), -# to deal in the Materials without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Materials, and to permit persons to whom the -# Materials are furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Materials. -# -# MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -# STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -# HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -# -# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -# IN THE MATERIALS. - -# This header is automatically generated by the same tool that creates -# the Binary Section of the SPIR-V specification. - -# Enumeration tokens for SPIR-V, in various styles: -# C, C++, C++11, JSON, Lua, Python -# -# - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -# - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -# - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -# - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -# - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -# -# Some tokens act like mask values, which can be OR'd together, -# while others are mutually exclusive. The mask-like ones have -# "Mask" in their name, and a parallel enum that has the shift -# amount (1 << x) for each corresponding enumerant. - -spv = { - 'MagicNumber' : 0x07230203, - 'Version' : 0x00010100, - 'Revision' : 5, - 'OpCodeMask' : 0xffff, - 'WordCountShift' : 16, - - 'SourceLanguage' : { - 'Unknown' : 0, - 'ESSL' : 1, - 'GLSL' : 2, - 'OpenCL_C' : 3, - 'OpenCL_CPP' : 4, - }, - - 'ExecutionModel' : { - 'Vertex' : 0, - 'TessellationControl' : 1, - 'TessellationEvaluation' : 2, - 'Geometry' : 3, - 'Fragment' : 4, - 'GLCompute' : 5, - 'Kernel' : 6, - }, - - 'AddressingModel' : { - 'Logical' : 0, - 'Physical32' : 1, - 'Physical64' : 2, - }, - - 'MemoryModel' : { - 'Simple' : 0, - 'GLSL450' : 1, - 'OpenCL' : 2, - }, - - 'ExecutionMode' : { - 'Invocations' : 0, - 'SpacingEqual' : 1, - 'SpacingFractionalEven' : 2, - 'SpacingFractionalOdd' : 3, - 'VertexOrderCw' : 4, - 'VertexOrderCcw' : 5, - 'PixelCenterInteger' : 6, - 'OriginUpperLeft' : 7, - 'OriginLowerLeft' : 8, - 'EarlyFragmentTests' : 9, - 'PointMode' : 10, - 'Xfb' : 11, - 'DepthReplacing' : 12, - 'DepthGreater' : 14, - 'DepthLess' : 15, - 'DepthUnchanged' : 16, - 'LocalSize' : 17, - 'LocalSizeHint' : 18, - 'InputPoints' : 19, - 'InputLines' : 20, - 'InputLinesAdjacency' : 21, - 'Triangles' : 22, - 'InputTrianglesAdjacency' : 23, - 'Quads' : 24, - 'Isolines' : 25, - 'OutputVertices' : 26, - 'OutputPoints' : 27, - 'OutputLineStrip' : 28, - 'OutputTriangleStrip' : 29, - 'VecTypeHint' : 30, - 'ContractionOff' : 31, - 'Initializer' : 33, - 'Finalizer' : 34, - 'SubgroupSize' : 35, - 'SubgroupsPerWorkgroup' : 36, - }, - - 'StorageClass' : { - 'UniformConstant' : 0, - 'Input' : 1, - 'Uniform' : 2, - 'Output' : 3, - 'Workgroup' : 4, - 'CrossWorkgroup' : 5, - 'Private' : 6, - 'Function' : 7, - 'Generic' : 8, - 'PushConstant' : 9, - 'AtomicCounter' : 10, - 'Image' : 11, - }, - - 'Dim' : { - 'Dim1D' : 0, - 'Dim2D' : 1, - 'Dim3D' : 2, - 'Cube' : 3, - 'Rect' : 4, - 'Buffer' : 5, - 'SubpassData' : 6, - }, - - 'SamplerAddressingMode' : { - 'None' : 0, - 'ClampToEdge' : 1, - 'Clamp' : 2, - 'Repeat' : 3, - 'RepeatMirrored' : 4, - }, - - 'SamplerFilterMode' : { - 'Nearest' : 0, - 'Linear' : 1, - }, - - 'ImageFormat' : { - 'Unknown' : 0, - 'Rgba32f' : 1, - 'Rgba16f' : 2, - 'R32f' : 3, - 'Rgba8' : 4, - 'Rgba8Snorm' : 5, - 'Rg32f' : 6, - 'Rg16f' : 7, - 'R11fG11fB10f' : 8, - 'R16f' : 9, - 'Rgba16' : 10, - 'Rgb10A2' : 11, - 'Rg16' : 12, - 'Rg8' : 13, - 'R16' : 14, - 'R8' : 15, - 'Rgba16Snorm' : 16, - 'Rg16Snorm' : 17, - 'Rg8Snorm' : 18, - 'R16Snorm' : 19, - 'R8Snorm' : 20, - 'Rgba32i' : 21, - 'Rgba16i' : 22, - 'Rgba8i' : 23, - 'R32i' : 24, - 'Rg32i' : 25, - 'Rg16i' : 26, - 'Rg8i' : 27, - 'R16i' : 28, - 'R8i' : 29, - 'Rgba32ui' : 30, - 'Rgba16ui' : 31, - 'Rgba8ui' : 32, - 'R32ui' : 33, - 'Rgb10a2ui' : 34, - 'Rg32ui' : 35, - 'Rg16ui' : 36, - 'Rg8ui' : 37, - 'R16ui' : 38, - 'R8ui' : 39, - }, - - 'ImageChannelOrder' : { - 'R' : 0, - 'A' : 1, - 'RG' : 2, - 'RA' : 3, - 'RGB' : 4, - 'RGBA' : 5, - 'BGRA' : 6, - 'ARGB' : 7, - 'Intensity' : 8, - 'Luminance' : 9, - 'Rx' : 10, - 'RGx' : 11, - 'RGBx' : 12, - 'Depth' : 13, - 'DepthStencil' : 14, - 'sRGB' : 15, - 'sRGBx' : 16, - 'sRGBA' : 17, - 'sBGRA' : 18, - 'ABGR' : 19, - }, - - 'ImageChannelDataType' : { - 'SnormInt8' : 0, - 'SnormInt16' : 1, - 'UnormInt8' : 2, - 'UnormInt16' : 3, - 'UnormShort565' : 4, - 'UnormShort555' : 5, - 'UnormInt101010' : 6, - 'SignedInt8' : 7, - 'SignedInt16' : 8, - 'SignedInt32' : 9, - 'UnsignedInt8' : 10, - 'UnsignedInt16' : 11, - 'UnsignedInt32' : 12, - 'HalfFloat' : 13, - 'Float' : 14, - 'UnormInt24' : 15, - 'UnormInt101010_2' : 16, - }, - - 'ImageOperandsShift' : { - 'Bias' : 0, - 'Lod' : 1, - 'Grad' : 2, - 'ConstOffset' : 3, - 'Offset' : 4, - 'ConstOffsets' : 5, - 'Sample' : 6, - 'MinLod' : 7, - }, - - 'ImageOperandsMask' : { - 'MaskNone' : 0, - 'Bias' : 0x00000001, - 'Lod' : 0x00000002, - 'Grad' : 0x00000004, - 'ConstOffset' : 0x00000008, - 'Offset' : 0x00000010, - 'ConstOffsets' : 0x00000020, - 'Sample' : 0x00000040, - 'MinLod' : 0x00000080, - }, - - 'FPFastMathModeShift' : { - 'NotNaN' : 0, - 'NotInf' : 1, - 'NSZ' : 2, - 'AllowRecip' : 3, - 'Fast' : 4, - }, - - 'FPFastMathModeMask' : { - 'MaskNone' : 0, - 'NotNaN' : 0x00000001, - 'NotInf' : 0x00000002, - 'NSZ' : 0x00000004, - 'AllowRecip' : 0x00000008, - 'Fast' : 0x00000010, - }, - - 'FPRoundingMode' : { - 'RTE' : 0, - 'RTZ' : 1, - 'RTP' : 2, - 'RTN' : 3, - }, - - 'LinkageType' : { - 'Export' : 0, - 'Import' : 1, - }, - - 'AccessQualifier' : { - 'ReadOnly' : 0, - 'WriteOnly' : 1, - 'ReadWrite' : 2, - }, - - 'FunctionParameterAttribute' : { - 'Zext' : 0, - 'Sext' : 1, - 'ByVal' : 2, - 'Sret' : 3, - 'NoAlias' : 4, - 'NoCapture' : 5, - 'NoWrite' : 6, - 'NoReadWrite' : 7, - }, - - 'Decoration' : { - 'RelaxedPrecision' : 0, - 'SpecId' : 1, - 'Block' : 2, - 'BufferBlock' : 3, - 'RowMajor' : 4, - 'ColMajor' : 5, - 'ArrayStride' : 6, - 'MatrixStride' : 7, - 'GLSLShared' : 8, - 'GLSLPacked' : 9, - 'CPacked' : 10, - 'BuiltIn' : 11, - 'NoPerspective' : 13, - 'Flat' : 14, - 'Patch' : 15, - 'Centroid' : 16, - 'Sample' : 17, - 'Invariant' : 18, - 'Restrict' : 19, - 'Aliased' : 20, - 'Volatile' : 21, - 'Constant' : 22, - 'Coherent' : 23, - 'NonWritable' : 24, - 'NonReadable' : 25, - 'Uniform' : 26, - 'SaturatedConversion' : 28, - 'Stream' : 29, - 'Location' : 30, - 'Component' : 31, - 'Index' : 32, - 'Binding' : 33, - 'DescriptorSet' : 34, - 'Offset' : 35, - 'XfbBuffer' : 36, - 'XfbStride' : 37, - 'FuncParamAttr' : 38, - 'FPRoundingMode' : 39, - 'FPFastMathMode' : 40, - 'LinkageAttributes' : 41, - 'NoContraction' : 42, - 'InputAttachmentIndex' : 43, - 'Alignment' : 44, - 'MaxByteOffset' : 45, - }, - - 'BuiltIn' : { - 'Position' : 0, - 'PointSize' : 1, - 'ClipDistance' : 3, - 'CullDistance' : 4, - 'VertexId' : 5, - 'InstanceId' : 6, - 'PrimitiveId' : 7, - 'InvocationId' : 8, - 'Layer' : 9, - 'ViewportIndex' : 10, - 'TessLevelOuter' : 11, - 'TessLevelInner' : 12, - 'TessCoord' : 13, - 'PatchVertices' : 14, - 'FragCoord' : 15, - 'PointCoord' : 16, - 'FrontFacing' : 17, - 'SampleId' : 18, - 'SamplePosition' : 19, - 'SampleMask' : 20, - 'FragDepth' : 22, - 'HelperInvocation' : 23, - 'NumWorkgroups' : 24, - 'WorkgroupSize' : 25, - 'WorkgroupId' : 26, - 'LocalInvocationId' : 27, - 'GlobalInvocationId' : 28, - 'LocalInvocationIndex' : 29, - 'WorkDim' : 30, - 'GlobalSize' : 31, - 'EnqueuedWorkgroupSize' : 32, - 'GlobalOffset' : 33, - 'GlobalLinearId' : 34, - 'SubgroupSize' : 36, - 'SubgroupMaxSize' : 37, - 'NumSubgroups' : 38, - 'NumEnqueuedSubgroups' : 39, - 'SubgroupId' : 40, - 'SubgroupLocalInvocationId' : 41, - 'VertexIndex' : 42, - 'InstanceIndex' : 43, - 'SubgroupEqMaskKHR' : 4416, - 'SubgroupGeMaskKHR' : 4417, - 'SubgroupGtMaskKHR' : 4418, - 'SubgroupLeMaskKHR' : 4419, - 'SubgroupLtMaskKHR' : 4420, - 'BaseVertex' : 4424, - 'BaseInstance' : 4425, - 'DrawIndex' : 4426, - }, - - 'SelectionControlShift' : { - 'Flatten' : 0, - 'DontFlatten' : 1, - }, - - 'SelectionControlMask' : { - 'MaskNone' : 0, - 'Flatten' : 0x00000001, - 'DontFlatten' : 0x00000002, - }, - - 'LoopControlShift' : { - 'Unroll' : 0, - 'DontUnroll' : 1, - 'DependencyInfinite' : 2, - 'DependencyLength' : 3, - }, - - 'LoopControlMask' : { - 'MaskNone' : 0, - 'Unroll' : 0x00000001, - 'DontUnroll' : 0x00000002, - 'DependencyInfinite' : 0x00000004, - 'DependencyLength' : 0x00000008, - }, - - 'FunctionControlShift' : { - 'Inline' : 0, - 'DontInline' : 1, - 'Pure' : 2, - 'Const' : 3, - }, - - 'FunctionControlMask' : { - 'MaskNone' : 0, - 'Inline' : 0x00000001, - 'DontInline' : 0x00000002, - 'Pure' : 0x00000004, - 'Const' : 0x00000008, - }, - - 'MemorySemanticsShift' : { - 'Acquire' : 1, - 'Release' : 2, - 'AcquireRelease' : 3, - 'SequentiallyConsistent' : 4, - 'UniformMemory' : 6, - 'SubgroupMemory' : 7, - 'WorkgroupMemory' : 8, - 'CrossWorkgroupMemory' : 9, - 'AtomicCounterMemory' : 10, - 'ImageMemory' : 11, - }, - - 'MemorySemanticsMask' : { - 'MaskNone' : 0, - 'Acquire' : 0x00000002, - 'Release' : 0x00000004, - 'AcquireRelease' : 0x00000008, - 'SequentiallyConsistent' : 0x00000010, - 'UniformMemory' : 0x00000040, - 'SubgroupMemory' : 0x00000080, - 'WorkgroupMemory' : 0x00000100, - 'CrossWorkgroupMemory' : 0x00000200, - 'AtomicCounterMemory' : 0x00000400, - 'ImageMemory' : 0x00000800, - }, - - 'MemoryAccessShift' : { - 'Volatile' : 0, - 'Aligned' : 1, - 'Nontemporal' : 2, - }, - - 'MemoryAccessMask' : { - 'MaskNone' : 0, - 'Volatile' : 0x00000001, - 'Aligned' : 0x00000002, - 'Nontemporal' : 0x00000004, - }, - - 'Scope' : { - 'CrossDevice' : 0, - 'Device' : 1, - 'Workgroup' : 2, - 'Subgroup' : 3, - 'Invocation' : 4, - }, - - 'GroupOperation' : { - 'Reduce' : 0, - 'InclusiveScan' : 1, - 'ExclusiveScan' : 2, - }, - - 'KernelEnqueueFlags' : { - 'NoWait' : 0, - 'WaitKernel' : 1, - 'WaitWorkGroup' : 2, - }, - - 'KernelProfilingInfoShift' : { - 'CmdExecTime' : 0, - }, - - 'KernelProfilingInfoMask' : { - 'MaskNone' : 0, - 'CmdExecTime' : 0x00000001, - }, - - 'Capability' : { - 'Matrix' : 0, - 'Shader' : 1, - 'Geometry' : 2, - 'Tessellation' : 3, - 'Addresses' : 4, - 'Linkage' : 5, - 'Kernel' : 6, - 'Vector16' : 7, - 'Float16Buffer' : 8, - 'Float16' : 9, - 'Float64' : 10, - 'Int64' : 11, - 'Int64Atomics' : 12, - 'ImageBasic' : 13, - 'ImageReadWrite' : 14, - 'ImageMipmap' : 15, - 'Pipes' : 17, - 'Groups' : 18, - 'DeviceEnqueue' : 19, - 'LiteralSampler' : 20, - 'AtomicStorage' : 21, - 'Int16' : 22, - 'TessellationPointSize' : 23, - 'GeometryPointSize' : 24, - 'ImageGatherExtended' : 25, - 'StorageImageMultisample' : 27, - 'UniformBufferArrayDynamicIndexing' : 28, - 'SampledImageArrayDynamicIndexing' : 29, - 'StorageBufferArrayDynamicIndexing' : 30, - 'StorageImageArrayDynamicIndexing' : 31, - 'ClipDistance' : 32, - 'CullDistance' : 33, - 'ImageCubeArray' : 34, - 'SampleRateShading' : 35, - 'ImageRect' : 36, - 'SampledRect' : 37, - 'GenericPointer' : 38, - 'Int8' : 39, - 'InputAttachment' : 40, - 'SparseResidency' : 41, - 'MinLod' : 42, - 'Sampled1D' : 43, - 'Image1D' : 44, - 'SampledCubeArray' : 45, - 'SampledBuffer' : 46, - 'ImageBuffer' : 47, - 'ImageMSArray' : 48, - 'StorageImageExtendedFormats' : 49, - 'ImageQuery' : 50, - 'DerivativeControl' : 51, - 'InterpolationFunction' : 52, - 'TransformFeedback' : 53, - 'GeometryStreams' : 54, - 'StorageImageReadWithoutFormat' : 55, - 'StorageImageWriteWithoutFormat' : 56, - 'MultiViewport' : 57, - 'SubgroupDispatch' : 58, - 'NamedBarrier' : 59, - 'PipeStorage' : 60, - 'SubgroupBallotKHR' : 4423, - 'DrawParameters' : 4427, - 'SubgroupVoteKHR' : 4431, - }, - - 'Op' : { - 'OpNop' : 0, - 'OpUndef' : 1, - 'OpSourceContinued' : 2, - 'OpSource' : 3, - 'OpSourceExtension' : 4, - 'OpName' : 5, - 'OpMemberName' : 6, - 'OpString' : 7, - 'OpLine' : 8, - 'OpExtension' : 10, - 'OpExtInstImport' : 11, - 'OpExtInst' : 12, - 'OpMemoryModel' : 14, - 'OpEntryPoint' : 15, - 'OpExecutionMode' : 16, - 'OpCapability' : 17, - 'OpTypeVoid' : 19, - 'OpTypeBool' : 20, - 'OpTypeInt' : 21, - 'OpTypeFloat' : 22, - 'OpTypeVector' : 23, - 'OpTypeMatrix' : 24, - 'OpTypeImage' : 25, - 'OpTypeSampler' : 26, - 'OpTypeSampledImage' : 27, - 'OpTypeArray' : 28, - 'OpTypeRuntimeArray' : 29, - 'OpTypeStruct' : 30, - 'OpTypeOpaque' : 31, - 'OpTypePointer' : 32, - 'OpTypeFunction' : 33, - 'OpTypeEvent' : 34, - 'OpTypeDeviceEvent' : 35, - 'OpTypeReserveId' : 36, - 'OpTypeQueue' : 37, - 'OpTypePipe' : 38, - 'OpTypeForwardPointer' : 39, - 'OpConstantTrue' : 41, - 'OpConstantFalse' : 42, - 'OpConstant' : 43, - 'OpConstantComposite' : 44, - 'OpConstantSampler' : 45, - 'OpConstantNull' : 46, - 'OpSpecConstantTrue' : 48, - 'OpSpecConstantFalse' : 49, - 'OpSpecConstant' : 50, - 'OpSpecConstantComposite' : 51, - 'OpSpecConstantOp' : 52, - 'OpFunction' : 54, - 'OpFunctionParameter' : 55, - 'OpFunctionEnd' : 56, - 'OpFunctionCall' : 57, - 'OpVariable' : 59, - 'OpImageTexelPointer' : 60, - 'OpLoad' : 61, - 'OpStore' : 62, - 'OpCopyMemory' : 63, - 'OpCopyMemorySized' : 64, - 'OpAccessChain' : 65, - 'OpInBoundsAccessChain' : 66, - 'OpPtrAccessChain' : 67, - 'OpArrayLength' : 68, - 'OpGenericPtrMemSemantics' : 69, - 'OpInBoundsPtrAccessChain' : 70, - 'OpDecorate' : 71, - 'OpMemberDecorate' : 72, - 'OpDecorationGroup' : 73, - 'OpGroupDecorate' : 74, - 'OpGroupMemberDecorate' : 75, - 'OpVectorExtractDynamic' : 77, - 'OpVectorInsertDynamic' : 78, - 'OpVectorShuffle' : 79, - 'OpCompositeConstruct' : 80, - 'OpCompositeExtract' : 81, - 'OpCompositeInsert' : 82, - 'OpCopyObject' : 83, - 'OpTranspose' : 84, - 'OpSampledImage' : 86, - 'OpImageSampleImplicitLod' : 87, - 'OpImageSampleExplicitLod' : 88, - 'OpImageSampleDrefImplicitLod' : 89, - 'OpImageSampleDrefExplicitLod' : 90, - 'OpImageSampleProjImplicitLod' : 91, - 'OpImageSampleProjExplicitLod' : 92, - 'OpImageSampleProjDrefImplicitLod' : 93, - 'OpImageSampleProjDrefExplicitLod' : 94, - 'OpImageFetch' : 95, - 'OpImageGather' : 96, - 'OpImageDrefGather' : 97, - 'OpImageRead' : 98, - 'OpImageWrite' : 99, - 'OpImage' : 100, - 'OpImageQueryFormat' : 101, - 'OpImageQueryOrder' : 102, - 'OpImageQuerySizeLod' : 103, - 'OpImageQuerySize' : 104, - 'OpImageQueryLod' : 105, - 'OpImageQueryLevels' : 106, - 'OpImageQuerySamples' : 107, - 'OpConvertFToU' : 109, - 'OpConvertFToS' : 110, - 'OpConvertSToF' : 111, - 'OpConvertUToF' : 112, - 'OpUConvert' : 113, - 'OpSConvert' : 114, - 'OpFConvert' : 115, - 'OpQuantizeToF16' : 116, - 'OpConvertPtrToU' : 117, - 'OpSatConvertSToU' : 118, - 'OpSatConvertUToS' : 119, - 'OpConvertUToPtr' : 120, - 'OpPtrCastToGeneric' : 121, - 'OpGenericCastToPtr' : 122, - 'OpGenericCastToPtrExplicit' : 123, - 'OpBitcast' : 124, - 'OpSNegate' : 126, - 'OpFNegate' : 127, - 'OpIAdd' : 128, - 'OpFAdd' : 129, - 'OpISub' : 130, - 'OpFSub' : 131, - 'OpIMul' : 132, - 'OpFMul' : 133, - 'OpUDiv' : 134, - 'OpSDiv' : 135, - 'OpFDiv' : 136, - 'OpUMod' : 137, - 'OpSRem' : 138, - 'OpSMod' : 139, - 'OpFRem' : 140, - 'OpFMod' : 141, - 'OpVectorTimesScalar' : 142, - 'OpMatrixTimesScalar' : 143, - 'OpVectorTimesMatrix' : 144, - 'OpMatrixTimesVector' : 145, - 'OpMatrixTimesMatrix' : 146, - 'OpOuterProduct' : 147, - 'OpDot' : 148, - 'OpIAddCarry' : 149, - 'OpISubBorrow' : 150, - 'OpUMulExtended' : 151, - 'OpSMulExtended' : 152, - 'OpAny' : 154, - 'OpAll' : 155, - 'OpIsNan' : 156, - 'OpIsInf' : 157, - 'OpIsFinite' : 158, - 'OpIsNormal' : 159, - 'OpSignBitSet' : 160, - 'OpLessOrGreater' : 161, - 'OpOrdered' : 162, - 'OpUnordered' : 163, - 'OpLogicalEqual' : 164, - 'OpLogicalNotEqual' : 165, - 'OpLogicalOr' : 166, - 'OpLogicalAnd' : 167, - 'OpLogicalNot' : 168, - 'OpSelect' : 169, - 'OpIEqual' : 170, - 'OpINotEqual' : 171, - 'OpUGreaterThan' : 172, - 'OpSGreaterThan' : 173, - 'OpUGreaterThanEqual' : 174, - 'OpSGreaterThanEqual' : 175, - 'OpULessThan' : 176, - 'OpSLessThan' : 177, - 'OpULessThanEqual' : 178, - 'OpSLessThanEqual' : 179, - 'OpFOrdEqual' : 180, - 'OpFUnordEqual' : 181, - 'OpFOrdNotEqual' : 182, - 'OpFUnordNotEqual' : 183, - 'OpFOrdLessThan' : 184, - 'OpFUnordLessThan' : 185, - 'OpFOrdGreaterThan' : 186, - 'OpFUnordGreaterThan' : 187, - 'OpFOrdLessThanEqual' : 188, - 'OpFUnordLessThanEqual' : 189, - 'OpFOrdGreaterThanEqual' : 190, - 'OpFUnordGreaterThanEqual' : 191, - 'OpShiftRightLogical' : 194, - 'OpShiftRightArithmetic' : 195, - 'OpShiftLeftLogical' : 196, - 'OpBitwiseOr' : 197, - 'OpBitwiseXor' : 198, - 'OpBitwiseAnd' : 199, - 'OpNot' : 200, - 'OpBitFieldInsert' : 201, - 'OpBitFieldSExtract' : 202, - 'OpBitFieldUExtract' : 203, - 'OpBitReverse' : 204, - 'OpBitCount' : 205, - 'OpDPdx' : 207, - 'OpDPdy' : 208, - 'OpFwidth' : 209, - 'OpDPdxFine' : 210, - 'OpDPdyFine' : 211, - 'OpFwidthFine' : 212, - 'OpDPdxCoarse' : 213, - 'OpDPdyCoarse' : 214, - 'OpFwidthCoarse' : 215, - 'OpEmitVertex' : 218, - 'OpEndPrimitive' : 219, - 'OpEmitStreamVertex' : 220, - 'OpEndStreamPrimitive' : 221, - 'OpControlBarrier' : 224, - 'OpMemoryBarrier' : 225, - 'OpAtomicLoad' : 227, - 'OpAtomicStore' : 228, - 'OpAtomicExchange' : 229, - 'OpAtomicCompareExchange' : 230, - 'OpAtomicCompareExchangeWeak' : 231, - 'OpAtomicIIncrement' : 232, - 'OpAtomicIDecrement' : 233, - 'OpAtomicIAdd' : 234, - 'OpAtomicISub' : 235, - 'OpAtomicSMin' : 236, - 'OpAtomicUMin' : 237, - 'OpAtomicSMax' : 238, - 'OpAtomicUMax' : 239, - 'OpAtomicAnd' : 240, - 'OpAtomicOr' : 241, - 'OpAtomicXor' : 242, - 'OpPhi' : 245, - 'OpLoopMerge' : 246, - 'OpSelectionMerge' : 247, - 'OpLabel' : 248, - 'OpBranch' : 249, - 'OpBranchConditional' : 250, - 'OpSwitch' : 251, - 'OpKill' : 252, - 'OpReturn' : 253, - 'OpReturnValue' : 254, - 'OpUnreachable' : 255, - 'OpLifetimeStart' : 256, - 'OpLifetimeStop' : 257, - 'OpGroupAsyncCopy' : 259, - 'OpGroupWaitEvents' : 260, - 'OpGroupAll' : 261, - 'OpGroupAny' : 262, - 'OpGroupBroadcast' : 263, - 'OpGroupIAdd' : 264, - 'OpGroupFAdd' : 265, - 'OpGroupFMin' : 266, - 'OpGroupUMin' : 267, - 'OpGroupSMin' : 268, - 'OpGroupFMax' : 269, - 'OpGroupUMax' : 270, - 'OpGroupSMax' : 271, - 'OpReadPipe' : 274, - 'OpWritePipe' : 275, - 'OpReservedReadPipe' : 276, - 'OpReservedWritePipe' : 277, - 'OpReserveReadPipePackets' : 278, - 'OpReserveWritePipePackets' : 279, - 'OpCommitReadPipe' : 280, - 'OpCommitWritePipe' : 281, - 'OpIsValidReserveId' : 282, - 'OpGetNumPipePackets' : 283, - 'OpGetMaxPipePackets' : 284, - 'OpGroupReserveReadPipePackets' : 285, - 'OpGroupReserveWritePipePackets' : 286, - 'OpGroupCommitReadPipe' : 287, - 'OpGroupCommitWritePipe' : 288, - 'OpEnqueueMarker' : 291, - 'OpEnqueueKernel' : 292, - 'OpGetKernelNDrangeSubGroupCount' : 293, - 'OpGetKernelNDrangeMaxSubGroupSize' : 294, - 'OpGetKernelWorkGroupSize' : 295, - 'OpGetKernelPreferredWorkGroupSizeMultiple' : 296, - 'OpRetainEvent' : 297, - 'OpReleaseEvent' : 298, - 'OpCreateUserEvent' : 299, - 'OpIsValidEvent' : 300, - 'OpSetUserEventStatus' : 301, - 'OpCaptureEventProfilingInfo' : 302, - 'OpGetDefaultQueue' : 303, - 'OpBuildNDRange' : 304, - 'OpImageSparseSampleImplicitLod' : 305, - 'OpImageSparseSampleExplicitLod' : 306, - 'OpImageSparseSampleDrefImplicitLod' : 307, - 'OpImageSparseSampleDrefExplicitLod' : 308, - 'OpImageSparseSampleProjImplicitLod' : 309, - 'OpImageSparseSampleProjExplicitLod' : 310, - 'OpImageSparseSampleProjDrefImplicitLod' : 311, - 'OpImageSparseSampleProjDrefExplicitLod' : 312, - 'OpImageSparseFetch' : 313, - 'OpImageSparseGather' : 314, - 'OpImageSparseDrefGather' : 315, - 'OpImageSparseTexelsResident' : 316, - 'OpNoLine' : 317, - 'OpAtomicFlagTestAndSet' : 318, - 'OpAtomicFlagClear' : 319, - 'OpImageSparseRead' : 320, - 'OpSizeOf' : 321, - 'OpTypePipeStorage' : 322, - 'OpConstantPipeStorage' : 323, - 'OpCreatePipeFromPipeStorage' : 324, - 'OpGetKernelLocalSizeForSubgroupCount' : 325, - 'OpGetKernelMaxNumSubgroups' : 326, - 'OpTypeNamedBarrier' : 327, - 'OpNamedBarrierInitialize' : 328, - 'OpMemoryNamedBarrier' : 329, - 'OpModuleProcessed' : 330, - 'OpSubgroupBallotKHR' : 4421, - 'OpSubgroupFirstInvocationKHR' : 4422, - 'OpSubgroupAllKHR' : 4428, - 'OpSubgroupAnyKHR' : 4429, - 'OpSubgroupAllEqualKHR' : 4430, - 'OpSubgroupReadInvocationKHR' : 4432, - }, - -} - +# Copyright (c) 2014-2017 The Khronos Group Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and/or associated documentation files (the "Materials"), +# to deal in the Materials without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Materials, and to permit persons to whom the +# Materials are furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Materials. +# +# MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +# STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +# HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +# +# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +# IN THE MATERIALS. + +# This header is automatically generated by the same tool that creates +# the Binary Section of the SPIR-V specification. + +# Enumeration tokens for SPIR-V, in various styles: +# C, C++, C++11, JSON, Lua, Python +# +# - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +# - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +# - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +# - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +# - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +# +# Some tokens act like mask values, which can be OR'd together, +# while others are mutually exclusive. The mask-like ones have +# "Mask" in their name, and a parallel enum that has the shift +# amount (1 << x) for each corresponding enumerant. + +spv = { + 'MagicNumber' : 0x07230203, + 'Version' : 0x00010100, + 'Revision' : 6, + 'OpCodeMask' : 0xffff, + 'WordCountShift' : 16, + + 'SourceLanguage' : { + 'Unknown' : 0, + 'ESSL' : 1, + 'GLSL' : 2, + 'OpenCL_C' : 3, + 'OpenCL_CPP' : 4, + }, + + 'ExecutionModel' : { + 'Vertex' : 0, + 'TessellationControl' : 1, + 'TessellationEvaluation' : 2, + 'Geometry' : 3, + 'Fragment' : 4, + 'GLCompute' : 5, + 'Kernel' : 6, + }, + + 'AddressingModel' : { + 'Logical' : 0, + 'Physical32' : 1, + 'Physical64' : 2, + }, + + 'MemoryModel' : { + 'Simple' : 0, + 'GLSL450' : 1, + 'OpenCL' : 2, + }, + + 'ExecutionMode' : { + 'Invocations' : 0, + 'SpacingEqual' : 1, + 'SpacingFractionalEven' : 2, + 'SpacingFractionalOdd' : 3, + 'VertexOrderCw' : 4, + 'VertexOrderCcw' : 5, + 'PixelCenterInteger' : 6, + 'OriginUpperLeft' : 7, + 'OriginLowerLeft' : 8, + 'EarlyFragmentTests' : 9, + 'PointMode' : 10, + 'Xfb' : 11, + 'DepthReplacing' : 12, + 'DepthGreater' : 14, + 'DepthLess' : 15, + 'DepthUnchanged' : 16, + 'LocalSize' : 17, + 'LocalSizeHint' : 18, + 'InputPoints' : 19, + 'InputLines' : 20, + 'InputLinesAdjacency' : 21, + 'Triangles' : 22, + 'InputTrianglesAdjacency' : 23, + 'Quads' : 24, + 'Isolines' : 25, + 'OutputVertices' : 26, + 'OutputPoints' : 27, + 'OutputLineStrip' : 28, + 'OutputTriangleStrip' : 29, + 'VecTypeHint' : 30, + 'ContractionOff' : 31, + 'Initializer' : 33, + 'Finalizer' : 34, + 'SubgroupSize' : 35, + 'SubgroupsPerWorkgroup' : 36, + }, + + 'StorageClass' : { + 'UniformConstant' : 0, + 'Input' : 1, + 'Uniform' : 2, + 'Output' : 3, + 'Workgroup' : 4, + 'CrossWorkgroup' : 5, + 'Private' : 6, + 'Function' : 7, + 'Generic' : 8, + 'PushConstant' : 9, + 'AtomicCounter' : 10, + 'Image' : 11, + }, + + 'Dim' : { + 'Dim1D' : 0, + 'Dim2D' : 1, + 'Dim3D' : 2, + 'Cube' : 3, + 'Rect' : 4, + 'Buffer' : 5, + 'SubpassData' : 6, + }, + + 'SamplerAddressingMode' : { + 'None' : 0, + 'ClampToEdge' : 1, + 'Clamp' : 2, + 'Repeat' : 3, + 'RepeatMirrored' : 4, + }, + + 'SamplerFilterMode' : { + 'Nearest' : 0, + 'Linear' : 1, + }, + + 'ImageFormat' : { + 'Unknown' : 0, + 'Rgba32f' : 1, + 'Rgba16f' : 2, + 'R32f' : 3, + 'Rgba8' : 4, + 'Rgba8Snorm' : 5, + 'Rg32f' : 6, + 'Rg16f' : 7, + 'R11fG11fB10f' : 8, + 'R16f' : 9, + 'Rgba16' : 10, + 'Rgb10A2' : 11, + 'Rg16' : 12, + 'Rg8' : 13, + 'R16' : 14, + 'R8' : 15, + 'Rgba16Snorm' : 16, + 'Rg16Snorm' : 17, + 'Rg8Snorm' : 18, + 'R16Snorm' : 19, + 'R8Snorm' : 20, + 'Rgba32i' : 21, + 'Rgba16i' : 22, + 'Rgba8i' : 23, + 'R32i' : 24, + 'Rg32i' : 25, + 'Rg16i' : 26, + 'Rg8i' : 27, + 'R16i' : 28, + 'R8i' : 29, + 'Rgba32ui' : 30, + 'Rgba16ui' : 31, + 'Rgba8ui' : 32, + 'R32ui' : 33, + 'Rgb10a2ui' : 34, + 'Rg32ui' : 35, + 'Rg16ui' : 36, + 'Rg8ui' : 37, + 'R16ui' : 38, + 'R8ui' : 39, + }, + + 'ImageChannelOrder' : { + 'R' : 0, + 'A' : 1, + 'RG' : 2, + 'RA' : 3, + 'RGB' : 4, + 'RGBA' : 5, + 'BGRA' : 6, + 'ARGB' : 7, + 'Intensity' : 8, + 'Luminance' : 9, + 'Rx' : 10, + 'RGx' : 11, + 'RGBx' : 12, + 'Depth' : 13, + 'DepthStencil' : 14, + 'sRGB' : 15, + 'sRGBx' : 16, + 'sRGBA' : 17, + 'sBGRA' : 18, + 'ABGR' : 19, + }, + + 'ImageChannelDataType' : { + 'SnormInt8' : 0, + 'SnormInt16' : 1, + 'UnormInt8' : 2, + 'UnormInt16' : 3, + 'UnormShort565' : 4, + 'UnormShort555' : 5, + 'UnormInt101010' : 6, + 'SignedInt8' : 7, + 'SignedInt16' : 8, + 'SignedInt32' : 9, + 'UnsignedInt8' : 10, + 'UnsignedInt16' : 11, + 'UnsignedInt32' : 12, + 'HalfFloat' : 13, + 'Float' : 14, + 'UnormInt24' : 15, + 'UnormInt101010_2' : 16, + }, + + 'ImageOperandsShift' : { + 'Bias' : 0, + 'Lod' : 1, + 'Grad' : 2, + 'ConstOffset' : 3, + 'Offset' : 4, + 'ConstOffsets' : 5, + 'Sample' : 6, + 'MinLod' : 7, + }, + + 'ImageOperandsMask' : { + 'MaskNone' : 0, + 'Bias' : 0x00000001, + 'Lod' : 0x00000002, + 'Grad' : 0x00000004, + 'ConstOffset' : 0x00000008, + 'Offset' : 0x00000010, + 'ConstOffsets' : 0x00000020, + 'Sample' : 0x00000040, + 'MinLod' : 0x00000080, + }, + + 'FPFastMathModeShift' : { + 'NotNaN' : 0, + 'NotInf' : 1, + 'NSZ' : 2, + 'AllowRecip' : 3, + 'Fast' : 4, + }, + + 'FPFastMathModeMask' : { + 'MaskNone' : 0, + 'NotNaN' : 0x00000001, + 'NotInf' : 0x00000002, + 'NSZ' : 0x00000004, + 'AllowRecip' : 0x00000008, + 'Fast' : 0x00000010, + }, + + 'FPRoundingMode' : { + 'RTE' : 0, + 'RTZ' : 1, + 'RTP' : 2, + 'RTN' : 3, + }, + + 'LinkageType' : { + 'Export' : 0, + 'Import' : 1, + }, + + 'AccessQualifier' : { + 'ReadOnly' : 0, + 'WriteOnly' : 1, + 'ReadWrite' : 2, + }, + + 'FunctionParameterAttribute' : { + 'Zext' : 0, + 'Sext' : 1, + 'ByVal' : 2, + 'Sret' : 3, + 'NoAlias' : 4, + 'NoCapture' : 5, + 'NoWrite' : 6, + 'NoReadWrite' : 7, + }, + + 'Decoration' : { + 'RelaxedPrecision' : 0, + 'SpecId' : 1, + 'Block' : 2, + 'BufferBlock' : 3, + 'RowMajor' : 4, + 'ColMajor' : 5, + 'ArrayStride' : 6, + 'MatrixStride' : 7, + 'GLSLShared' : 8, + 'GLSLPacked' : 9, + 'CPacked' : 10, + 'BuiltIn' : 11, + 'NoPerspective' : 13, + 'Flat' : 14, + 'Patch' : 15, + 'Centroid' : 16, + 'Sample' : 17, + 'Invariant' : 18, + 'Restrict' : 19, + 'Aliased' : 20, + 'Volatile' : 21, + 'Constant' : 22, + 'Coherent' : 23, + 'NonWritable' : 24, + 'NonReadable' : 25, + 'Uniform' : 26, + 'SaturatedConversion' : 28, + 'Stream' : 29, + 'Location' : 30, + 'Component' : 31, + 'Index' : 32, + 'Binding' : 33, + 'DescriptorSet' : 34, + 'Offset' : 35, + 'XfbBuffer' : 36, + 'XfbStride' : 37, + 'FuncParamAttr' : 38, + 'FPRoundingMode' : 39, + 'FPFastMathMode' : 40, + 'LinkageAttributes' : 41, + 'NoContraction' : 42, + 'InputAttachmentIndex' : 43, + 'Alignment' : 44, + 'MaxByteOffset' : 45, + 'OverrideCoverageNV' : 5248, + 'PassthroughNV' : 5250, + 'ViewportRelativeNV' : 5252, + 'SecondaryViewportRelativeNV' : 5256, + }, + + 'BuiltIn' : { + 'Position' : 0, + 'PointSize' : 1, + 'ClipDistance' : 3, + 'CullDistance' : 4, + 'VertexId' : 5, + 'InstanceId' : 6, + 'PrimitiveId' : 7, + 'InvocationId' : 8, + 'Layer' : 9, + 'ViewportIndex' : 10, + 'TessLevelOuter' : 11, + 'TessLevelInner' : 12, + 'TessCoord' : 13, + 'PatchVertices' : 14, + 'FragCoord' : 15, + 'PointCoord' : 16, + 'FrontFacing' : 17, + 'SampleId' : 18, + 'SamplePosition' : 19, + 'SampleMask' : 20, + 'FragDepth' : 22, + 'HelperInvocation' : 23, + 'NumWorkgroups' : 24, + 'WorkgroupSize' : 25, + 'WorkgroupId' : 26, + 'LocalInvocationId' : 27, + 'GlobalInvocationId' : 28, + 'LocalInvocationIndex' : 29, + 'WorkDim' : 30, + 'GlobalSize' : 31, + 'EnqueuedWorkgroupSize' : 32, + 'GlobalOffset' : 33, + 'GlobalLinearId' : 34, + 'SubgroupSize' : 36, + 'SubgroupMaxSize' : 37, + 'NumSubgroups' : 38, + 'NumEnqueuedSubgroups' : 39, + 'SubgroupId' : 40, + 'SubgroupLocalInvocationId' : 41, + 'VertexIndex' : 42, + 'InstanceIndex' : 43, + 'SubgroupEqMaskKHR' : 4416, + 'SubgroupGeMaskKHR' : 4417, + 'SubgroupGtMaskKHR' : 4418, + 'SubgroupLeMaskKHR' : 4419, + 'SubgroupLtMaskKHR' : 4420, + 'BaseVertex' : 4424, + 'BaseInstance' : 4425, + 'DrawIndex' : 4426, + 'DeviceIndex' : 4438, + 'ViewIndex' : 4440, + 'ViewportMaskNV' : 5253, + 'SecondaryPositionNV' : 5257, + 'SecondaryViewportMaskNV' : 5258, + 'PositionPerViewNV' : 5261, + 'ViewportMaskPerViewNV' : 5262, + }, + + 'SelectionControlShift' : { + 'Flatten' : 0, + 'DontFlatten' : 1, + }, + + 'SelectionControlMask' : { + 'MaskNone' : 0, + 'Flatten' : 0x00000001, + 'DontFlatten' : 0x00000002, + }, + + 'LoopControlShift' : { + 'Unroll' : 0, + 'DontUnroll' : 1, + 'DependencyInfinite' : 2, + 'DependencyLength' : 3, + }, + + 'LoopControlMask' : { + 'MaskNone' : 0, + 'Unroll' : 0x00000001, + 'DontUnroll' : 0x00000002, + 'DependencyInfinite' : 0x00000004, + 'DependencyLength' : 0x00000008, + }, + + 'FunctionControlShift' : { + 'Inline' : 0, + 'DontInline' : 1, + 'Pure' : 2, + 'Const' : 3, + }, + + 'FunctionControlMask' : { + 'MaskNone' : 0, + 'Inline' : 0x00000001, + 'DontInline' : 0x00000002, + 'Pure' : 0x00000004, + 'Const' : 0x00000008, + }, + + 'MemorySemanticsShift' : { + 'Acquire' : 1, + 'Release' : 2, + 'AcquireRelease' : 3, + 'SequentiallyConsistent' : 4, + 'UniformMemory' : 6, + 'SubgroupMemory' : 7, + 'WorkgroupMemory' : 8, + 'CrossWorkgroupMemory' : 9, + 'AtomicCounterMemory' : 10, + 'ImageMemory' : 11, + }, + + 'MemorySemanticsMask' : { + 'MaskNone' : 0, + 'Acquire' : 0x00000002, + 'Release' : 0x00000004, + 'AcquireRelease' : 0x00000008, + 'SequentiallyConsistent' : 0x00000010, + 'UniformMemory' : 0x00000040, + 'SubgroupMemory' : 0x00000080, + 'WorkgroupMemory' : 0x00000100, + 'CrossWorkgroupMemory' : 0x00000200, + 'AtomicCounterMemory' : 0x00000400, + 'ImageMemory' : 0x00000800, + }, + + 'MemoryAccessShift' : { + 'Volatile' : 0, + 'Aligned' : 1, + 'Nontemporal' : 2, + }, + + 'MemoryAccessMask' : { + 'MaskNone' : 0, + 'Volatile' : 0x00000001, + 'Aligned' : 0x00000002, + 'Nontemporal' : 0x00000004, + }, + + 'Scope' : { + 'CrossDevice' : 0, + 'Device' : 1, + 'Workgroup' : 2, + 'Subgroup' : 3, + 'Invocation' : 4, + }, + + 'GroupOperation' : { + 'Reduce' : 0, + 'InclusiveScan' : 1, + 'ExclusiveScan' : 2, + }, + + 'KernelEnqueueFlags' : { + 'NoWait' : 0, + 'WaitKernel' : 1, + 'WaitWorkGroup' : 2, + }, + + 'KernelProfilingInfoShift' : { + 'CmdExecTime' : 0, + }, + + 'KernelProfilingInfoMask' : { + 'MaskNone' : 0, + 'CmdExecTime' : 0x00000001, + }, + + 'Capability' : { + 'Matrix' : 0, + 'Shader' : 1, + 'Geometry' : 2, + 'Tessellation' : 3, + 'Addresses' : 4, + 'Linkage' : 5, + 'Kernel' : 6, + 'Vector16' : 7, + 'Float16Buffer' : 8, + 'Float16' : 9, + 'Float64' : 10, + 'Int64' : 11, + 'Int64Atomics' : 12, + 'ImageBasic' : 13, + 'ImageReadWrite' : 14, + 'ImageMipmap' : 15, + 'Pipes' : 17, + 'Groups' : 18, + 'DeviceEnqueue' : 19, + 'LiteralSampler' : 20, + 'AtomicStorage' : 21, + 'Int16' : 22, + 'TessellationPointSize' : 23, + 'GeometryPointSize' : 24, + 'ImageGatherExtended' : 25, + 'StorageImageMultisample' : 27, + 'UniformBufferArrayDynamicIndexing' : 28, + 'SampledImageArrayDynamicIndexing' : 29, + 'StorageBufferArrayDynamicIndexing' : 30, + 'StorageImageArrayDynamicIndexing' : 31, + 'ClipDistance' : 32, + 'CullDistance' : 33, + 'ImageCubeArray' : 34, + 'SampleRateShading' : 35, + 'ImageRect' : 36, + 'SampledRect' : 37, + 'GenericPointer' : 38, + 'Int8' : 39, + 'InputAttachment' : 40, + 'SparseResidency' : 41, + 'MinLod' : 42, + 'Sampled1D' : 43, + 'Image1D' : 44, + 'SampledCubeArray' : 45, + 'SampledBuffer' : 46, + 'ImageBuffer' : 47, + 'ImageMSArray' : 48, + 'StorageImageExtendedFormats' : 49, + 'ImageQuery' : 50, + 'DerivativeControl' : 51, + 'InterpolationFunction' : 52, + 'TransformFeedback' : 53, + 'GeometryStreams' : 54, + 'StorageImageReadWithoutFormat' : 55, + 'StorageImageWriteWithoutFormat' : 56, + 'MultiViewport' : 57, + 'SubgroupDispatch' : 58, + 'NamedBarrier' : 59, + 'PipeStorage' : 60, + 'SubgroupBallotKHR' : 4423, + 'DrawParameters' : 4427, + 'SubgroupVoteKHR' : 4431, + 'StorageUniformBufferBlock16' : 4433, + 'StorageUniform16' : 4434, + 'StoragePushConstant16' : 4435, + 'StorageInputOutput16' : 4436, + 'DeviceGroup' : 4437, + 'MultiView' : 4439, + 'SampleMaskOverrideCoverageNV' : 5249, + 'GeometryShaderPassthroughNV' : 5251, + 'ShaderViewportIndexLayerNV' : 5254, + 'ShaderViewportMaskNV' : 5255, + 'ShaderStereoViewNV' : 5259, + 'PerViewAttributesNV' : 5260, + }, + + 'Op' : { + 'OpNop' : 0, + 'OpUndef' : 1, + 'OpSourceContinued' : 2, + 'OpSource' : 3, + 'OpSourceExtension' : 4, + 'OpName' : 5, + 'OpMemberName' : 6, + 'OpString' : 7, + 'OpLine' : 8, + 'OpExtension' : 10, + 'OpExtInstImport' : 11, + 'OpExtInst' : 12, + 'OpMemoryModel' : 14, + 'OpEntryPoint' : 15, + 'OpExecutionMode' : 16, + 'OpCapability' : 17, + 'OpTypeVoid' : 19, + 'OpTypeBool' : 20, + 'OpTypeInt' : 21, + 'OpTypeFloat' : 22, + 'OpTypeVector' : 23, + 'OpTypeMatrix' : 24, + 'OpTypeImage' : 25, + 'OpTypeSampler' : 26, + 'OpTypeSampledImage' : 27, + 'OpTypeArray' : 28, + 'OpTypeRuntimeArray' : 29, + 'OpTypeStruct' : 30, + 'OpTypeOpaque' : 31, + 'OpTypePointer' : 32, + 'OpTypeFunction' : 33, + 'OpTypeEvent' : 34, + 'OpTypeDeviceEvent' : 35, + 'OpTypeReserveId' : 36, + 'OpTypeQueue' : 37, + 'OpTypePipe' : 38, + 'OpTypeForwardPointer' : 39, + 'OpConstantTrue' : 41, + 'OpConstantFalse' : 42, + 'OpConstant' : 43, + 'OpConstantComposite' : 44, + 'OpConstantSampler' : 45, + 'OpConstantNull' : 46, + 'OpSpecConstantTrue' : 48, + 'OpSpecConstantFalse' : 49, + 'OpSpecConstant' : 50, + 'OpSpecConstantComposite' : 51, + 'OpSpecConstantOp' : 52, + 'OpFunction' : 54, + 'OpFunctionParameter' : 55, + 'OpFunctionEnd' : 56, + 'OpFunctionCall' : 57, + 'OpVariable' : 59, + 'OpImageTexelPointer' : 60, + 'OpLoad' : 61, + 'OpStore' : 62, + 'OpCopyMemory' : 63, + 'OpCopyMemorySized' : 64, + 'OpAccessChain' : 65, + 'OpInBoundsAccessChain' : 66, + 'OpPtrAccessChain' : 67, + 'OpArrayLength' : 68, + 'OpGenericPtrMemSemantics' : 69, + 'OpInBoundsPtrAccessChain' : 70, + 'OpDecorate' : 71, + 'OpMemberDecorate' : 72, + 'OpDecorationGroup' : 73, + 'OpGroupDecorate' : 74, + 'OpGroupMemberDecorate' : 75, + 'OpVectorExtractDynamic' : 77, + 'OpVectorInsertDynamic' : 78, + 'OpVectorShuffle' : 79, + 'OpCompositeConstruct' : 80, + 'OpCompositeExtract' : 81, + 'OpCompositeInsert' : 82, + 'OpCopyObject' : 83, + 'OpTranspose' : 84, + 'OpSampledImage' : 86, + 'OpImageSampleImplicitLod' : 87, + 'OpImageSampleExplicitLod' : 88, + 'OpImageSampleDrefImplicitLod' : 89, + 'OpImageSampleDrefExplicitLod' : 90, + 'OpImageSampleProjImplicitLod' : 91, + 'OpImageSampleProjExplicitLod' : 92, + 'OpImageSampleProjDrefImplicitLod' : 93, + 'OpImageSampleProjDrefExplicitLod' : 94, + 'OpImageFetch' : 95, + 'OpImageGather' : 96, + 'OpImageDrefGather' : 97, + 'OpImageRead' : 98, + 'OpImageWrite' : 99, + 'OpImage' : 100, + 'OpImageQueryFormat' : 101, + 'OpImageQueryOrder' : 102, + 'OpImageQuerySizeLod' : 103, + 'OpImageQuerySize' : 104, + 'OpImageQueryLod' : 105, + 'OpImageQueryLevels' : 106, + 'OpImageQuerySamples' : 107, + 'OpConvertFToU' : 109, + 'OpConvertFToS' : 110, + 'OpConvertSToF' : 111, + 'OpConvertUToF' : 112, + 'OpUConvert' : 113, + 'OpSConvert' : 114, + 'OpFConvert' : 115, + 'OpQuantizeToF16' : 116, + 'OpConvertPtrToU' : 117, + 'OpSatConvertSToU' : 118, + 'OpSatConvertUToS' : 119, + 'OpConvertUToPtr' : 120, + 'OpPtrCastToGeneric' : 121, + 'OpGenericCastToPtr' : 122, + 'OpGenericCastToPtrExplicit' : 123, + 'OpBitcast' : 124, + 'OpSNegate' : 126, + 'OpFNegate' : 127, + 'OpIAdd' : 128, + 'OpFAdd' : 129, + 'OpISub' : 130, + 'OpFSub' : 131, + 'OpIMul' : 132, + 'OpFMul' : 133, + 'OpUDiv' : 134, + 'OpSDiv' : 135, + 'OpFDiv' : 136, + 'OpUMod' : 137, + 'OpSRem' : 138, + 'OpSMod' : 139, + 'OpFRem' : 140, + 'OpFMod' : 141, + 'OpVectorTimesScalar' : 142, + 'OpMatrixTimesScalar' : 143, + 'OpVectorTimesMatrix' : 144, + 'OpMatrixTimesVector' : 145, + 'OpMatrixTimesMatrix' : 146, + 'OpOuterProduct' : 147, + 'OpDot' : 148, + 'OpIAddCarry' : 149, + 'OpISubBorrow' : 150, + 'OpUMulExtended' : 151, + 'OpSMulExtended' : 152, + 'OpAny' : 154, + 'OpAll' : 155, + 'OpIsNan' : 156, + 'OpIsInf' : 157, + 'OpIsFinite' : 158, + 'OpIsNormal' : 159, + 'OpSignBitSet' : 160, + 'OpLessOrGreater' : 161, + 'OpOrdered' : 162, + 'OpUnordered' : 163, + 'OpLogicalEqual' : 164, + 'OpLogicalNotEqual' : 165, + 'OpLogicalOr' : 166, + 'OpLogicalAnd' : 167, + 'OpLogicalNot' : 168, + 'OpSelect' : 169, + 'OpIEqual' : 170, + 'OpINotEqual' : 171, + 'OpUGreaterThan' : 172, + 'OpSGreaterThan' : 173, + 'OpUGreaterThanEqual' : 174, + 'OpSGreaterThanEqual' : 175, + 'OpULessThan' : 176, + 'OpSLessThan' : 177, + 'OpULessThanEqual' : 178, + 'OpSLessThanEqual' : 179, + 'OpFOrdEqual' : 180, + 'OpFUnordEqual' : 181, + 'OpFOrdNotEqual' : 182, + 'OpFUnordNotEqual' : 183, + 'OpFOrdLessThan' : 184, + 'OpFUnordLessThan' : 185, + 'OpFOrdGreaterThan' : 186, + 'OpFUnordGreaterThan' : 187, + 'OpFOrdLessThanEqual' : 188, + 'OpFUnordLessThanEqual' : 189, + 'OpFOrdGreaterThanEqual' : 190, + 'OpFUnordGreaterThanEqual' : 191, + 'OpShiftRightLogical' : 194, + 'OpShiftRightArithmetic' : 195, + 'OpShiftLeftLogical' : 196, + 'OpBitwiseOr' : 197, + 'OpBitwiseXor' : 198, + 'OpBitwiseAnd' : 199, + 'OpNot' : 200, + 'OpBitFieldInsert' : 201, + 'OpBitFieldSExtract' : 202, + 'OpBitFieldUExtract' : 203, + 'OpBitReverse' : 204, + 'OpBitCount' : 205, + 'OpDPdx' : 207, + 'OpDPdy' : 208, + 'OpFwidth' : 209, + 'OpDPdxFine' : 210, + 'OpDPdyFine' : 211, + 'OpFwidthFine' : 212, + 'OpDPdxCoarse' : 213, + 'OpDPdyCoarse' : 214, + 'OpFwidthCoarse' : 215, + 'OpEmitVertex' : 218, + 'OpEndPrimitive' : 219, + 'OpEmitStreamVertex' : 220, + 'OpEndStreamPrimitive' : 221, + 'OpControlBarrier' : 224, + 'OpMemoryBarrier' : 225, + 'OpAtomicLoad' : 227, + 'OpAtomicStore' : 228, + 'OpAtomicExchange' : 229, + 'OpAtomicCompareExchange' : 230, + 'OpAtomicCompareExchangeWeak' : 231, + 'OpAtomicIIncrement' : 232, + 'OpAtomicIDecrement' : 233, + 'OpAtomicIAdd' : 234, + 'OpAtomicISub' : 235, + 'OpAtomicSMin' : 236, + 'OpAtomicUMin' : 237, + 'OpAtomicSMax' : 238, + 'OpAtomicUMax' : 239, + 'OpAtomicAnd' : 240, + 'OpAtomicOr' : 241, + 'OpAtomicXor' : 242, + 'OpPhi' : 245, + 'OpLoopMerge' : 246, + 'OpSelectionMerge' : 247, + 'OpLabel' : 248, + 'OpBranch' : 249, + 'OpBranchConditional' : 250, + 'OpSwitch' : 251, + 'OpKill' : 252, + 'OpReturn' : 253, + 'OpReturnValue' : 254, + 'OpUnreachable' : 255, + 'OpLifetimeStart' : 256, + 'OpLifetimeStop' : 257, + 'OpGroupAsyncCopy' : 259, + 'OpGroupWaitEvents' : 260, + 'OpGroupAll' : 261, + 'OpGroupAny' : 262, + 'OpGroupBroadcast' : 263, + 'OpGroupIAdd' : 264, + 'OpGroupFAdd' : 265, + 'OpGroupFMin' : 266, + 'OpGroupUMin' : 267, + 'OpGroupSMin' : 268, + 'OpGroupFMax' : 269, + 'OpGroupUMax' : 270, + 'OpGroupSMax' : 271, + 'OpReadPipe' : 274, + 'OpWritePipe' : 275, + 'OpReservedReadPipe' : 276, + 'OpReservedWritePipe' : 277, + 'OpReserveReadPipePackets' : 278, + 'OpReserveWritePipePackets' : 279, + 'OpCommitReadPipe' : 280, + 'OpCommitWritePipe' : 281, + 'OpIsValidReserveId' : 282, + 'OpGetNumPipePackets' : 283, + 'OpGetMaxPipePackets' : 284, + 'OpGroupReserveReadPipePackets' : 285, + 'OpGroupReserveWritePipePackets' : 286, + 'OpGroupCommitReadPipe' : 287, + 'OpGroupCommitWritePipe' : 288, + 'OpEnqueueMarker' : 291, + 'OpEnqueueKernel' : 292, + 'OpGetKernelNDrangeSubGroupCount' : 293, + 'OpGetKernelNDrangeMaxSubGroupSize' : 294, + 'OpGetKernelWorkGroupSize' : 295, + 'OpGetKernelPreferredWorkGroupSizeMultiple' : 296, + 'OpRetainEvent' : 297, + 'OpReleaseEvent' : 298, + 'OpCreateUserEvent' : 299, + 'OpIsValidEvent' : 300, + 'OpSetUserEventStatus' : 301, + 'OpCaptureEventProfilingInfo' : 302, + 'OpGetDefaultQueue' : 303, + 'OpBuildNDRange' : 304, + 'OpImageSparseSampleImplicitLod' : 305, + 'OpImageSparseSampleExplicitLod' : 306, + 'OpImageSparseSampleDrefImplicitLod' : 307, + 'OpImageSparseSampleDrefExplicitLod' : 308, + 'OpImageSparseSampleProjImplicitLod' : 309, + 'OpImageSparseSampleProjExplicitLod' : 310, + 'OpImageSparseSampleProjDrefImplicitLod' : 311, + 'OpImageSparseSampleProjDrefExplicitLod' : 312, + 'OpImageSparseFetch' : 313, + 'OpImageSparseGather' : 314, + 'OpImageSparseDrefGather' : 315, + 'OpImageSparseTexelsResident' : 316, + 'OpNoLine' : 317, + 'OpAtomicFlagTestAndSet' : 318, + 'OpAtomicFlagClear' : 319, + 'OpImageSparseRead' : 320, + 'OpSizeOf' : 321, + 'OpTypePipeStorage' : 322, + 'OpConstantPipeStorage' : 323, + 'OpCreatePipeFromPipeStorage' : 324, + 'OpGetKernelLocalSizeForSubgroupCount' : 325, + 'OpGetKernelMaxNumSubgroups' : 326, + 'OpTypeNamedBarrier' : 327, + 'OpNamedBarrierInitialize' : 328, + 'OpMemoryNamedBarrier' : 329, + 'OpModuleProcessed' : 330, + 'OpSubgroupBallotKHR' : 4421, + 'OpSubgroupFirstInvocationKHR' : 4422, + 'OpSubgroupAllKHR' : 4428, + 'OpSubgroupAnyKHR' : 4429, + 'OpSubgroupAllEqualKHR' : 4430, + 'OpSubgroupReadInvocationKHR' : 4432, + }, + +} + diff --git a/ext/vulkan/vk_icd.h b/ext/vulkan/vk_icd.h index 748e552d50..668a4d183c 100644 --- a/ext/vulkan/vk_icd.h +++ b/ext/vulkan/vk_icd.h @@ -24,6 +24,7 @@ #define VKICD_H #include "vulkan.h" +#include // Loader-ICD version negotiation API. Versions add the following features: // Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr diff --git a/ext/vulkan/vk_layer_dispatch_table.h b/ext/vulkan/vk_layer_dispatch_table.h index 12cca44a01..d6b3f11a27 100644 --- a/ext/vulkan/vk_layer_dispatch_table.h +++ b/ext/vulkan/vk_layer_dispatch_table.h @@ -140,8 +140,6 @@ typedef struct VkLayerInstanceDispatchTable_ { // ---- VK_KHX_external_memory_capabilities extension commands PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHX GetPhysicalDeviceExternalBufferPropertiesKHX; - PFN_vkGetPhysicalDeviceProperties2KHX GetPhysicalDeviceProperties2KHX; - PFN_vkGetPhysicalDeviceImageFormatProperties2KHX GetPhysicalDeviceImageFormatProperties2KHX; // ---- VK_KHX_external_semaphore_capabilities extension commands PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHX GetPhysicalDeviceExternalSemaphorePropertiesKHX; @@ -349,12 +347,12 @@ typedef struct VkLayerDispatchTable_ { PFN_vkCmdDispatchBaseKHX CmdDispatchBaseKHX; // ---- VK_KHX_external_memory_win32 extension commands -#ifdef VK_USE_PLATFORM_WIN32_KHR +#ifdef VK_USE_PLATFORM_WIN32_KHX PFN_vkGetMemoryWin32HandleKHX GetMemoryWin32HandleKHX; -#endif // VK_USE_PLATFORM_WIN32_KHR -#ifdef VK_USE_PLATFORM_WIN32_KHR +#endif // VK_USE_PLATFORM_WIN32_KHX +#ifdef VK_USE_PLATFORM_WIN32_KHX PFN_vkGetMemoryWin32HandlePropertiesKHX GetMemoryWin32HandlePropertiesKHX; -#endif // VK_USE_PLATFORM_WIN32_KHR +#endif // VK_USE_PLATFORM_WIN32_KHX // ---- VK_KHX_external_memory_fd extension commands PFN_vkGetMemoryFdKHX GetMemoryFdKHX; @@ -391,8 +389,15 @@ typedef struct VkLayerDispatchTable_ { PFN_vkRegisterDisplayEventEXT RegisterDisplayEventEXT; PFN_vkGetSwapchainCounterEXT GetSwapchainCounterEXT; + // ---- VK_GOOGLE_display_timing extension commands + PFN_vkGetRefreshCycleDurationGOOGLE GetRefreshCycleDurationGOOGLE; + PFN_vkGetPastPresentationTimingGOOGLE GetPastPresentationTimingGOOGLE; + // ---- VK_EXT_discard_rectangles extension commands PFN_vkCmdSetDiscardRectangleEXT CmdSetDiscardRectangleEXT; + + // ---- VK_EXT_hdr_metadata extension commands + PFN_vkSetHdrMetadataEXT SetHdrMetadataEXT; } VkLayerDispatchTable; diff --git a/ext/vulkan/vulkan.h b/ext/vulkan/vulkan.h index d3f2b7e8eb..b19c1efff9 100644 --- a/ext/vulkan/vulkan.h +++ b/ext/vulkan/vulkan.h @@ -34,16 +34,16 @@ extern "C" { (((major) << 22) | ((minor) << 12) | (patch)) // DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead. -//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) +//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0 // Vulkan 1.0 version number -#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0) +#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0 #define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22) #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) // Version of this file -#define VK_HEADER_VERSION 42 +#define VK_HEADER_VERSION 61 #define VK_NULL_HANDLE 0 @@ -146,7 +146,7 @@ typedef enum VkResult { VK_ERROR_VALIDATION_FAILED_EXT = -1000011001, VK_ERROR_INVALID_SHADER_NV = -1000012000, VK_ERROR_OUT_OF_POOL_MEMORY_KHR = -1000069000, - VK_ERROR_INVALID_EXTERNAL_HANDLE_KHX = -1000072003, + VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = -1000072003, VK_RESULT_BEGIN_RANGE = VK_ERROR_FRAGMENTED_POOL, VK_RESULT_END_RANGE = VK_INCOMPLETE, VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FRAGMENTED_POOL + 1), @@ -222,6 +222,7 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000, VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001, VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002, + VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000, VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHX = 1000053000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHX = 1000053001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHX = 1000053002, @@ -240,47 +241,50 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = 1000059007, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = 1000059008, VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX = 1000060000, - VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX = 1000060001, - VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX = 1000060002, VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX = 1000060003, VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX = 1000060004, VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX = 1000060005, VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX = 1000060006, + VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHX = 1000060010, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHX = 1000060013, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHX = 1000060014, VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX = 1000060007, VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHX = 1000060008, VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHX = 1000060009, - VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHX = 1000060010, VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX = 1000060011, VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX = 1000060012, VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000, VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX = 1000070000, VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX = 1000070001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHX = 1000071000, - VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHX = 1000071001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHX = 1000071002, - VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHX = 1000071003, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHX = 1000071004, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHX = 1000071005, - VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHX = 1000071006, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHX = 1000071007, - VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHX = 1000072000, - VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHX = 1000072001, - VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHX = 1000072002, - VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHX = 1000073000, - VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHX = 1000073001, - VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHX = 1000073002, - VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHX = 1000074000, - VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHX = 1000074001, - VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHX = 1000075000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHX = 1000076000, - VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHX = 1000076001, - VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHX = 1000077000, - VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHX = 1000078000, - VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHX = 1000078001, - VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHX = 1000078002, - VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHX = 1000079000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = 1000071000, + VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = 1000071001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = 1000071002, + VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = 1000071003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = 1000071004, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = 1000072000, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = 1000072001, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = 1000072002, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001, + VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002, + VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000, + VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001, + VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002, + VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = 1000076000, + VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = 1000076001, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = 1000077000, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001, + VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = 1000083000, + VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000, VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = 1000085000, VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = 1000086000, VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = 1000086001, @@ -289,17 +293,66 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX = 1000086004, VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX = 1000086005, VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000, - VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = 1000090000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000, VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000, VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001, VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002, VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003, + VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000, VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000, VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001, + VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000, + VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = 1000112000, + VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = 1000112001, + VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = 1000113000, + VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000, + VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001, + VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002, + VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000, + VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = 1000117000, + VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = 1000117001, + VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = 1000117002, + VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = 1000117003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001, + VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = 1000120000, VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000, VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = 1000127000, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = 1000127001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = 1000130000, + VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = 1000130001, + VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000, + VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001, + VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003, + VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146000, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146001, + VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146002, + VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = 1000146003, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = 1000146004, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = 1000147000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001, + VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = 1000156000, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = 1000156001, + VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = 1000156002, + VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = 1000156003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = 1000156004, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = 1000156005, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = 1000157000, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = 1000157001, + VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000, + VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001, VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO, VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO, VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1), @@ -520,6 +573,40 @@ typedef enum VkFormat { VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005, VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006, VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007, + VK_FORMAT_G8B8G8R8_422_UNORM_KHR = 1000156000, + VK_FORMAT_B8G8R8G8_422_UNORM_KHR = 1000156001, + VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = 1000156002, + VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = 1000156003, + VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = 1000156004, + VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = 1000156005, + VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = 1000156006, + VK_FORMAT_R10X6_UNORM_PACK16_KHR = 1000156007, + VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = 1000156008, + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = 1000156009, + VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = 1000156010, + VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = 1000156011, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = 1000156012, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = 1000156013, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = 1000156014, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = 1000156015, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = 1000156016, + VK_FORMAT_R12X4_UNORM_PACK16_KHR = 1000156017, + VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = 1000156018, + VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = 1000156019, + VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = 1000156020, + VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = 1000156021, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = 1000156022, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = 1000156023, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = 1000156024, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = 1000156025, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = 1000156026, + VK_FORMAT_G16B16G16R16_422_UNORM_KHR = 1000156027, + VK_FORMAT_B16G16R16G16_422_UNORM_KHR = 1000156028, + VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = 1000156029, + VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = 1000156030, + VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = 1000156031, + VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = 1000156032, + VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = 1000156033, VK_FORMAT_BEGIN_RANGE = VK_FORMAT_UNDEFINED, VK_FORMAT_END_RANGE = VK_FORMAT_ASTC_12x12_SRGB_BLOCK, VK_FORMAT_RANGE_SIZE = (VK_FORMAT_ASTC_12x12_SRGB_BLOCK - VK_FORMAT_UNDEFINED + 1), @@ -587,6 +674,9 @@ typedef enum VkImageLayout { VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7, VK_IMAGE_LAYOUT_PREINITIALIZED = 8, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002, + VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = 1000117000, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = 1000117001, VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1), @@ -652,6 +742,7 @@ typedef enum VkPolygonMode { VK_POLYGON_MODE_FILL = 0, VK_POLYGON_MODE_LINE = 1, VK_POLYGON_MODE_POINT = 2, + VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000, VK_POLYGON_MODE_BEGIN_RANGE = VK_POLYGON_MODE_FILL, VK_POLYGON_MODE_END_RANGE = VK_POLYGON_MODE_POINT, VK_POLYGON_MODE_RANGE_SIZE = (VK_POLYGON_MODE_POINT - VK_POLYGON_MODE_FILL + 1), @@ -752,6 +843,52 @@ typedef enum VkBlendOp { VK_BLEND_OP_REVERSE_SUBTRACT = 2, VK_BLEND_OP_MIN = 3, VK_BLEND_OP_MAX = 4, + VK_BLEND_OP_ZERO_EXT = 1000148000, + VK_BLEND_OP_SRC_EXT = 1000148001, + VK_BLEND_OP_DST_EXT = 1000148002, + VK_BLEND_OP_SRC_OVER_EXT = 1000148003, + VK_BLEND_OP_DST_OVER_EXT = 1000148004, + VK_BLEND_OP_SRC_IN_EXT = 1000148005, + VK_BLEND_OP_DST_IN_EXT = 1000148006, + VK_BLEND_OP_SRC_OUT_EXT = 1000148007, + VK_BLEND_OP_DST_OUT_EXT = 1000148008, + VK_BLEND_OP_SRC_ATOP_EXT = 1000148009, + VK_BLEND_OP_DST_ATOP_EXT = 1000148010, + VK_BLEND_OP_XOR_EXT = 1000148011, + VK_BLEND_OP_MULTIPLY_EXT = 1000148012, + VK_BLEND_OP_SCREEN_EXT = 1000148013, + VK_BLEND_OP_OVERLAY_EXT = 1000148014, + VK_BLEND_OP_DARKEN_EXT = 1000148015, + VK_BLEND_OP_LIGHTEN_EXT = 1000148016, + VK_BLEND_OP_COLORDODGE_EXT = 1000148017, + VK_BLEND_OP_COLORBURN_EXT = 1000148018, + VK_BLEND_OP_HARDLIGHT_EXT = 1000148019, + VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020, + VK_BLEND_OP_DIFFERENCE_EXT = 1000148021, + VK_BLEND_OP_EXCLUSION_EXT = 1000148022, + VK_BLEND_OP_INVERT_EXT = 1000148023, + VK_BLEND_OP_INVERT_RGB_EXT = 1000148024, + VK_BLEND_OP_LINEARDODGE_EXT = 1000148025, + VK_BLEND_OP_LINEARBURN_EXT = 1000148026, + VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027, + VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028, + VK_BLEND_OP_PINLIGHT_EXT = 1000148029, + VK_BLEND_OP_HARDMIX_EXT = 1000148030, + VK_BLEND_OP_HSL_HUE_EXT = 1000148031, + VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032, + VK_BLEND_OP_HSL_COLOR_EXT = 1000148033, + VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034, + VK_BLEND_OP_PLUS_EXT = 1000148035, + VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036, + VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037, + VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038, + VK_BLEND_OP_MINUS_EXT = 1000148039, + VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040, + VK_BLEND_OP_CONTRAST_EXT = 1000148041, + VK_BLEND_OP_INVERT_OVG_EXT = 1000148042, + VK_BLEND_OP_RED_EXT = 1000148043, + VK_BLEND_OP_GREEN_EXT = 1000148044, + VK_BLEND_OP_BLUE_EXT = 1000148045, VK_BLEND_OP_BEGIN_RANGE = VK_BLEND_OP_ADD, VK_BLEND_OP_END_RANGE = VK_BLEND_OP_MAX, VK_BLEND_OP_RANGE_SIZE = (VK_BLEND_OP_MAX - VK_BLEND_OP_ADD + 1), @@ -770,6 +907,7 @@ typedef enum VkDynamicState { VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8, VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000, VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000, + VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000, VK_DYNAMIC_STATE_BEGIN_RANGE = VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_END_RANGE = VK_DYNAMIC_STATE_STENCIL_REFERENCE, VK_DYNAMIC_STATE_RANGE_SIZE = (VK_DYNAMIC_STATE_STENCIL_REFERENCE - VK_DYNAMIC_STATE_VIEWPORT + 1), @@ -893,6 +1031,49 @@ typedef enum VkSubpassContents { VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF } VkSubpassContents; +typedef enum VkObjectType { + VK_OBJECT_TYPE_UNKNOWN = 0, + VK_OBJECT_TYPE_INSTANCE = 1, + VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2, + VK_OBJECT_TYPE_DEVICE = 3, + VK_OBJECT_TYPE_QUEUE = 4, + VK_OBJECT_TYPE_SEMAPHORE = 5, + VK_OBJECT_TYPE_COMMAND_BUFFER = 6, + VK_OBJECT_TYPE_FENCE = 7, + VK_OBJECT_TYPE_DEVICE_MEMORY = 8, + VK_OBJECT_TYPE_BUFFER = 9, + VK_OBJECT_TYPE_IMAGE = 10, + VK_OBJECT_TYPE_EVENT = 11, + VK_OBJECT_TYPE_QUERY_POOL = 12, + VK_OBJECT_TYPE_BUFFER_VIEW = 13, + VK_OBJECT_TYPE_IMAGE_VIEW = 14, + VK_OBJECT_TYPE_SHADER_MODULE = 15, + VK_OBJECT_TYPE_PIPELINE_CACHE = 16, + VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17, + VK_OBJECT_TYPE_RENDER_PASS = 18, + VK_OBJECT_TYPE_PIPELINE = 19, + VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20, + VK_OBJECT_TYPE_SAMPLER = 21, + VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22, + VK_OBJECT_TYPE_DESCRIPTOR_SET = 23, + VK_OBJECT_TYPE_FRAMEBUFFER = 24, + VK_OBJECT_TYPE_COMMAND_POOL = 25, + VK_OBJECT_TYPE_SURFACE_KHR = 1000000000, + VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000, + VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000, + VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001, + VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000, + VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = 1000085000, + VK_OBJECT_TYPE_OBJECT_TABLE_NVX = 1000086000, + VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX = 1000086001, + VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = 1000156000, + VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000, + VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_UNKNOWN, + VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_COMMAND_POOL, + VK_OBJECT_TYPE_RANGE_SIZE = (VK_OBJECT_TYPE_COMMAND_POOL - VK_OBJECT_TYPE_UNKNOWN + 1), + VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkObjectType; + typedef VkFlags VkInstanceCreateFlags; typedef enum VkFormatFeatureFlagBits { @@ -912,6 +1093,14 @@ typedef enum VkFormatFeatureFlagBits { VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000, VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = 0x00004000, VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = 0x00008000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = 0x00010000, + VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000, + VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = 0x00400000, + VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000, VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkFormatFeatureFlagBits; typedef VkFlags VkFormatFeatureFlags; @@ -937,6 +1126,11 @@ typedef enum VkImageCreateFlagBits { VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010, VK_IMAGE_CREATE_BIND_SFR_BIT_KHX = 0x00000040, VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = 0x00000020, + VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = 0x00000080, + VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = 0x00000100, + VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000, + VK_IMAGE_CREATE_DISJOINT_BIT_KHR = 0x00000200, + VK_IMAGE_CREATE_ALIAS_BIT_KHR = 0x00000400, VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkImageCreateFlagBits; typedef VkFlags VkImageCreateFlags; @@ -1010,6 +1204,9 @@ typedef enum VkImageAspectFlagBits { VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002, VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004, VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008, + VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = 0x00000010, + VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = 0x00000020, + VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = 0x00000040, VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkImageAspectFlagBits; typedef VkFlags VkImageAspectFlags; @@ -1189,6 +1386,7 @@ typedef enum VkAccessFlagBits { VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000, VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX = 0x00020000, VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX = 0x00040000, + VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000, VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkAccessFlagBits; typedef VkFlags VkAccessFlags; @@ -1242,6 +1440,27 @@ typedef enum VkStencilFaceFlagBits { } VkStencilFaceFlagBits; typedef VkFlags VkStencilFaceFlags; +typedef struct VkApplicationInfo { + VkStructureType sType; + const void* pNext; + const char* pApplicationName; + uint32_t applicationVersion; + const char* pEngineName; + uint32_t engineVersion; + uint32_t apiVersion; +} VkApplicationInfo; + +typedef struct VkInstanceCreateInfo { + VkStructureType sType; + const void* pNext; + VkInstanceCreateFlags flags; + const VkApplicationInfo* pApplicationInfo; + uint32_t enabledLayerCount; + const char* const* ppEnabledLayerNames; + uint32_t enabledExtensionCount; + const char* const* ppEnabledExtensionNames; +} VkInstanceCreateInfo; + typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)( void* pUserData, size_t size, @@ -1271,29 +1490,6 @@ typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)( VkInternalAllocationType allocationType, VkSystemAllocationScope allocationScope); -typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void); - -typedef struct VkApplicationInfo { - VkStructureType sType; - const void* pNext; - const char* pApplicationName; - uint32_t applicationVersion; - const char* pEngineName; - uint32_t engineVersion; - uint32_t apiVersion; -} VkApplicationInfo; - -typedef struct VkInstanceCreateInfo { - VkStructureType sType; - const void* pNext; - VkInstanceCreateFlags flags; - const VkApplicationInfo* pApplicationInfo; - uint32_t enabledLayerCount; - const char* const* ppEnabledLayerNames; - uint32_t enabledExtensionCount; - const char* const* ppEnabledExtensionNames; -} VkInstanceCreateInfo; - typedef struct VkAllocationCallbacks { void* pUserData; PFN_vkAllocationFunction pfnAllocation; @@ -1534,6 +1730,7 @@ typedef struct VkPhysicalDeviceMemoryProperties { VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS]; } VkPhysicalDeviceMemoryProperties; +typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void); typedef struct VkDeviceQueueCreateInfo { VkStructureType sType; const void* pNext; @@ -3296,6 +3493,20 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) typedef enum VkColorSpaceKHR { VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, + VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001, + VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002, + VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = 1000104003, + VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004, + VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005, + VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006, + VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007, + VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008, + VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009, + VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010, + VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011, + VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012, + VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013, + VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014, VK_COLOR_SPACE_BEGIN_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, VK_COLOR_SPACE_END_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, VK_COLOR_SPACE_RANGE_SIZE_KHR = (VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR + 1), @@ -3307,6 +3518,8 @@ typedef enum VkPresentModeKHR { VK_PRESENT_MODE_MAILBOX_KHR = 1, VK_PRESENT_MODE_FIFO_KHR = 2, VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3, + VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000, + VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001, VK_PRESENT_MODE_BEGIN_RANGE_KHR = VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_END_RANGE_KHR = VK_PRESENT_MODE_FIFO_RELAXED_KHR, VK_PRESENT_MODE_RANGE_SIZE_KHR = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1), @@ -3703,7 +3916,7 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( #define VK_KHR_wayland_surface 1 #include -#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 5 +#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6 #define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface" typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; @@ -3801,7 +4014,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR( #define VK_KHR_win32_surface 1 #include -#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 5 +#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6 #define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface" typedef VkFlags VkWin32SurfaceCreateFlagsKHR; @@ -3966,6 +4179,377 @@ VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR( VkCommandPoolTrimFlagsKHR flags); #endif +#define VK_KHR_external_memory_capabilities 1 +#define VK_LUID_SIZE_KHR 8 +#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities" + + +typedef enum VkExternalMemoryHandleTypeFlagBitsKHR { + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = 0x00000008, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = 0x00000010, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = 0x00000020, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = 0x00000040, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkExternalMemoryHandleTypeFlagBitsKHR; +typedef VkFlags VkExternalMemoryHandleTypeFlagsKHR; + +typedef enum VkExternalMemoryFeatureFlagBitsKHR { + VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = 0x00000001, + VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = 0x00000002, + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = 0x00000004, + VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkExternalMemoryFeatureFlagBitsKHR; +typedef VkFlags VkExternalMemoryFeatureFlagsKHR; + +typedef struct VkExternalMemoryPropertiesKHR { + VkExternalMemoryFeatureFlagsKHR externalMemoryFeatures; + VkExternalMemoryHandleTypeFlagsKHR exportFromImportedHandleTypes; + VkExternalMemoryHandleTypeFlagsKHR compatibleHandleTypes; +} VkExternalMemoryPropertiesKHR; + +typedef struct VkPhysicalDeviceExternalImageFormatInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBitsKHR handleType; +} VkPhysicalDeviceExternalImageFormatInfoKHR; + +typedef struct VkExternalImageFormatPropertiesKHR { + VkStructureType sType; + void* pNext; + VkExternalMemoryPropertiesKHR externalMemoryProperties; +} VkExternalImageFormatPropertiesKHR; + +typedef struct VkPhysicalDeviceExternalBufferInfoKHR { + VkStructureType sType; + const void* pNext; + VkBufferCreateFlags flags; + VkBufferUsageFlags usage; + VkExternalMemoryHandleTypeFlagBitsKHR handleType; +} VkPhysicalDeviceExternalBufferInfoKHR; + +typedef struct VkExternalBufferPropertiesKHR { + VkStructureType sType; + void* pNext; + VkExternalMemoryPropertiesKHR externalMemoryProperties; +} VkExternalBufferPropertiesKHR; + +typedef struct VkPhysicalDeviceIDPropertiesKHR { + VkStructureType sType; + void* pNext; + uint8_t deviceUUID[VK_UUID_SIZE]; + uint8_t driverUUID[VK_UUID_SIZE]; + uint8_t deviceLUID[VK_LUID_SIZE_KHR]; + uint32_t deviceNodeMask; + VkBool32 deviceLUIDValid; +} VkPhysicalDeviceIDPropertiesKHR; + + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo, VkExternalBufferPropertiesKHR* pExternalBufferProperties); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo, + VkExternalBufferPropertiesKHR* pExternalBufferProperties); +#endif + +#define VK_KHR_external_memory 1 +#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory" +#define VK_QUEUE_FAMILY_EXTERNAL_KHR (~0U-1) + +typedef struct VkExternalMemoryImageCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagsKHR handleTypes; +} VkExternalMemoryImageCreateInfoKHR; + +typedef struct VkExternalMemoryBufferCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagsKHR handleTypes; +} VkExternalMemoryBufferCreateInfoKHR; + +typedef struct VkExportMemoryAllocateInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagsKHR handleTypes; +} VkExportMemoryAllocateInfoKHR; + + + +#ifdef VK_USE_PLATFORM_WIN32_KHR +#define VK_KHR_external_memory_win32 1 +#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32" + +typedef struct VkImportMemoryWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBitsKHR handleType; + HANDLE handle; + LPCWSTR name; +} VkImportMemoryWin32HandleInfoKHR; + +typedef struct VkExportMemoryWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportMemoryWin32HandleInfoKHR; + +typedef struct VkMemoryWin32HandlePropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryWin32HandlePropertiesKHR; + +typedef struct VkMemoryGetWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBitsKHR handleType; +} VkMemoryGetWin32HandleInfoKHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHR handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR( + VkDevice device, + const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR( + VkDevice device, + VkExternalMemoryHandleTypeFlagBitsKHR handleType, + HANDLE handle, + VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); +#endif +#endif /* VK_USE_PLATFORM_WIN32_KHR */ + +#define VK_KHR_external_memory_fd 1 +#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd" + +typedef struct VkImportMemoryFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBitsKHR handleType; + int fd; +} VkImportMemoryFdInfoKHR; + +typedef struct VkMemoryFdPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryFdPropertiesKHR; + +typedef struct VkMemoryGetFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBitsKHR handleType; +} VkMemoryGetFdInfoKHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHR handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR( + VkDevice device, + const VkMemoryGetFdInfoKHR* pGetFdInfo, + int* pFd); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR( + VkDevice device, + VkExternalMemoryHandleTypeFlagBitsKHR handleType, + int fd, + VkMemoryFdPropertiesKHR* pMemoryFdProperties); +#endif + +#ifdef VK_USE_PLATFORM_WIN32_KHR +#define VK_KHR_win32_keyed_mutex 1 +#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1 +#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex" + +typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t acquireCount; + const VkDeviceMemory* pAcquireSyncs; + const uint64_t* pAcquireKeys; + const uint32_t* pAcquireTimeouts; + uint32_t releaseCount; + const VkDeviceMemory* pReleaseSyncs; + const uint64_t* pReleaseKeys; +} VkWin32KeyedMutexAcquireReleaseInfoKHR; + + +#endif /* VK_USE_PLATFORM_WIN32_KHR */ + +#define VK_KHR_external_semaphore_capabilities 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities" + + +typedef enum VkExternalSemaphoreHandleTypeFlagBitsKHR { + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = 0x00000008, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = 0x00000010, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkExternalSemaphoreHandleTypeFlagBitsKHR; +typedef VkFlags VkExternalSemaphoreHandleTypeFlagsKHR; + +typedef enum VkExternalSemaphoreFeatureFlagBitsKHR { + VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = 0x00000001, + VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = 0x00000002, + VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkExternalSemaphoreFeatureFlagBitsKHR; +typedef VkFlags VkExternalSemaphoreFeatureFlagsKHR; + +typedef struct VkPhysicalDeviceExternalSemaphoreInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalSemaphoreHandleTypeFlagBitsKHR handleType; +} VkPhysicalDeviceExternalSemaphoreInfoKHR; + +typedef struct VkExternalSemaphorePropertiesKHR { + VkStructureType sType; + void* pNext; + VkExternalSemaphoreHandleTypeFlagsKHR exportFromImportedHandleTypes; + VkExternalSemaphoreHandleTypeFlagsKHR compatibleHandleTypes; + VkExternalSemaphoreFeatureFlagsKHR externalSemaphoreFeatures; +} VkExternalSemaphorePropertiesKHR; + + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo, VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo, + VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties); +#endif + +#define VK_KHR_external_semaphore 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore" + + +typedef enum VkSemaphoreImportFlagBitsKHR { + VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = 0x00000001, + VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkSemaphoreImportFlagBitsKHR; +typedef VkFlags VkSemaphoreImportFlagsKHR; + +typedef struct VkExportSemaphoreCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalSemaphoreHandleTypeFlagsKHR handleTypes; +} VkExportSemaphoreCreateInfoKHR; + + + +#ifdef VK_USE_PLATFORM_WIN32_KHR +#define VK_KHR_external_semaphore_win32 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32" + +typedef struct VkImportSemaphoreWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlagsKHR flags; + VkExternalSemaphoreHandleTypeFlagBitsKHR handleType; + HANDLE handle; + LPCWSTR name; +} VkImportSemaphoreWin32HandleInfoKHR; + +typedef struct VkExportSemaphoreWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportSemaphoreWin32HandleInfoKHR; + +typedef struct VkD3D12FenceSubmitInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t waitSemaphoreValuesCount; + const uint64_t* pWaitSemaphoreValues; + uint32_t signalSemaphoreValuesCount; + const uint64_t* pSignalSemaphoreValues; +} VkD3D12FenceSubmitInfoKHR; + +typedef struct VkSemaphoreGetWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBitsKHR handleType; +} VkSemaphoreGetWin32HandleInfoKHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR( + VkDevice device, + const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR( + VkDevice device, + const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle); +#endif +#endif /* VK_USE_PLATFORM_WIN32_KHR */ + +#define VK_KHR_external_semaphore_fd 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd" + +typedef struct VkImportSemaphoreFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlagsKHR flags; + VkExternalSemaphoreHandleTypeFlagBitsKHR handleType; + int fd; +} VkImportSemaphoreFdInfoKHR; + +typedef struct VkSemaphoreGetFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBitsKHR handleType; +} VkSemaphoreGetFdInfoKHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR( + VkDevice device, + const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR( + VkDevice device, + const VkSemaphoreGetFdInfoKHR* pGetFdInfo, + int* pFd); +#endif + #define VK_KHR_push_descriptor 1 #define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 1 #define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor" @@ -3989,6 +4573,45 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR( const VkWriteDescriptorSet* pDescriptorWrites); #endif +#define VK_KHR_16bit_storage 1 +#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1 +#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage" + +typedef struct VkPhysicalDevice16BitStorageFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 storageBuffer16BitAccess; + VkBool32 uniformAndStorageBuffer16BitAccess; + VkBool32 storagePushConstant16; + VkBool32 storageInputOutput16; +} VkPhysicalDevice16BitStorageFeaturesKHR; + + + +#define VK_KHR_incremental_present 1 +#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1 +#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present" + +typedef struct VkRectLayerKHR { + VkOffset2D offset; + VkExtent2D extent; + uint32_t layer; +} VkRectLayerKHR; + +typedef struct VkPresentRegionKHR { + uint32_t rectangleCount; + const VkRectLayerKHR* pRectangles; +} VkPresentRegionKHR; + +typedef struct VkPresentRegionsKHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkPresentRegionKHR* pRegions; +} VkPresentRegionsKHR; + + + #define VK_KHR_descriptor_update_template 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplateKHR) @@ -4061,12 +4684,518 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR( const void* pData); #endif +#define VK_KHR_shared_presentable_image 1 +#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1 +#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image" + +typedef struct VkSharedPresentSurfaceCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkImageUsageFlags sharedPresentSupportedUsageFlags; +} VkSharedPresentSurfaceCapabilitiesKHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR( + VkDevice device, + VkSwapchainKHR swapchain); +#endif + +#define VK_KHR_external_fence_capabilities 1 +#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities" + + +typedef enum VkExternalFenceHandleTypeFlagBitsKHR { + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004, + VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = 0x00000008, + VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkExternalFenceHandleTypeFlagBitsKHR; +typedef VkFlags VkExternalFenceHandleTypeFlagsKHR; + +typedef enum VkExternalFenceFeatureFlagBitsKHR { + VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = 0x00000001, + VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = 0x00000002, + VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkExternalFenceFeatureFlagBitsKHR; +typedef VkFlags VkExternalFenceFeatureFlagsKHR; + +typedef struct VkPhysicalDeviceExternalFenceInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalFenceHandleTypeFlagBitsKHR handleType; +} VkPhysicalDeviceExternalFenceInfoKHR; + +typedef struct VkExternalFencePropertiesKHR { + VkStructureType sType; + void* pNext; + VkExternalFenceHandleTypeFlagsKHR exportFromImportedHandleTypes; + VkExternalFenceHandleTypeFlagsKHR compatibleHandleTypes; + VkExternalFenceFeatureFlagsKHR externalFenceFeatures; +} VkExternalFencePropertiesKHR; + + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo, VkExternalFencePropertiesKHR* pExternalFenceProperties); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo, + VkExternalFencePropertiesKHR* pExternalFenceProperties); +#endif + +#define VK_KHR_external_fence 1 +#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence" + + +typedef enum VkFenceImportFlagBitsKHR { + VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = 0x00000001, + VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkFenceImportFlagBitsKHR; +typedef VkFlags VkFenceImportFlagsKHR; + +typedef struct VkExportFenceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalFenceHandleTypeFlagsKHR handleTypes; +} VkExportFenceCreateInfoKHR; + + + +#ifdef VK_USE_PLATFORM_WIN32_KHR +#define VK_KHR_external_fence_win32 1 +#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32" + +typedef struct VkImportFenceWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkFenceImportFlagsKHR flags; + VkExternalFenceHandleTypeFlagBitsKHR handleType; + HANDLE handle; + LPCWSTR name; +} VkImportFenceWin32HandleInfoKHR; + +typedef struct VkExportFenceWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportFenceWin32HandleInfoKHR; + +typedef struct VkFenceGetWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkExternalFenceHandleTypeFlagBitsKHR handleType; +} VkFenceGetWin32HandleInfoKHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR( + VkDevice device, + const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR( + VkDevice device, + const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle); +#endif +#endif /* VK_USE_PLATFORM_WIN32_KHR */ + +#define VK_KHR_external_fence_fd 1 +#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd" + +typedef struct VkImportFenceFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkFenceImportFlagsKHR flags; + VkExternalFenceHandleTypeFlagBitsKHR handleType; + int fd; +} VkImportFenceFdInfoKHR; + +typedef struct VkFenceGetFdInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkExternalFenceHandleTypeFlagBitsKHR handleType; +} VkFenceGetFdInfoKHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR( + VkDevice device, + const VkImportFenceFdInfoKHR* pImportFenceFdInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR( + VkDevice device, + const VkFenceGetFdInfoKHR* pGetFdInfo, + int* pFd); +#endif + +#define VK_KHR_maintenance2 1 +#define VK_KHR_MAINTENANCE2_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE2_EXTENSION_NAME "VK_KHR_maintenance2" + + +typedef enum VkPointClippingBehaviorKHR { + VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = 0, + VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = 1, + VK_POINT_CLIPPING_BEHAVIOR_BEGIN_RANGE_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR, + VK_POINT_CLIPPING_BEHAVIOR_END_RANGE_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR, + VK_POINT_CLIPPING_BEHAVIOR_RANGE_SIZE_KHR = (VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR - VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR + 1), + VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPointClippingBehaviorKHR; + +typedef enum VkTessellationDomainOriginKHR { + VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = 0, + VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = 1, + VK_TESSELLATION_DOMAIN_ORIGIN_BEGIN_RANGE_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR, + VK_TESSELLATION_DOMAIN_ORIGIN_END_RANGE_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR, + VK_TESSELLATION_DOMAIN_ORIGIN_RANGE_SIZE_KHR = (VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR - VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR + 1), + VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM_KHR = 0x7FFFFFFF +} VkTessellationDomainOriginKHR; + +typedef struct VkPhysicalDevicePointClippingPropertiesKHR { + VkStructureType sType; + void* pNext; + VkPointClippingBehaviorKHR pointClippingBehavior; +} VkPhysicalDevicePointClippingPropertiesKHR; + +typedef struct VkInputAttachmentAspectReferenceKHR { + uint32_t subpass; + uint32_t inputAttachmentIndex; + VkImageAspectFlags aspectMask; +} VkInputAttachmentAspectReferenceKHR; + +typedef struct VkRenderPassInputAttachmentAspectCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t aspectReferenceCount; + const VkInputAttachmentAspectReferenceKHR* pAspectReferences; +} VkRenderPassInputAttachmentAspectCreateInfoKHR; + +typedef struct VkImageViewUsageCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageUsageFlags usage; +} VkImageViewUsageCreateInfoKHR; + +typedef struct VkPipelineTessellationDomainOriginStateCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkTessellationDomainOriginKHR domainOrigin; +} VkPipelineTessellationDomainOriginStateCreateInfoKHR; + + + +#define VK_KHR_get_surface_capabilities2 1 +#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1 +#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2" + +typedef struct VkPhysicalDeviceSurfaceInfo2KHR { + VkStructureType sType; + const void* pNext; + VkSurfaceKHR surface; +} VkPhysicalDeviceSurfaceInfo2KHR; + +typedef struct VkSurfaceCapabilities2KHR { + VkStructureType sType; + void* pNext; + VkSurfaceCapabilitiesKHR surfaceCapabilities; +} VkSurfaceCapabilities2KHR; + +typedef struct VkSurfaceFormat2KHR { + VkStructureType sType; + void* pNext; + VkSurfaceFormatKHR surfaceFormat; +} VkSurfaceFormat2KHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkSurfaceCapabilities2KHR* pSurfaceCapabilities); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormat2KHR* pSurfaceFormats); +#endif + +#define VK_KHR_variable_pointers 1 +#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1 +#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers" + +typedef struct VkPhysicalDeviceVariablePointerFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 variablePointersStorageBuffer; + VkBool32 variablePointers; +} VkPhysicalDeviceVariablePointerFeaturesKHR; + + + +#define VK_KHR_dedicated_allocation 1 +#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3 +#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation" + +typedef struct VkMemoryDedicatedRequirementsKHR { + VkStructureType sType; + void* pNext; + VkBool32 prefersDedicatedAllocation; + VkBool32 requiresDedicatedAllocation; +} VkMemoryDedicatedRequirementsKHR; + +typedef struct VkMemoryDedicatedAllocateInfoKHR { + VkStructureType sType; + const void* pNext; + VkImage image; + VkBuffer buffer; +} VkMemoryDedicatedAllocateInfoKHR; + + + +#define VK_KHR_storage_buffer_storage_class 1 +#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1 +#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class" + + +#define VK_KHR_relaxed_block_layout 1 +#define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1 +#define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout" + + +#define VK_KHR_get_memory_requirements2 1 +#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1 +#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2" + +typedef struct VkBufferMemoryRequirementsInfo2KHR { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; +} VkBufferMemoryRequirementsInfo2KHR; + +typedef struct VkImageMemoryRequirementsInfo2KHR { + VkStructureType sType; + const void* pNext; + VkImage image; +} VkImageMemoryRequirementsInfo2KHR; + +typedef struct VkImageSparseMemoryRequirementsInfo2KHR { + VkStructureType sType; + const void* pNext; + VkImage image; +} VkImageSparseMemoryRequirementsInfo2KHR; + +typedef struct VkMemoryRequirements2KHR { + VkStructureType sType; + void* pNext; + VkMemoryRequirements memoryRequirements; +} VkMemoryRequirements2KHR; + +typedef struct VkSparseImageMemoryRequirements2KHR { + VkStructureType sType; + void* pNext; + VkSparseImageMemoryRequirements memoryRequirements; +} VkSparseImageMemoryRequirements2KHR; + + +typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR( + VkDevice device, + const VkImageMemoryRequirementsInfo2KHR* pInfo, + VkMemoryRequirements2KHR* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR( + VkDevice device, + const VkBufferMemoryRequirementsInfo2KHR* pInfo, + VkMemoryRequirements2KHR* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR( + VkDevice device, + const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements); +#endif + +#define VK_KHR_image_format_list 1 +#define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1 +#define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list" + +typedef struct VkImageFormatListCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t viewFormatCount; + const VkFormat* pViewFormats; +} VkImageFormatListCreateInfoKHR; + + + +#define VK_KHR_sampler_ycbcr_conversion 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversionKHR) + +#define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 1 +#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion" + + +typedef enum VkSamplerYcbcrModelConversionKHR { + VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = 0, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = 1, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = 2, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = 3, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = 4, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_BEGIN_RANGE_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_END_RANGE_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_RANGE_SIZE_KHR = (VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR - VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR + 1), + VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM_KHR = 0x7FFFFFFF +} VkSamplerYcbcrModelConversionKHR; + +typedef enum VkSamplerYcbcrRangeKHR { + VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = 0, + VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = 1, + VK_SAMPLER_YCBCR_RANGE_BEGIN_RANGE_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR, + VK_SAMPLER_YCBCR_RANGE_END_RANGE_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR, + VK_SAMPLER_YCBCR_RANGE_RANGE_SIZE_KHR = (VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR - VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR + 1), + VK_SAMPLER_YCBCR_RANGE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkSamplerYcbcrRangeKHR; + +typedef enum VkChromaLocationKHR { + VK_CHROMA_LOCATION_COSITED_EVEN_KHR = 0, + VK_CHROMA_LOCATION_MIDPOINT_KHR = 1, + VK_CHROMA_LOCATION_BEGIN_RANGE_KHR = VK_CHROMA_LOCATION_COSITED_EVEN_KHR, + VK_CHROMA_LOCATION_END_RANGE_KHR = VK_CHROMA_LOCATION_MIDPOINT_KHR, + VK_CHROMA_LOCATION_RANGE_SIZE_KHR = (VK_CHROMA_LOCATION_MIDPOINT_KHR - VK_CHROMA_LOCATION_COSITED_EVEN_KHR + 1), + VK_CHROMA_LOCATION_MAX_ENUM_KHR = 0x7FFFFFFF +} VkChromaLocationKHR; + +typedef struct VkSamplerYcbcrConversionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkFormat format; + VkSamplerYcbcrModelConversionKHR ycbcrModel; + VkSamplerYcbcrRangeKHR ycbcrRange; + VkComponentMapping components; + VkChromaLocationKHR xChromaOffset; + VkChromaLocationKHR yChromaOffset; + VkFilter chromaFilter; + VkBool32 forceExplicitReconstruction; +} VkSamplerYcbcrConversionCreateInfoKHR; + +typedef struct VkSamplerYcbcrConversionInfoKHR { + VkStructureType sType; + const void* pNext; + VkSamplerYcbcrConversionKHR conversion; +} VkSamplerYcbcrConversionInfoKHR; + +typedef struct VkBindImagePlaneMemoryInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageAspectFlagBits planeAspect; +} VkBindImagePlaneMemoryInfoKHR; + +typedef struct VkImagePlaneMemoryRequirementsInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageAspectFlagBits planeAspect; +} VkImagePlaneMemoryRequirementsInfoKHR; + +typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 samplerYcbcrConversion; +} VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR; + +typedef struct VkSamplerYcbcrConversionImageFormatPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t combinedImageSamplerDescriptorCount; +} VkSamplerYcbcrConversionImageFormatPropertiesKHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversionKHR)(VkDevice device, const VkSamplerYcbcrConversionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversionKHR* pYcbcrConversion); +typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversionKHR)(VkDevice device, VkSamplerYcbcrConversionKHR ycbcrConversion, const VkAllocationCallbacks* pAllocator); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR( + VkDevice device, + const VkSamplerYcbcrConversionCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSamplerYcbcrConversionKHR* pYcbcrConversion); + +VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR( + VkDevice device, + VkSamplerYcbcrConversionKHR ycbcrConversion, + const VkAllocationCallbacks* pAllocator); +#endif + +#define VK_KHR_bind_memory2 1 +#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1 +#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2" + +typedef struct VkBindBufferMemoryInfoKHR { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindBufferMemoryInfoKHR; + +typedef struct VkBindImageMemoryInfoKHR { + VkStructureType sType; + const void* pNext; + VkImage image; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindImageMemoryInfoKHR; + + +typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfoKHR* pBindInfos); +typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfoKHR* pBindInfos); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindBufferMemoryInfoKHR* pBindInfos); + +VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindImageMemoryInfoKHR* pBindInfos); +#endif + #define VK_EXT_debug_report 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) -#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 5 +#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 8 #define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report" #define VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT +#define VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT typedef enum VkDebugReportObjectTypeEXT { @@ -4098,26 +5227,20 @@ typedef enum VkDebugReportObjectTypeEXT { VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27, - VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = 28, + VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30, VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT = 31, VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT = 32, + VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = 33, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = 1000085000, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = 1000156000, VK_DEBUG_REPORT_OBJECT_TYPE_BEGIN_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, - VK_DEBUG_REPORT_OBJECT_TYPE_END_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT, - VK_DEBUG_REPORT_OBJECT_TYPE_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT + 1), + VK_DEBUG_REPORT_OBJECT_TYPE_END_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT + 1), VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF } VkDebugReportObjectTypeEXT; -typedef enum VkDebugReportErrorEXT { - VK_DEBUG_REPORT_ERROR_NONE_EXT = 0, - VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT = 1, - VK_DEBUG_REPORT_ERROR_BEGIN_RANGE_EXT = VK_DEBUG_REPORT_ERROR_NONE_EXT, - VK_DEBUG_REPORT_ERROR_END_RANGE_EXT = VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT, - VK_DEBUG_REPORT_ERROR_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT - VK_DEBUG_REPORT_ERROR_NONE_EXT + 1), - VK_DEBUG_REPORT_ERROR_MAX_ENUM_EXT = 0x7FFFFFFF -} VkDebugReportErrorEXT; - typedef enum VkDebugReportFlagBitsEXT { VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001, @@ -4139,7 +5262,6 @@ typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)( const char* pMessage, void* pUserData); - typedef struct VkDebugReportCallbackCreateInfoEXT { VkStructureType sType; const void* pNext; @@ -4181,6 +5303,11 @@ VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( #define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader" +#define VK_EXT_depth_range_unrestricted 1 +#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1 +#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted" + + #define VK_IMG_filter_cubic 1 #define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1 #define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic" @@ -4248,31 +5375,31 @@ typedef struct VkDebugMarkerMarkerInfoEXT { } VkDebugMarkerMarkerInfoEXT; -typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, VkDebugMarkerObjectTagInfoEXT* pTagInfo); -typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, VkDebugMarkerObjectNameInfoEXT* pNameInfo); -typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo); +typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer); -typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT( VkDevice device, - VkDebugMarkerObjectTagInfoEXT* pTagInfo); + const VkDebugMarkerObjectTagInfoEXT* pTagInfo); VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT( VkDevice device, - VkDebugMarkerObjectNameInfoEXT* pNameInfo); + const VkDebugMarkerObjectNameInfoEXT* pNameInfo); VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT( VkCommandBuffer commandBuffer, - VkDebugMarkerMarkerInfoEXT* pMarkerInfo); + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT( VkCommandBuffer commandBuffer); VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT( VkCommandBuffer commandBuffer, - VkDebugMarkerMarkerInfoEXT* pMarkerInfo); + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); #endif #define VK_AMD_gcn_shader 1 @@ -4347,6 +5474,18 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD( #define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot" +#define VK_AMD_texture_gather_bias_lod 1 +#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1 +#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod" + +typedef struct VkTextureLODGatherFormatPropertiesAMD { + VkStructureType sType; + void* pNext; + VkBool32 supportsTextureGatherLODBiasAMD; +} VkTextureLODGatherFormatPropertiesAMD; + + + #define VK_KHX_multiview 1 #define VK_KHX_MULTIVIEW_SPEC_VERSION 1 #define VK_KHX_MULTIVIEW_EXTENSION_NAME "VK_KHX_multiview" @@ -4498,9 +5637,9 @@ typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV { #endif /* VK_USE_PLATFORM_WIN32_KHR */ #define VK_KHX_device_group 1 -#define VK_MAX_DEVICE_GROUP_SIZE_KHX 32 -#define VK_KHX_DEVICE_GROUP_SPEC_VERSION 1 +#define VK_KHX_DEVICE_GROUP_SPEC_VERSION 2 #define VK_KHX_DEVICE_GROUP_EXTENSION_NAME "VK_KHX_device_group" +#define VK_MAX_DEVICE_GROUP_SIZE_KHX 32 typedef enum VkPeerMemoryFeatureFlagBitsKHX { @@ -4534,28 +5673,6 @@ typedef struct VkMemoryAllocateFlagsInfoKHX { uint32_t deviceMask; } VkMemoryAllocateFlagsInfoKHX; -typedef struct VkBindBufferMemoryInfoKHX { - VkStructureType sType; - const void* pNext; - VkBuffer buffer; - VkDeviceMemory memory; - VkDeviceSize memoryOffset; - uint32_t deviceIndexCount; - const uint32_t* pDeviceIndices; -} VkBindBufferMemoryInfoKHX; - -typedef struct VkBindImageMemoryInfoKHX { - VkStructureType sType; - const void* pNext; - VkImage image; - VkDeviceMemory memory; - VkDeviceSize memoryOffset; - uint32_t deviceIndexCount; - const uint32_t* pDeviceIndices; - uint32_t SFRRectCount; - const VkRect2D* pSFRRects; -} VkBindImageMemoryInfoKHX; - typedef struct VkDeviceGroupRenderPassBeginInfoKHX { VkStructureType sType; const void* pNext; @@ -4588,6 +5705,22 @@ typedef struct VkDeviceGroupBindSparseInfoKHX { uint32_t memoryDeviceIndex; } VkDeviceGroupBindSparseInfoKHX; +typedef struct VkBindBufferMemoryDeviceGroupInfoKHX { + VkStructureType sType; + const void* pNext; + uint32_t deviceIndexCount; + const uint32_t* pDeviceIndices; +} VkBindBufferMemoryDeviceGroupInfoKHX; + +typedef struct VkBindImageMemoryDeviceGroupInfoKHX { + VkStructureType sType; + const void* pNext; + uint32_t deviceIndexCount; + const uint32_t* pDeviceIndices; + uint32_t SFRRectCount; + const VkRect2D* pSFRRects; +} VkBindImageMemoryDeviceGroupInfoKHX; + typedef struct VkDeviceGroupPresentCapabilitiesKHX { VkStructureType sType; const void* pNext; @@ -4634,14 +5767,12 @@ typedef struct VkDeviceGroupSwapchainCreateInfoKHX { typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHX)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures); -typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHX)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfoKHX* pBindInfos); -typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHX)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfoKHX* pBindInfos); typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHX)(VkCommandBuffer commandBuffer, uint32_t deviceMask); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHX)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHX)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities); typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHX)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes); -typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHX)(VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, uint32_t* pImageIndex); -typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHX)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHX)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects); +typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHX)(VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, uint32_t* pImageIndex); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHX( @@ -4651,34 +5782,10 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHX( uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures); -VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHX( - VkDevice device, - uint32_t bindInfoCount, - const VkBindBufferMemoryInfoKHX* pBindInfos); - -VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHX( - VkDevice device, - uint32_t bindInfoCount, - const VkBindImageMemoryInfoKHX* pBindInfos); - VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHX( VkCommandBuffer commandBuffer, uint32_t deviceMask); -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHX( - VkDevice device, - VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHX( - VkDevice device, - VkSurfaceKHR surface, - VkDeviceGroupPresentModeFlagsKHX* pModes); - -VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHX( - VkDevice device, - const VkAcquireNextImageInfoKHX* pAcquireInfo, - uint32_t* pImageIndex); - VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHX( VkCommandBuffer commandBuffer, uint32_t baseGroupX, @@ -4688,11 +5795,25 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHX( uint32_t groupCountY, uint32_t groupCountZ); +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHX( + VkDevice device, + VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHX( + VkDevice device, + VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHX* pModes); + VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHX( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects); + +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHX( + VkDevice device, + const VkAcquireNextImageInfoKHX* pAcquireInfo, + uint32_t* pImageIndex); #endif #define VK_EXT_validation_flags 1 @@ -4702,9 +5823,10 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHX( typedef enum VkValidationCheckEXT { VK_VALIDATION_CHECK_ALL_EXT = 0, + VK_VALIDATION_CHECK_SHADERS_EXT = 1, VK_VALIDATION_CHECK_BEGIN_RANGE_EXT = VK_VALIDATION_CHECK_ALL_EXT, - VK_VALIDATION_CHECK_END_RANGE_EXT = VK_VALIDATION_CHECK_ALL_EXT, - VK_VALIDATION_CHECK_RANGE_SIZE_EXT = (VK_VALIDATION_CHECK_ALL_EXT - VK_VALIDATION_CHECK_ALL_EXT + 1), + VK_VALIDATION_CHECK_END_RANGE_EXT = VK_VALIDATION_CHECK_SHADERS_EXT, + VK_VALIDATION_CHECK_RANGE_SIZE_EXT = (VK_VALIDATION_CHECK_SHADERS_EXT - VK_VALIDATION_CHECK_ALL_EXT + 1), VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF } VkValidationCheckEXT; @@ -4759,7 +5881,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( typedef struct VkPhysicalDeviceGroupPropertiesKHX { VkStructureType sType; - const void* pNext; + void* pNext; uint32_t physicalDeviceCount; VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE_KHX]; VkBool32 subsetAllocation; @@ -4782,406 +5904,38 @@ VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHX( VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties); #endif -#define VK_KHX_external_memory_capabilities 1 -#define VK_LUID_SIZE_KHX 8 -#define VK_KHX_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 -#define VK_KHX_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHX_external_memory_capabilities" - - -typedef enum VkExternalMemoryHandleTypeFlagBitsKHX { - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHX = 0x00000001, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHX = 0x00000002, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHX = 0x00000004, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHX = 0x00000008, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHX = 0x00000010, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHX = 0x00000020, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHX = 0x00000040, - VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF -} VkExternalMemoryHandleTypeFlagBitsKHX; -typedef VkFlags VkExternalMemoryHandleTypeFlagsKHX; - -typedef enum VkExternalMemoryFeatureFlagBitsKHX { - VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHX = 0x00000001, - VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHX = 0x00000002, - VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHX = 0x00000004, - VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF -} VkExternalMemoryFeatureFlagBitsKHX; -typedef VkFlags VkExternalMemoryFeatureFlagsKHX; - -typedef struct VkExternalMemoryPropertiesKHX { - VkExternalMemoryFeatureFlagsKHX externalMemoryFeatures; - VkExternalMemoryHandleTypeFlagsKHX exportFromImportedHandleTypes; - VkExternalMemoryHandleTypeFlagsKHX compatibleHandleTypes; -} VkExternalMemoryPropertiesKHX; - -typedef struct VkPhysicalDeviceExternalImageFormatInfoKHX { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagBitsKHX handleType; -} VkPhysicalDeviceExternalImageFormatInfoKHX; - -typedef struct VkExternalImageFormatPropertiesKHX { - VkStructureType sType; - void* pNext; - VkExternalMemoryPropertiesKHX externalMemoryProperties; -} VkExternalImageFormatPropertiesKHX; - -typedef struct VkPhysicalDeviceExternalBufferInfoKHX { - VkStructureType sType; - const void* pNext; - VkBufferCreateFlags flags; - VkBufferUsageFlags usage; - VkExternalMemoryHandleTypeFlagBitsKHX handleType; -} VkPhysicalDeviceExternalBufferInfoKHX; - -typedef struct VkExternalBufferPropertiesKHX { - VkStructureType sType; - void* pNext; - VkExternalMemoryPropertiesKHX externalMemoryProperties; -} VkExternalBufferPropertiesKHX; - -typedef struct VkPhysicalDeviceIDPropertiesKHX { - VkStructureType sType; - void* pNext; - uint8_t deviceUUID[VK_UUID_SIZE]; - uint8_t driverUUID[VK_UUID_SIZE]; - uint8_t deviceLUID[VK_LUID_SIZE_KHX]; - VkBool32 deviceLUIDValid; -} VkPhysicalDeviceIDPropertiesKHX; - -typedef struct VkPhysicalDeviceProperties2KHX { - VkStructureType sType; - void* pNext; - VkPhysicalDeviceProperties properties; -} VkPhysicalDeviceProperties2KHX; - -typedef struct VkImageFormatProperties2KHX { - VkStructureType sType; - void* pNext; - VkImageFormatProperties imageFormatProperties; -} VkImageFormatProperties2KHX; - -typedef struct VkPhysicalDeviceImageFormatInfo2KHX { - VkStructureType sType; - const void* pNext; - VkFormat format; - VkImageType type; - VkImageTiling tiling; - VkImageUsageFlags usage; - VkImageCreateFlags flags; -} VkPhysicalDeviceImageFormatInfo2KHX; - - -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHX)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfoKHX* pExternalBufferInfo, VkExternalBufferPropertiesKHX* pExternalBufferProperties); -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHX)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2KHX* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHX)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2KHX* pImageFormatInfo, VkImageFormatProperties2KHX* pImageFormatProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHX( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalBufferInfoKHX* pExternalBufferInfo, - VkExternalBufferPropertiesKHX* pExternalBufferProperties); - -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHX( - VkPhysicalDevice physicalDevice, - VkPhysicalDeviceProperties2KHX* pProperties); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHX( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceImageFormatInfo2KHX* pImageFormatInfo, - VkImageFormatProperties2KHX* pImageFormatProperties); -#endif - -#define VK_KHX_external_memory 1 -#define VK_KHX_EXTERNAL_MEMORY_SPEC_VERSION 1 -#define VK_KHX_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHX_external_memory" -#define VK_QUEUE_FAMILY_EXTERNAL_KHX (~0U-1) - -typedef struct VkExternalMemoryImageCreateInfoKHX { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagsKHX handleTypes; -} VkExternalMemoryImageCreateInfoKHX; - -typedef struct VkExternalMemoryBufferCreateInfoKHX { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagsKHX handleTypes; -} VkExternalMemoryBufferCreateInfoKHX; - -typedef struct VkExportMemoryAllocateInfoKHX { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagsKHX handleTypes; -} VkExportMemoryAllocateInfoKHX; - - - -#ifdef VK_USE_PLATFORM_WIN32_KHR -#define VK_KHX_external_memory_win32 1 -#define VK_KHX_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 -#define VK_KHX_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHX_external_memory_win32" - -typedef struct VkImportMemoryWin32HandleInfoKHX { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagBitsKHX handleType; - HANDLE handle; -} VkImportMemoryWin32HandleInfoKHX; - -typedef struct VkExportMemoryWin32HandleInfoKHX { - VkStructureType sType; - const void* pNext; - const SECURITY_ATTRIBUTES* pAttributes; - DWORD dwAccess; - LPCWSTR name; -} VkExportMemoryWin32HandleInfoKHX; - -typedef struct VkMemoryWin32HandlePropertiesKHX { - VkStructureType sType; - void* pNext; - uint32_t memoryTypeBits; -} VkMemoryWin32HandlePropertiesKHX; - - -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHX)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagBitsKHX handleType, HANDLE* pHandle); -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHX)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHX handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHX* pMemoryWin32HandleProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHX( - VkDevice device, - VkDeviceMemory memory, - VkExternalMemoryHandleTypeFlagBitsKHX handleType, - HANDLE* pHandle); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHX( - VkDevice device, - VkExternalMemoryHandleTypeFlagBitsKHX handleType, - HANDLE handle, - VkMemoryWin32HandlePropertiesKHX* pMemoryWin32HandleProperties); -#endif -#endif /* VK_USE_PLATFORM_WIN32_KHR */ - -#define VK_KHX_external_memory_fd 1 -#define VK_KHX_EXTERNAL_MEMORY_FD_SPEC_VERSION 1 -#define VK_KHX_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHX_external_memory_fd" - -typedef struct VkImportMemoryFdInfoKHX { - VkStructureType sType; - const void* pNext; - VkExternalMemoryHandleTypeFlagBitsKHX handleType; - int fd; -} VkImportMemoryFdInfoKHX; - -typedef struct VkMemoryFdPropertiesKHX { - VkStructureType sType; - void* pNext; - uint32_t memoryTypeBits; -} VkMemoryFdPropertiesKHX; - - -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHX)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagBitsKHX handleType, int* pFd); -typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHX)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHX handleType, int fd, VkMemoryFdPropertiesKHX* pMemoryFdProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHX( - VkDevice device, - VkDeviceMemory memory, - VkExternalMemoryHandleTypeFlagBitsKHX handleType, - int* pFd); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHX( - VkDevice device, - VkExternalMemoryHandleTypeFlagBitsKHX handleType, - int fd, - VkMemoryFdPropertiesKHX* pMemoryFdProperties); -#endif - -#ifdef VK_USE_PLATFORM_WIN32_KHR -#define VK_KHX_win32_keyed_mutex 1 -#define VK_KHX_WIN32_KEYED_MUTEX_SPEC_VERSION 1 -#define VK_KHX_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHX_win32_keyed_mutex" - -typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHX { - VkStructureType sType; - const void* pNext; - uint32_t acquireCount; - const VkDeviceMemory* pAcquireSyncs; - const uint64_t* pAcquireKeys; - const uint32_t* pAcquireTimeouts; - uint32_t releaseCount; - const VkDeviceMemory* pReleaseSyncs; - const uint64_t* pReleaseKeys; -} VkWin32KeyedMutexAcquireReleaseInfoKHX; - - -#endif /* VK_USE_PLATFORM_WIN32_KHR */ - -#define VK_KHX_external_semaphore_capabilities 1 -#define VK_KHX_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1 -#define VK_KHX_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHX_external_semaphore_capabilities" - - -typedef enum VkExternalSemaphoreHandleTypeFlagBitsKHX { - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHX = 0x00000001, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHX = 0x00000002, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHX = 0x00000004, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHX = 0x00000008, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHX = 0x00000010, - VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF -} VkExternalSemaphoreHandleTypeFlagBitsKHX; -typedef VkFlags VkExternalSemaphoreHandleTypeFlagsKHX; - -typedef enum VkExternalSemaphoreFeatureFlagBitsKHX { - VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHX = 0x00000001, - VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHX = 0x00000002, - VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF -} VkExternalSemaphoreFeatureFlagBitsKHX; -typedef VkFlags VkExternalSemaphoreFeatureFlagsKHX; - -typedef struct VkPhysicalDeviceExternalSemaphoreInfoKHX { - VkStructureType sType; - const void* pNext; - VkExternalSemaphoreHandleTypeFlagBitsKHX handleType; -} VkPhysicalDeviceExternalSemaphoreInfoKHX; - -typedef struct VkExternalSemaphorePropertiesKHX { - VkStructureType sType; - void* pNext; - VkExternalSemaphoreHandleTypeFlagsKHX exportFromImportedHandleTypes; - VkExternalSemaphoreHandleTypeFlagsKHX compatibleHandleTypes; - VkExternalSemaphoreFeatureFlagsKHX externalSemaphoreFeatures; -} VkExternalSemaphorePropertiesKHX; - - -typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHX)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfoKHX* pExternalSemaphoreInfo, VkExternalSemaphorePropertiesKHX* pExternalSemaphoreProperties); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHX( - VkPhysicalDevice physicalDevice, - const VkPhysicalDeviceExternalSemaphoreInfoKHX* pExternalSemaphoreInfo, - VkExternalSemaphorePropertiesKHX* pExternalSemaphoreProperties); -#endif - -#define VK_KHX_external_semaphore 1 -#define VK_KHX_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 -#define VK_KHX_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHX_external_semaphore" - -typedef struct VkExportSemaphoreCreateInfoKHX { - VkStructureType sType; - const void* pNext; - VkExternalSemaphoreHandleTypeFlagsKHX handleTypes; -} VkExportSemaphoreCreateInfoKHX; - - - -#ifdef VK_USE_PLATFORM_WIN32_KHX -#define VK_KHX_external_semaphore_win32 1 -#define VK_KHX_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1 -#define VK_KHX_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHX_external_semaphore_win32" - -typedef struct VkImportSemaphoreWin32HandleInfoKHX { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - VkExternalSemaphoreHandleTypeFlagsKHX handleType; - HANDLE handle; -} VkImportSemaphoreWin32HandleInfoKHX; - -typedef struct VkExportSemaphoreWin32HandleInfoKHX { - VkStructureType sType; - const void* pNext; - const SECURITY_ATTRIBUTES* pAttributes; - DWORD dwAccess; - LPCWSTR name; -} VkExportSemaphoreWin32HandleInfoKHX; - -typedef struct VkD3D12FenceSubmitInfoKHX { - VkStructureType sType; - const void* pNext; - uint32_t waitSemaphoreValuesCount; - const uint64_t* pWaitSemaphoreValues; - uint32_t signalSemaphoreValuesCount; - const uint64_t* pSignalSemaphoreValues; -} VkD3D12FenceSubmitInfoKHX; - - -typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHX)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHX* pImportSemaphoreWin32HandleInfo); -typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHX)(VkDevice device, VkSemaphore semaphore, VkExternalSemaphoreHandleTypeFlagBitsKHX handleType, HANDLE* pHandle); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHX( - VkDevice device, - const VkImportSemaphoreWin32HandleInfoKHX* pImportSemaphoreWin32HandleInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHX( - VkDevice device, - VkSemaphore semaphore, - VkExternalSemaphoreHandleTypeFlagBitsKHX handleType, - HANDLE* pHandle); -#endif -#endif /* VK_USE_PLATFORM_WIN32_KHX */ - -#define VK_KHX_external_semaphore_fd 1 -#define VK_KHX_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1 -#define VK_KHX_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHX_external_semaphore_fd" - -typedef struct VkImportSemaphoreFdInfoKHX { - VkStructureType sType; - const void* pNext; - VkSemaphore semaphore; - VkExternalSemaphoreHandleTypeFlagBitsKHX handleType; - int fd; -} VkImportSemaphoreFdInfoKHX; - - -typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHX)(VkDevice device, const VkImportSemaphoreFdInfoKHX* pImportSemaphoreFdInfo); -typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHX)(VkDevice device, VkSemaphore semaphore, VkExternalSemaphoreHandleTypeFlagBitsKHX handleType, int* pFd); - -#ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHX( - VkDevice device, - const VkImportSemaphoreFdInfoKHX* pImportSemaphoreFdInfo); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHX( - VkDevice device, - VkSemaphore semaphore, - VkExternalSemaphoreHandleTypeFlagBitsKHX handleType, - int* pFd); -#endif - #define VK_NVX_device_generated_commands 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkObjectTableNVX) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNVX) -#define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 1 +#define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3 #define VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NVX_device_generated_commands" typedef enum VkIndirectCommandsTokenTypeNVX { - VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX = 0, - VK_INDIRECT_COMMANDS_TOKEN_DESCRIPTOR_SET_NVX = 1, - VK_INDIRECT_COMMANDS_TOKEN_INDEX_BUFFER_NVX = 2, - VK_INDIRECT_COMMANDS_TOKEN_VERTEX_BUFFER_NVX = 3, - VK_INDIRECT_COMMANDS_TOKEN_PUSH_CONSTANT_NVX = 4, - VK_INDIRECT_COMMANDS_TOKEN_DRAW_INDEXED_NVX = 5, - VK_INDIRECT_COMMANDS_TOKEN_DRAW_NVX = 6, - VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX = 7, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_BEGIN_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_END_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX, - VK_INDIRECT_COMMANDS_TOKEN_TYPE_RANGE_SIZE_NVX = (VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX - VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX + 1), + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX = 0, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX = 1, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX = 2, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX = 3, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX = 4, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX = 5, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX = 6, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX = 7, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_BEGIN_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_END_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_RANGE_SIZE_NVX = (VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX - VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX + 1), VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF } VkIndirectCommandsTokenTypeNVX; typedef enum VkObjectEntryTypeNVX { - VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX = 0, - VK_OBJECT_ENTRY_PIPELINE_NVX = 1, - VK_OBJECT_ENTRY_INDEX_BUFFER_NVX = 2, - VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX = 3, - VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX = 4, - VK_OBJECT_ENTRY_TYPE_BEGIN_RANGE_NVX = VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX, - VK_OBJECT_ENTRY_TYPE_END_RANGE_NVX = VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX, - VK_OBJECT_ENTRY_TYPE_RANGE_SIZE_NVX = (VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX - VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX + 1), + VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX = 0, + VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX = 1, + VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX = 2, + VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX = 3, + VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX = 4, + VK_OBJECT_ENTRY_TYPE_BEGIN_RANGE_NVX = VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX, + VK_OBJECT_ENTRY_TYPE_END_RANGE_NVX = VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX, + VK_OBJECT_ENTRY_TYPE_RANGE_SIZE_NVX = (VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX - VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX + 1), VK_OBJECT_ENTRY_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF } VkObjectEntryTypeNVX; @@ -5444,6 +6198,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT( #define VK_EXT_display_surface_counter 1 #define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1 #define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter" +#define VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT typedef enum VkSurfaceCounterFlagBitsEXT { @@ -5565,6 +6320,51 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT( uint64_t* pCounterValue); #endif +#define VK_GOOGLE_display_timing 1 +#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1 +#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing" + +typedef struct VkRefreshCycleDurationGOOGLE { + uint64_t refreshDuration; +} VkRefreshCycleDurationGOOGLE; + +typedef struct VkPastPresentationTimingGOOGLE { + uint32_t presentID; + uint64_t desiredPresentTime; + uint64_t actualPresentTime; + uint64_t earliestPresentTime; + uint64_t presentMargin; +} VkPastPresentationTimingGOOGLE; + +typedef struct VkPresentTimeGOOGLE { + uint32_t presentID; + uint64_t desiredPresentTime; +} VkPresentTimeGOOGLE; + +typedef struct VkPresentTimesInfoGOOGLE { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkPresentTimeGOOGLE* pTimes; +} VkPresentTimesInfoGOOGLE; + + +typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE( + VkDevice device, + VkSwapchainKHR swapchain, + VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t* pPresentationTimingCount, + VkPastPresentationTimingGOOGLE* pPresentationTimings); +#endif + #define VK_NV_sample_mask_override_coverage 1 #define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1 #define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage" @@ -5649,7 +6449,7 @@ typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT; typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT { VkStructureType sType; - const void* pNext; + void* pNext; uint32_t maxDiscardRectangles; } VkPhysicalDeviceDiscardRectanglePropertiesEXT; @@ -5673,9 +6473,47 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT( const VkRect2D* pDiscardRectangles); #endif +#define VK_EXT_swapchain_colorspace 1 +#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 3 +#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace" + + +#define VK_EXT_hdr_metadata 1 +#define VK_EXT_HDR_METADATA_SPEC_VERSION 1 +#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata" + +typedef struct VkXYColorEXT { + float x; + float y; +} VkXYColorEXT; + +typedef struct VkHdrMetadataEXT { + VkStructureType sType; + const void* pNext; + VkXYColorEXT displayPrimaryRed; + VkXYColorEXT displayPrimaryGreen; + VkXYColorEXT displayPrimaryBlue; + VkXYColorEXT whitePoint; + float maxLuminance; + float minLuminance; + float maxContentLightLevel; + float maxFrameAverageLightLevel; +} VkHdrMetadataEXT; + + +typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT( + VkDevice device, + uint32_t swapchainCount, + const VkSwapchainKHR* pSwapchains, + const VkHdrMetadataEXT* pMetadata); +#endif + #ifdef VK_USE_PLATFORM_IOS_MVK #define VK_MVK_ios_surface 1 -#define VK_MVK_IOS_SURFACE_SPEC_VERSION 1 +#define VK_MVK_IOS_SURFACE_SPEC_VERSION 2 #define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface" typedef VkFlags VkIOSSurfaceCreateFlagsMVK; @@ -5701,7 +6539,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK( #ifdef VK_USE_PLATFORM_MACOS_MVK #define VK_MVK_macos_surface 1 -#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 1 +#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 2 #define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface" typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; @@ -5725,6 +6563,296 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK( #endif #endif /* VK_USE_PLATFORM_MACOS_MVK */ +#define VK_EXT_sampler_filter_minmax 1 +#define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 1 +#define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax" + + +typedef enum VkSamplerReductionModeEXT { + VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = 0, + VK_SAMPLER_REDUCTION_MODE_MIN_EXT = 1, + VK_SAMPLER_REDUCTION_MODE_MAX_EXT = 2, + VK_SAMPLER_REDUCTION_MODE_BEGIN_RANGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT, + VK_SAMPLER_REDUCTION_MODE_END_RANGE_EXT = VK_SAMPLER_REDUCTION_MODE_MAX_EXT, + VK_SAMPLER_REDUCTION_MODE_RANGE_SIZE_EXT = (VK_SAMPLER_REDUCTION_MODE_MAX_EXT - VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT + 1), + VK_SAMPLER_REDUCTION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkSamplerReductionModeEXT; + +typedef struct VkSamplerReductionModeCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkSamplerReductionModeEXT reductionMode; +} VkSamplerReductionModeCreateInfoEXT; + +typedef struct VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 filterMinmaxSingleComponentFormats; + VkBool32 filterMinmaxImageComponentMapping; +} VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT; + + + +#define VK_AMD_gpu_shader_int16 1 +#define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 1 +#define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16" + + +#define VK_AMD_mixed_attachment_samples 1 +#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1 +#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples" + + +#define VK_AMD_shader_fragment_mask 1 +#define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1 +#define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask" + + +#define VK_EXT_shader_stencil_export 1 +#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1 +#define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export" + + +#define VK_EXT_sample_locations 1 +#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1 +#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations" + +typedef struct VkSampleLocationEXT { + float x; + float y; +} VkSampleLocationEXT; + +typedef struct VkSampleLocationsInfoEXT { + VkStructureType sType; + const void* pNext; + VkSampleCountFlagBits sampleLocationsPerPixel; + VkExtent2D sampleLocationGridSize; + uint32_t sampleLocationsCount; + const VkSampleLocationEXT* pSampleLocations; +} VkSampleLocationsInfoEXT; + +typedef struct VkAttachmentSampleLocationsEXT { + uint32_t attachmentIndex; + VkSampleLocationsInfoEXT sampleLocationsInfo; +} VkAttachmentSampleLocationsEXT; + +typedef struct VkSubpassSampleLocationsEXT { + uint32_t subpassIndex; + VkSampleLocationsInfoEXT sampleLocationsInfo; +} VkSubpassSampleLocationsEXT; + +typedef struct VkRenderPassSampleLocationsBeginInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t attachmentInitialSampleLocationsCount; + const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations; + uint32_t postSubpassSampleLocationsCount; + const VkSubpassSampleLocationsEXT* pSubpassSampleLocations; +} VkRenderPassSampleLocationsBeginInfoEXT; + +typedef struct VkPipelineSampleLocationsStateCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 sampleLocationsEnable; + VkSampleLocationsInfoEXT sampleLocationsInfo; +} VkPipelineSampleLocationsStateCreateInfoEXT; + +typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT { + VkStructureType sType; + void* pNext; + VkSampleCountFlags sampleLocationSampleCounts; + VkExtent2D maxSampleLocationGridSize; + float sampleLocationCoordinateRange[2]; + uint32_t sampleLocationSubPixelBits; + VkBool32 variableSampleLocations; +} VkPhysicalDeviceSampleLocationsPropertiesEXT; + +typedef struct VkMultisamplePropertiesEXT { + VkStructureType sType; + void* pNext; + VkExtent2D maxSampleLocationGridSize; +} VkMultisamplePropertiesEXT; + + +typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT( + VkCommandBuffer commandBuffer, + const VkSampleLocationsInfoEXT* pSampleLocationsInfo); + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT( + VkPhysicalDevice physicalDevice, + VkSampleCountFlagBits samples, + VkMultisamplePropertiesEXT* pMultisampleProperties); +#endif + +#define VK_EXT_blend_operation_advanced 1 +#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2 +#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced" + + +typedef enum VkBlendOverlapEXT { + VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0, + VK_BLEND_OVERLAP_DISJOINT_EXT = 1, + VK_BLEND_OVERLAP_CONJOINT_EXT = 2, + VK_BLEND_OVERLAP_BEGIN_RANGE_EXT = VK_BLEND_OVERLAP_UNCORRELATED_EXT, + VK_BLEND_OVERLAP_END_RANGE_EXT = VK_BLEND_OVERLAP_CONJOINT_EXT, + VK_BLEND_OVERLAP_RANGE_SIZE_EXT = (VK_BLEND_OVERLAP_CONJOINT_EXT - VK_BLEND_OVERLAP_UNCORRELATED_EXT + 1), + VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF +} VkBlendOverlapEXT; + +typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 advancedBlendCoherentOperations; +} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT; + +typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t advancedBlendMaxColorAttachments; + VkBool32 advancedBlendIndependentBlend; + VkBool32 advancedBlendNonPremultipliedSrcColor; + VkBool32 advancedBlendNonPremultipliedDstColor; + VkBool32 advancedBlendCorrelatedOverlap; + VkBool32 advancedBlendAllOperations; +} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT; + +typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 srcPremultiplied; + VkBool32 dstPremultiplied; + VkBlendOverlapEXT blendOverlap; +} VkPipelineColorBlendAdvancedStateCreateInfoEXT; + + + +#define VK_NV_fragment_coverage_to_color 1 +#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color" + +typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV; + +typedef struct VkPipelineCoverageToColorStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCoverageToColorStateCreateFlagsNV flags; + VkBool32 coverageToColorEnable; + uint32_t coverageToColorLocation; +} VkPipelineCoverageToColorStateCreateInfoNV; + + + +#define VK_NV_framebuffer_mixed_samples 1 +#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1 +#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples" + + +typedef enum VkCoverageModulationModeNV { + VK_COVERAGE_MODULATION_MODE_NONE_NV = 0, + VK_COVERAGE_MODULATION_MODE_RGB_NV = 1, + VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2, + VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3, + VK_COVERAGE_MODULATION_MODE_BEGIN_RANGE_NV = VK_COVERAGE_MODULATION_MODE_NONE_NV, + VK_COVERAGE_MODULATION_MODE_END_RANGE_NV = VK_COVERAGE_MODULATION_MODE_RGBA_NV, + VK_COVERAGE_MODULATION_MODE_RANGE_SIZE_NV = (VK_COVERAGE_MODULATION_MODE_RGBA_NV - VK_COVERAGE_MODULATION_MODE_NONE_NV + 1), + VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoverageModulationModeNV; + +typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV; + +typedef struct VkPipelineCoverageModulationStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCoverageModulationStateCreateFlagsNV flags; + VkCoverageModulationModeNV coverageModulationMode; + VkBool32 coverageModulationTableEnable; + uint32_t coverageModulationTableCount; + const float* pCoverageModulationTable; +} VkPipelineCoverageModulationStateCreateInfoNV; + + + +#define VK_NV_fill_rectangle 1 +#define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1 +#define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle" + + +#define VK_EXT_post_depth_coverage 1 +#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1 +#define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage" + + +#define VK_EXT_validation_cache 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT) + +#define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1 +#define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache" + + +typedef enum VkValidationCacheHeaderVersionEXT { + VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1, + VK_VALIDATION_CACHE_HEADER_VERSION_BEGIN_RANGE_EXT = VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT, + VK_VALIDATION_CACHE_HEADER_VERSION_END_RANGE_EXT = VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT, + VK_VALIDATION_CACHE_HEADER_VERSION_RANGE_SIZE_EXT = (VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT - VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT + 1), + VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationCacheHeaderVersionEXT; + +typedef VkFlags VkValidationCacheCreateFlagsEXT; + +typedef struct VkValidationCacheCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkValidationCacheCreateFlagsEXT flags; + size_t initialDataSize; + const void* pInitialData; +} VkValidationCacheCreateInfoEXT; + +typedef struct VkShaderModuleValidationCacheCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkValidationCacheEXT validationCache; +} VkShaderModuleValidationCacheCreateInfoEXT; + + +typedef VkResult (VKAPI_PTR *PFN_vkCreateValidationCacheEXT)(VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache); +typedef void (VKAPI_PTR *PFN_vkDestroyValidationCacheEXT)(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkMergeValidationCachesEXT)(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches); +typedef VkResult (VKAPI_PTR *PFN_vkGetValidationCacheDataEXT)(VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT( + VkDevice device, + const VkValidationCacheCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkValidationCacheEXT* pValidationCache); + +VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT( + VkDevice device, + VkValidationCacheEXT validationCache, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT( + VkDevice device, + VkValidationCacheEXT dstCache, + uint32_t srcCacheCount, + const VkValidationCacheEXT* pSrcCaches); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT( + VkDevice device, + VkValidationCacheEXT validationCache, + size_t* pDataSize, + void* pData); +#endif + +#define VK_EXT_shader_viewport_index_layer 1 +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1 +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer" + + #ifdef __cplusplus } #endif