From 118049cda8aa7ca9310b286ea4db7a1027208deb Mon Sep 17 00:00:00 2001 From: Adam Sawicki Date: Tue, 19 Sep 2017 11:38:01 +0200 Subject: [PATCH] Added feature: VmaAllocatorCreateInfo::pHeapSizeLimit. --- bin/VulkanSample_Release_2015.exe | Bin 99328 -> 100352 bytes docs/html/functions.html | 3 + docs/html/functions_vars.html | 3 + docs/html/index.html | 16 +- docs/html/search/all_8.js | 1 + docs/html/search/all_c.js | 2 +- docs/html/search/variables_6.js | 1 + docs/html/search/variables_a.js | 2 +- ...uct_vma_allocator_create_info-members.html | 7 +- .../struct_vma_allocator_create_info.html | 34 +++- docs/html/vk__mem__alloc_8h_source.html | 177 +++++++++--------- src/vk_mem_alloc.h | 166 ++++++++++++---- 12 files changed, 273 insertions(+), 139 deletions(-) diff --git a/bin/VulkanSample_Release_2015.exe b/bin/VulkanSample_Release_2015.exe index fda2ba19f408b26b27740d89cea228f74b0b80f1..c08cac908914f8deec21b0528dac0eafc11ecce9 100644 GIT binary patch delta 38894 zcmeFad0bT0|37~3g~0(CXAnj~MHWFp6j4M$G(kZx3X1!#xTI8CsA%qkA?kD;Bab?^ znU$HD8M$X^kPDclsFjwL*g9$%mbsSmd%n)S!?5)J{{MSCKKJps^E&5sUfX${?RCz* zGgGkItDx9xix@ua=h88Pc2x`ELSw0kAecl!SfV0_d$VwHdi45HqTmUvP$CLd1dBys zfv?6#pi~q}2(b6X5Gk%ZJ12JQwzvr>O~8^oPoi>Pp@NVTJ7?PD{Kq>#-*gTb*tA%<2h6?#?t<;X`Jesm{shPNfeJ`~WSMKrhm>@O}iWCK7 zlp&mepYGHW%IVS~*&@%DmUe##f^k%-T(0v5o-WyDXzD8pe;F;hYl}reE<6@>b@@Mn z@R?lrTa@G18!q}VH+>h4UIL2K52>MltA@Uo{Gm1SEgC~u4a1BYhUcMOGiZ*+Fvn%k z%?B=n+SSl6bkncX=*PO~%Q(Hwa1sSq_fiIzY|}BO+bqRA*c0!yTa*q|vtJu+idy;s zoS+QS%eLVWp|Z!BOy#KKk_QY`mPF*pN@hfy9RHc)!Y%feeu4DeLAG4)?_aw(k&3(D zV*R~elv*BSKYDkNem}tcd}5^11MCr>wo=qdHr*#ziao$8ecDLg2iV^LKka8N8pld| z_pn$>r5Lr1TD~nCCZIt9#vY$QEc&+r?KGxJXLE5*EW%%}y zX76J*-!4+GeXPtkSrYcKhrZ#`w|iN*Ay0aIFI#VjkiIz1)|w*N_XdBd@m}_qp@a0@ z9v0T5hxFPWHlaxeX)fjb+2$ruQnx*<0vNrD@is2jPa7=eb&s>K|1t4OEX1E?0xoxDNGWMLSuKS`}?dMW!~>|YHvSCD`D||kXFJb z`$1X>d)2Rl*qP-R&FqR_vQ+gRYu&ViwEI1l*)&pA*yE;f>24|8*fdd!eUDY5NO+IS zYU&>)eX@)7^zR_8-^DS@fEl@qZ3iYw#a#1$$+!F~L5M#mE1x@p%h>Y)p;F7sY)?R} zbgGp77|?M~vH8A-_$O0>UXzNW_r$hXAxhh$+1{3`q|}S7SF87=(r9+0)#uX1Xm&Vw z*aWeyAbcDt2>WpVj{6R7!Yyeh2orH9Ek=rtMO&C>csuFJ`>bPlMBnRI8xRC;p?=*T{n|VMBLH3Mgr`^diM~;yW0s=< z^|e>mwFww)a;)Qm8q3NB$Esh5>XgIMQ1;GOYh=HFzpiYtq3mUl-E3rAx8#*Pjn`&l)5b3-#uZLTr8x;MG3T#7T<>DNw3t@e)HYBwO`A9R>#K1E^4=p z8B_a5WhgU`3yxh4>vZX5Rl3^6EK#Cd^n1QvTH>QZKAPoAvN^h;mTelB);GB)hBg## zago`~zul>8`WL)W>X<&{Wx=9${93jvmO#fnZUFBkH-1pt@|T7-`MZ^^uBR-wp|YP} z(!5$nR}+)N=2rF$`><_{wDBe8XdC4_lQRs~W48aCwQAQYC{2@)p`3>EmS!j;O|tV- z$Kjo9NW1>hPcO0;+a>tE`y#2~TunGv5l8gbt6URYTo2!2rl=Sx^+nbzs*Azk=6doL zTN2e$`uPR+LR5$}{2g{EDqZUME)%0)mDcQJuSbVV`rr4Qh&G6R_pXz!3$jgFjpf)e z;2ri;``#8=xhX3jYyw6uavE3Ikw}lfZ44s=C5bSXcMy3C4ioz7y}mK7+o zqcOoPX2G&zQeQOJN$scctX(az>;1yKy6|Ea)*)24^D35nmfnFi@kOerG~ZjPaGIm8 zvR^tZ5C^eI9do65S6OxE81`%@Kcx@+atcrW_MmH4f+|S!$p~;cPVV*`=eV`;*adBF6}KTBS)o9Np!OeAb|e5B>HWBPB(gHHcM9Q)H3m<#*j3$ZBo}y z@{P_irA$ud!XIuAp-IIHM({u8nil2N!U zRLF0JZjY`r5JG?cSr9VH`-MV+kcD6_OX+7yRmgLW`#_>dPesJ4oOX0SPsR)kBxj)` zrXo?A?~?(e6mMtcb#Kr(&EY>-h=H0*(VDC9Sa#~fNfVD!H0ioBm2ZcQN*$g$GIbOh zIuGrfqJyUR(hO_gl1$|$Kxvk8S4q`p+4{m-Z&|sI)*782|5Ju_*uf0ju()I2t^rScX>A@hyZglUy6@fX5{5MT;u%No7jUZ5 zJyV%)%E0<1!_OO@W%s&AN)KORp^2R=|B~11610Do4C|*)XjANBctHo{C-gDRmTC%g40)DuYh%YIU;Z9Utd+Fn-n zeh+^O2J{)nPHrBr>1(Jdp$4>k1+9D z7Lpj6odGWg3iF>L8!k5#>RV4JRg!usk>^x4sN{F6P|3hagfN3BGPcA{4QwlA2rE{)f2Je7ZX0SkzG5ot1U9 z3mMAZ2tJ8I{)@bdyduwit~S&R=%KC|Cm2_LixEm@%&p~#L~Yn?sVA2_m#LX?3o_~r zqS-51aL>RI%^^u00<%7IIIg^npMQYdPPcKZN$_O!e;b}7BkuNy^^F) zRopE9_0viCP6qff`X_Fgc#p#V5yJ9NTDm(laF*Z{9ahY zHt2h{^O2Tak8@0ay&8MfusyPYhZ?TM_X0MQt|-Fe0(^;vU&$ed7dn{cUY5w zDuJHDj2U0;vG<-MwfykBo9S1iF-vAOr^AA4AF_x(9inNy){j7hFg$gHwtS>eoDiqR z2`@*`dYGwPliB<}k(P;%;7Fo~B7+LqHZjm>5{-TyMpK5#=r_=0G^K_b{rZNc$2-%k z%SOw#wP*n$6~_lo^WW!4wQX&l59)5yc^yaNVF3!wv>CoRh7M^Pm7Q+uALkFD+g^A3c>AALA46* z0$>@j_LFgE$Dd0*sF%2?Tu(%pbIWPBo_a9RgX7|`_&Fv4M>cz@MS>^RV#h#^T$Upj zRyaQ}p@M(O@4&=3TD`GW38aAM6&Yp^%9d>#Ntmpxr5ZTR|9(kAHpx2ND3z0aPt5g{t-dFmpCog}IhFC}(v9*8HveFpQjp>jc`46bbY3_*@l$E=nHm<;KL6FN=L}1<)h()%oT+N$l z4N&auG(U@M?Ve_}=&eurW?E;MaKd686)2bY4@GQ;KGi?UIyi3isIIbYaN;2_Lj3GX z5`VN{nMoi|3bHY+Ot!8f4YHNTdjNdKv_7{5$koqnSBpvju6xFxgF~%H1PlnOSodI8 z%>oXEf*{Q{;7XdUk3+3j6J9UdfIz2t+*wjvK|TnBdNwCLJTk-DM0Os}C_JH;3;&gj z&+LHERA+fw@)7C}#%IQn681rQJNA8gdq2Wu(MIP}=*hA@oy&syW$UM+Iv7e>tSlxZ zs3*_htj@JtdGMpUTcOf$PhMJd+gLOf&LL4nspKW4h=zu&*s9pIe&O9q&v1!08dFa5 z(9>#;hAM{Vuu`Y`nQ+zyjXGnNNIHd zJJ7$g^u>?tTK^9$d~(qu(~R=ITWDs&Rhi0tY(X&V$mq#x)Orvh zYel+sZUy4g()dfDHz9OIP&cf^Avabd)YUYuutAA4?%x|x3eJ=jxAO-lO&UFKfNbM? zk+g^?YrpXkp&5lIo#`0-%6cBZ(k>PiMYRn6>({<(e)pn%8 zHke{`wz*@pspaQ18J1F;wo_K2nqOzMwNPXZM`OlGhfjxN52T4pEl&xgE|_5r%(5;( zh`1u6f@f1q>DHW9>DIic467WMx;ig0!cF01myri4$E9uByo5l=`5MN>013O8ENVa@n5AiJfXkdu+ zegyk&U_@)>fzt`O$;Lf@;PhI#kZD^JQ9x!<$QHpuGG~b1Y*l7RBbrYgH-BdDW_FkK zpR!*vJ4+qgv7oGIY4l;1meo$`bePS`dPMr;Bld1qn3U_uDzlndX2@kfddeQ(9pN6O zR%+}xSB=hW8;8MkL!5V=52V91Xy)LUy@+~q{H4SR81L#nww4cvU=nxvU>4HFnabg6 zqQ8wnlHU>|g9ZrSi}~JkJOMRhW#@^EuSW z%*ko!NY%>v<20LE>2TlXTOgNR!5o|!5d|~zeAvf>fgMT+mSkiiM!^gW{ozaVyRO>+fyhEy%uBgxtx{fT34v+PJ0D=^B*O-qJpENX~M zKAkgUBA;L~lPl-Em5wzaX~Rq%yE0@_b6QR~miloCwIITU8Sk)BLkFT4?Abc>bCF$1 z53^uHiOC-WSLqX&rmQKW8V<5`JsE!+JL4QoTg!>pw!8{J`93j-w*$JNnI9$WE#+qN z3Rfa6E9s_;q<%SbI%L}V2c{%GZOSyJoyelYW^`j3uRowNN_A1`JR@QlQ$|kopq%Tv zBQ%@1+hnjRm3QvNNEcsknQ2RfxY=%T8IVPefvnr}0&zMm(|9&!LTHxKNErdt8E2(( z0`ptQx|lYW4D6p3N1E~{s)~JjHc>auQYtc)6PPWWm1HkE+9c9&lnxcRwR@nUkFw?t zUqx+Q&&cGH{C=`+Rh1wJd}LoFyH#(@Lfiwf+#6P;W%0=ztya^pvF@!F^J+bTG@>|a zcxrVSyU%QTOf(uhRK~( z9XagQe+_BUubeHsCgwLTyf4mcg69%(*D=rbkCT-=Ju{As=>{>>clv!o6Zh#%Jc>}h z%%Dy+J|dU=m&d(EXAu)7O}skzU#F8i$L5X93Rj15OD|N)YkIM9|A_2VFIoekriTpAs9&nHfychNdE@cjnl74^tD-Q0#^x3G^#MT$P`=TYI7<_(L} z>WSeyXHDy-5`--@ERBv{yJ$P<6fr1mW|LOF0Oj>6@%N0nmEcxw(X98abzJi~TQ@pV z?9L93j*RS!9#u@?)*z*46;(H`VRa`k)0j5mN!E2txaF&cdOhmtrE1JTXCP^#-fLjy z7t`yRnV~$54t2({n2W~PHaha&B{rNj)z|hI4x8%nle(K_s=BLiRXwjvuSYK6`9>=| z439ld-L+>KsgdfdIqm4g9vK@Ru%w~9dn|u!lK3&(HMXY^_O0-IyItzxsqL*{_qL#NU}I zC%%cgak(%+@x9_Oe94C7#ETAAl+(fR;UrSTyL+oc>_|?luIo64pQ_Y8jA=ZZCY72s zW$SKtWh-~HCX+i$34Sbfa`(1d(RI_XR3Q8g%~X!ls~K2VPCJ(H=bD*VdJz{5W}7GX z5cjgLCr7uKgEwvD_+zrQDAY*f_r7c$aWGTqIHxshHD!3SkKQ5|K$!Mc1@D!=vXxUJ z#G&k+DbbB(dZ=s5j0klMVx6Z2OjtO9szep=2tR?%5p|y;Y++TJQ*V;EN$B6hAPGxB zE$Xz@`7qD6p|XjK+D3g$xt)fS_U!beeF*ikr#2H$u;q^iJbH6{Lp{10J$<1^-4tDY zy{^U&>hWoYP1*Jz^|Z07sZr9cS#0N&a0^xOA8tMlR%_RxT|J3ZV+GBi)_CF8y87>p zt7|t}>tTj^&XJ*vKdx~xuIM}k)1i))R0Rw7@sj^C;H`Qh$$+CZ2Hbn2t^o_{QEM8* zx#W5coyBQs=rv;PA8m~;lksT#Aqx;|i}{n)`t9WPtLKsnW9wFuEP8-lxXKb;&!V^4 zu}6D}PcUhE`<^MBlRvM04WoFv)ia21l(1WH_nMY&@e}aGg!jKF#|D-=JyhJvuFMGN zbY@IL13YRB2&>m8USpq44~qX4HHp8Sru>qcv`-DA`k|uOh-4RIqVAit;$I4jjYXlr zsujUYI5Pq)DgU7>VxNm<-D}i`zo5?E{nffH(WoAyCbfiHSFa^5jiw6mmRL*y@dAWm z!in?(yy)=Gj3#1Vc4$UhOD5;6*A`E6&bkAV!L@1?PHw4dQ${^%jqFdvdme}TNZXBw~eLc ze+laMAA+8#5wxkEpul?6WT1Ysgh=&@>sic+_(;9^-v1h@Pq-!38mT|Cz$b#!?{Ka43=MZP z)GQw(-*!0W-zQaCwqJ37ua5A2+saJM!yOQL>>*74j zAQQE9=d@!SC+bJ5)Kd2h@+D$T8t?J9Q=P}slix&Ok~A}35{9!UXT}by97ck9g*&T) z|6^);hZFHWT}yBz3C1GkJV8rYYBDWl*Jh@PkFZX&I`%ZV1e|hry(3&=>CHPUc zX;yn_>|5;Eti(XmTSS5*=}UAlfL;BFEjY_{oMHh_cJ#Znjc-eAw8~Qq@DdyPB+L5x@JsANZ>U0-%ipD3rwtE-Xr06jiNwjod~3Gdp%~_BL zg4UdR!CP!wUT5hQk$s)lvFH7F1mX6@td^yzg;f%|+BM{H`kUu?7hyTht&ZZsZ=P(k z(Ls$PdJ(s*k~({e;{oe4yM6b&Z_sP2O6pxXxol1&r`f^tF%@_?pr4EUMV>Fb*KR&C zr&Qt!M>u<9cJJ=b)Z?8~k9SIK-VrX|oh)ch_t?EV+=e%T;aic1;n|L**hT+9z z_+_?iPIGY;+c+oO_|X>ZxP4`hiuiL*^MNg_d`@)t{MYMNVj9o8D>0nswMz6?i7OnN zS-ZJC$BOlMZ@xyd+`LzKUgQ0OXVBC!Ysg$|(8-lf^R!o~g+}9CH86jXtRS4g17vo1 zZfvV)l<+RnTq6x7QgCHEHnK+f;VlOuPlq9m@N@#38N8bzPnB`Xt9xb_OUn<9te_0O?U#$ooSMxrJtmuO9 z#&Y3Z=e!w;q0hfWZf*`tvcV6Zbh56ehlaAT?Xzouzy!s_d>j`;Iz;M2kWzj3Pk zh?Gq061<9J(;a=l7C${9e6L=l=NXaS7=7snpCQNEMr_Ko_VNb?;2%A^|8$t&WU$lg zFL-(bW#(`6tiys9-phEy=-$$^!3$a#-l(Lb?gdjb61m_$$qy<@-`c5Go9wz3Kj_Gx)qUVDSib~00D~7RTNL2`7R;{Y%WM>~cjpIsAA5HXy6?~4b{-W;4X?wLN+M;v$QEn3l>s8w>a5MNMa*My0(d%FSHb3lOo0c>W ze3O^swCRlF6JDN`O|w8-R=(tEsoUQyWod->bcO5;4)b8Mmi{b#x`_>6_H<~_i-f#@ z^A7mam}yHdaGXZ(!)tn5u6J^a5C3CYgv7*2O&r2-Qk}=|Y zI}wb?OI1!!PcuGcxIyce$5)h&?D94O_ffx7+T0E4>BgrLsGJZT6I4X6-!+8pn3f2> zzJ1S8OHa}7)G87kywb`0+$g8OOv@L0fBlf!Dq-kDwtjhxG+_fPTOQa+0rJj8^b-jQ z)F{2>N#5^M3(ItlZkKDi%#WC&vXs+o@q(7D%`*YRI&yM)A@7ZiHGO9j&0{zPimIT# zlVC-b`p#U}SiH;22U7c-aGH0o=k}0fc;(i=?Ad49d&@u~SN1PE{LFfP51!Ncf+Riu zB=9Z%Wz!0?g5O|ZRSY}-;WI1wHuazvpGyoS|FF}AJN!Fn%{n&(=Ot)UvNfff@2ebp-va(uA8e; zhdB@R4Tp4``h+1KMq=b|z0aO4>L|T?pM6l&(bSA6(&{y|Z<;qUdyz5L{)j@oY#ja`=xS%t<05QwSo&1Y3ST&;@liB!H zar(QMlAPwI&$IQbI+*?$jUW*ZK(VM&9fDcqs%*>fYhdHYGh49j%(UtHl9h^iJUHQu zbS~i4=g1noz=H4Hpj~N^$pKBGN)yIu-ayELhRt!@kLPXu&TSH>5*k&)yLZT%MIa_+m2U&*otA51CJ=POp0!fgC#!O-;%&JTPP4x%$1}89m~X@qZ@*F*(n>9;fa~mT!M0{ zYqsV!bVkE1NOzi#Kmd&c$17cV9lPC9-31EsBGv9woNxoz6g(Z}Fm#l7i#eZd-O|p> z-sWYx_Ec7MY2J6}Ms07gL}jS>15=b1!886MCf`cgYNJi(eO4zS#9HyR}8QH#U5KTGyVWcxAqcL5X5!$4NUB7q6r_J{ntOC&$b~2JZhZK z>{+I_wTiq*cy#?x%+;lE$aczOgjVB?O>Ifs_b1D+bR~bN*`f?Aq)ANfmTg5(GZg754hDn%!7C+Z@cP{@_!-!NfC7 ztt|h!_`zRRlkW5_T4%{iwGF{8)bJ2!M5QXjO`aLJnjB(oMGWYE&DHMrIT!X6%E;-} z?Dlif(&1_rR-Br&?hnoI5mk_w#t8>;iRKF^swE_fmkmG}gnal1d#N~D%Kn3$C=PAW z%}y(ur6>+F1^N;`uYLYvvZC8@W8L%3q<;22fzJnvaUnM}Rm15ysv!^Jo#y*Rv_O{P zyNpGp@LZ<#a3wj=X1=PhN7s!ByA39%IeTRdRRww}s4ntZ&1_NF<#nn0^_=QP5sSh% zGQE^NxonjvnXj{(>zhg9^*!Dj{6#5l9c#VOB6eh(H}(~;vL7}sHrX+R(WWw*0z>Gk zgUzx>486pWco&8uK6Er&6}mB=_}luB&vlp+9h=%%enlOf z<}olB^9@Dkm_pQ+?79z^3Uv=X#MG0Hk~ zW?y^_!dAscfv)+lAhQ-Zki$}x7YRaIyIAH6%`ATswKaXUbzZS-E8+~+^i7KHS>Vyv z6VitZwmVotiq2b$W647?)!;T+kCa|hi7vMWY6$YoygMdLF=Fh^lbd`kM< zW5RMCwmHqeFXR1r7Zobz%XMi=ILW6f$x)P{bE7kOYt<-{kwNvc0WfJj4gz%!AR@H? zY|dVY#z5(cdZo<`!+7zdD8|;67Fk++=d-6@>>~a3GkfR7puW{AkJH=;Cdk%~6;v(7 ze2)Ot1Uf!{J<7_7&O9mkz!+hS0tJAcbL{_K^g ztsS`{#r$3^eb*rXj&qu?E#mr^sxQA53DumF{7Pc29Y?DqH-AJ<^TeAjk~G!oFR4rk z?)IbL1*mKHBkS~XtEP{+s1|VhboYK>6JBoK&hZ1jP}7EbKrM+eF4}KYrAL2cFTEUL zT#YZr$jg7r)M1zD$-`vh zc)JB3F|SZ2EeVwK@ixYJjd&V}3wq6iL~&j|y2b*Q`bsyiFEQmf^4Zc?f=BJ9*u-Wy zkKyZRJHzQbp>uwLE~!qVIHAw9&RQ+obX3mcM2h~fwa<)L;OHJmth$Q-C~C!Sz7o)B z8zhPII$;8yx130`LLIl7bDmfJgXe43b#r+0)?|-0eL;BM`v&D$Lx~hbe>a*N`vLETBHgsgHu1o*P?( zDer!z*(P{`_dza7Z5t?!snluy4%DPIPSY9(InQ%BjTdmOaa2)M!||6t*Se1~c=Jhn z8fuuviNE)OoK)pI#ZYvPb>7lU$~ng}wuEG7o>RpqW}>YUvE6P7avDMgiSvC+RWq~& z6=IzLMQ1_^-%Usq@g|j3Cn3kfvbZ^G|H5%Zi&gC4mRVBaS=R2g=oE_J9P?)I$P7s| z1}3waT1xFX>DlNwIcT~(K9yjDp>-UbLM~;+uZ_{4suYAI-3OKI=4-7jBoS>0%c#}t zmtC#41qhft@_TBH?epPPY(#Cva0I}16_lue-hl$LR0S0(s3f51nt>nUH>tTqh(~S< za`||rI8`q?yT9Wm zUjjfwVr4i3TE%dbTdbSM3!AtKUsDUW@j?th;~VD3tiV~*Gt1Mdhf?iJzSU|!f=)&r z=d{1&!^P=UQJ|nTFWrF~3%YIvXpyWgr!5qb{G$rdy+j2z9*0G734QXJ?TzT+?O+O~ z4P!_OUfozhJm^xV)FBc_)l>{$fW&D&LG>>@s=na)Ed*05W9PQaE%+TycziAsxAv2Y z3R%Y1$e1aGcrD-Pm-PiI5?)ggEa-+-oVpvtIx;RI(C^A#*!pPD=}WGru7m=RZ2*(g z{PY~w{LQ@3cfWC!#;K*gymaksBGt9K#NK+djr908?6Wt+63Rh~_8F}bz74rJQ_s`< zWhzgnIEuI$5uFuZY*2JdzG30pI!lwkVI#K5zKuA`3y=-l-rg2!sfIrsyQ2BvD+;6@ z8dJ{Wln)RD&=rDneLA|I@+8Gi_?9ENQ|?7S{V}Ik%I)%yd=#ehLZv2FOW=8TtQN`h zTC5hR67yJ%$!{eE=aCKjVFTuFS`BDf??0Sc;^l~Jw)w5DmUCZIO;A_lprMFK-GIlyC?jKMI^-NPu$(p%ud=7?RrKAPr1Jb!w{= z^CI&-EcmY4>;oCE%|G0pgzun~hGU5H5HHX)spzhsW5#zAd+!6z7+pj-nD`ci82xOt zoxraHouo29zS{sY2S~^M-rRy2So&p~F77;A`EEoDA5_(8ruPt)Qsb!Gf62!7)qfes zB-~%fj=dXey1$TH!Bvbh`z~hEt_11LMJ#DoXKB${Hgne??{klVMA5~cV@G#IO^xO` zbCH(;%6|fcIL$^d z#GiB|;s;k8g=}m|$K3DAz(C!QzSg1`PH<89ih$Gn;Z)e184-o&iXCF`ic?HlL`2ca zWl2S)%My|eSHL$<#=3isJ_RqvY|d#t?}K zpzv7YQR;8_PQRi04B95&>>2tTI5gRb<;PV@Ufz<2m#^cJ+0aufgPAyS`;od zHqDQKC@i15fm2hPD3#Rf-skMyJq7x57~nK7pTrXOwvpCMVq^CfN>Aso%X?dN8VADK zkKG6Iy!)whGS6#Ionv!Y)V?vsx#&rFLOYQ!6#MADhpQQ}LuN{P9!rH^>N&Ra` zWhfP@dXHM_afYK?Q^P7JpE4Gf2&B`njIc3hGnBH7m{J~Ev4bDA(uYpr=8a_Ee$+Y5 z2pUKi05b6XFXenj%qLL8sbeY~dELog!__hZWcCG0(PMBxETO z*Ep)Sr9}M&d;VjybfS!HKMY4r=9Y|L-yZJlJqm2#mdjYPBW)}(TpVc(qEsD?M#9u} zl;OuxvXIoDMe2X5|A@#qD|gg>?kL?Z!jhv(Gh)g#M;(Tva=3ZJ*|$eJd-nznq{o%A zW*@h)_!9?rh)AhA=G~!zTF<WD+ByQd?_U*@=z3&|1 z<~feAW~FUfpF&PG?*mHJG4H)2Y*gtc$uOMVEFB=79maZSc z^X}m?ljpVJGHDpQQ#P$>2D~I&MR|D{bvvi|W;UDkNwD9inC-AJ@z7ogX_>=b`Xnr_ zf@5vEY}hVay-xI7BAn@eGStVr@6!h(;t4Ezal z@#U%%S$VF2F zVEsP-yvsd!!D)UeT~&FV=WLY2%hT5*3-5Z&3p5_d`W3%OLk@s(_}QJ)F`a(uSJ#{` zc;0Q!F`n1VIna;2dOBPBIi1}+-C8=F&iu|qNSBAQ?q^0zZ}w%+pXn_9Ig}kclhn9* zUus~S({$_0^p&O3nl$!lWsAhTG_I}Ym989~clW<+p4a+cUzNDR@nS5Wu9MGZ4f_mo zKa(H(L@zf9XyNvG?-{(c{*Tr7rdAIE6d0vyfLM5(nT$T6qcpz{TYYY* z)TIwbOdIAr_kuJnmA!a=s1%yYZk#_LjY?r}eKAOCo`PIB3;Oa&DY7@SetAIunM@9S zvKN!T`cm)gPni#Tvd9Z<^k4AI+MX=?!u001d*T__JUnE0h$BXup+7IXn!M-p3mrtg zKm3f>sCqE*>(=_;(QZ!jb3ItQuTSVZ@yyjE_V?Ez`n&Ln)BIu*YxPZQ{W+e=Phx$( z`9q4gv-nFdN!z-!%1c9~_B~j{x2K!6=tJZmbt9+Q48AL0D0m??t57 z@e4bPb2)8(SLSnh+`vD;^4Wm8hXp-vf5Lmfc`B2YnxS=+=iPmI56^3Td0PT2xjb0< zIi87CA=0sU7G9Mgjp)k8RLvat984f3MHngWZl)@kOJ%i`OyzmEl3_frDe2dhnXU|$ zin_4LS3;y|UDz{M5~RPoun(?SrPn*Nv>y_r_%3Ym5A8bb?!v{^jEvWL-rXGQcwTD` z$UFPPbm`qVE_O{E8~bB~W&ca$!&BISZAB_G<`epHB20wMIuqXf94}5NCJ^(dT=r1n zJ8r}vMJjm)f)&Tre<)J+{1B(G6N%EQn?b z*j_r^iF@kISk~j`2#Xg{af@!fP}`zzod|Ef45X|i zR1v6a(U&SYx9IJAH5Tn6N~`Vwf%+D`NXY-N=(~>GqK`VV_P<0}9&Q2^x9B&d+&=0T zOL+4IUYu}|KwXPISIN0WAJAhE)koWi(yDupKz)nW5%NDQ`n?0U=(7&2#jg>T6LwH> zi}oVrwrFHW!kb^^#R*#o)U{}XO3p1hd8fvrCyCOkdzwIfi^dYNo<)a$jg}t9FvqXu zQbG)S-?6Y$`wn%-Mhl*Ij}0H5*T%-bF?+^bEf=LV(JcJ>E7I>#tn7N86u*+i|MryB zI(g65-~2pV^=`u_9$llgWE(%XFgysSxiUDMovrR5{SnTb)zRtGfRpKk(#~|Q#E;>1 z^h2cTcGjlLq_G8j6i!y+MkCGN>zUG=+l#{vblNdCHtS|fDLc74 zY#pGNZ8F}A_>0uobjN61SUvEY8|0I5ctKj1VH1R!F@}6tz5JMZ`Ofw7U$3dfpE7Ju zmp@;UTFwCSFXQ<3I1dS)s;0;4k%=6-hBi>$ryV3Uf~+>D(et zg&kFB8WRdJe;T76pe#5*E$d}k%3lBbptQRS8-M$b^g%Eiai>6P7rf`fogre>Rtr_p zBwO)9vQ@W{a=fa}$ZJ7xf8@9P^K=l)zGpUn*a-XL3dcqx_UmQ%kd=#$H`t76E^ z#Ll)10evLYM+BnlwJKzCHMv!Dha?vdhF0qiEM_zQ9TVLFXh%_FF4?n7>Geer z7Du?*9A{i#dVL0l+R}V>_1`YBXBS}@TGOj=JB%g{tN%3m@k1!Q-E(h8p3_P zh-Ex%-}LHV51sQC%2Rc%Zau`zVE+0qR`hT~z^4mgH}|)?0WIkD$3hnCjA_z%E((;d zl~3h(^QwhxhO@OaV@M3}Gw%WKJ2TV9oq~jlvM5)h~AEMh~C*pJaQp?gX-KP2WU6R;Z z+HSO;mc-%G9HTwLLmcEC9!CrbE#vHqJ;c7=zjWf+%bo1y9^xaB&!IoT7N>bF5>9g- z&sH4r_7qBa)4?6Xo7nM+ZX3(1^H8T9R0W)&(Xza9K8d1qVJVHTW|UWSPZ6-{s`6FJ z6r_IwYq{?GPB07j{O~sQ$ot>B9>7z}zgeRf8%yqJYzAP(v$={IizvOR2U1VE#-DCe#!6dhW zv|0+F?{9y5k{2pKTMs!M&^zO<2;7}^N^H65>l1TDWJ7^{uT?+L~n zVNPQr1=ZF0_AeWWU4r(ZF;k6)t^~||vRpSF$9SZwTsQJ@d#GNFi;V)NutHz1!;@G6 zJ``@JJ3_5GKjiZL3oAm)bq{e?r$d2N_s?VYWqPrNmJ?0{3 zWF`Ongnxd)KX35QPy>~|$SH^O&yD<3sD*!-V>a{8E&TI!{`n98+{Qn*`wGJ#Xa~>i zrybnC?Ej}&=RCtq>V}0mzJpbI> z*zWKV<1BmcKjc4{A={qKgEOvfb>)?33y{ZYM-`!$0-Z8~4(s?Y#@Mtn?I)%tp)~bi zC^ot+BA*>Uwu9!j**R!FNu6SU--B@fd&a{X5ibKUbd%myO#-PV6 zch!WiQ-iG9zSUQZXhg4iIWFI^pYatFq7tzd)>xknIdWkcerX}{E_w@$M|eYXv5%L% zgF);m=Gz}Lh&g=~OsSvM+lfETaqgY?44!w#YomBxi`ND;vimj>ACY$J?3qo(OO`L5 zf}Z>yj-`J;bUGH`1N(uqz+pW+1b}#y2bd4>qlb7`0)NF&LJYX*KNvOo|G@=g+&V%`nllDA8fXDQchCk|XBu$U<83S3Xc5cnOIR>wtrz`*B; z3@-%(xCBnDF))u9aFM*xL|9iIJy#@oHj=m6q6)kRBn18d;1bxRM&L!_z(oQ}iLkD~ zV^j=*y+~l9DzA*l6!Q)MRi5N%jqd`f9^66!DJPpAc(G&oj+O*DA=akadk2Jb$m=C5h+D-C|C!QC1x)?ls%yJ;{` zgAzgL7pihqfhRP$PJ{C`I9`L#Xa=}E^@xU#(qNzly)^iz)`Z_{@U#XGX>bc5=@*JM z#4-);(x6Mx_&m)68tkgUd<}l9weel8shVo|Wg2XyL6^L=*{Zy*vqi4og%=X%ss*JQ zoTkB_Gy$Wv{I+@m!!^81P>VULoL@AgYYpVZ_W)AHvuSf#;h8oXuE65}+qpE`MHF!*eyEV93gDW(cr@^5b?4iMM4$=R7 zHN@R%s^D)lctV3aHCUj*u^Q~D!S)(#qQU!9H8~nA)!+^duGQcIg4F*rHAGhphHB7P zgH=;hfuCw{zXrEz@L3H$uEEh7?4!XB8f>aTL4&_c*2e!4BdS;XUx_Ri5d*mpsxmRO;Qznrop}T&e>u} zIOoMjc2gmR2(|=@9J=tOjqKL~#fgSnUMjw%5g-fmh_M$0iTWv{`>0ZhoC5BP!$l#K zGPo$tuIR3^w59sc%fL1Js4(wh8%rY*$HjVw9I zDnZqEn%&>3ut0;Ruhl$WSmX7n((Et2pyqSFP~k5c{x=QgoLBLA=Tum5R)ujItg7UB zNw{e594>}f?)FgaFlqeZIu=AO`E6KT$J|9e6nMI*gy;~G3R{MXd=pa&NSjX6f6&n; zCluwbi}>P@PlOnba|tB)(-1cywMe!7X1Lfc+5~hcCsrHAWoLeNU2=y#wT;-^uRgkf z(Ei-wt%Kbh2%3cozGFQu!cJpzmVPMI~emRWh&^9rd0l zIWu{vm?{&zh2!g$Pgy`pYaG<*oyB;`TOoZ5O$ZDWNk)?}dyBtuz2Pggq z9Xb570dBEWr)vAz2(fumVm)*=@@N-+5reC0jtn7U?D`v)}9}2G}#&i_OJc`{eduaR7~plUTNZ#VjPbrH3M2!`9qh*;nbP(GHm-KXNhChVW&>jWcMcjd8c=PAuJar|&@@n{t95m-< zi<|7PbP!wWE~4}<(fZpfJHXn4o?JWm&7)E?H#lbnMgoLlc_2M?u3URkM{e5Wj$%vk zpnWNT4t2m({z^wNM$ERq7Av--_M$IZ@Bvjt`da#Js%3sC81n28K_;tBkz1=+KsuM# z$X*>H>J6)F8M4W~FctVH8R4!aZT%1q>oC$SRaSMdfRtMV0 ziI0dD*#xBaPm}1M!fzNyYCd8Psir}&1f5#LEn2i_+LRf<$6+kdDi%8@e`-WVYAVqt z*1?S(OSqKUxZx_D?8aH9MhsU8vw@_)0Ek_n{*k3T62DY|>Z^J6N5JTRHme~t_A#P~ zz_VgJ{}_#t=*GnpZWC~om`60au7t})G<2w04NeWE3hdLnh+V`5_7}Q{uf`5-hRG}e zjqZdUSJ>7RgCf5siE^w!#8p7v~TDtwn=ahnk*aMNVwQs5IP28Inzk%=Sxve zIEVfBu40_MV}jTw+62?4;GWr+tVDbN)BkGzI8K)Ge~Q3lu6~i_+bGznd7|ga|fiZC4U#Z{Jkcw3ct2p<@@On7%+B9Fm3Ys;zJ8(Lj zsn^Tbmg5)UD@0856GBmeR;Yk!j&HS3mA=xew2fyT)j~!ss{5#xW%q@-xP}c-Eq>BI zIT6w28VssXkgY>eF^Z@XPi1jR;aNb+`$hT)kzJb#0dq{%O{#n=eM4&o$2J|NL-8zeO0ar);#P{_H_E+&cX+LPQ$$SobB z>Tfetv7}nfV zXnqVMXLu8i8wh+Z;lV&OJa13!A^Q8c+3XX0h^={h6hQxOkd};Ab$asY9a9P*>68J< zu6^Ux{5OD<7dnZAYEQlG`>(Dbk-(tx!4)cLF+{9h}a)Gu6jnE3wQ|!E1oT9E9IM_wDK@_^wlj0M?dok}==VFggf@;U<+1 z`*@NotkEDq(zOeaM#fiwL|=QoDuzDO5{_@| z3`T;kv?caudy3tBs0njHP_WegX-|w1GB5@CbI?M9wrGa!1SG`=wLC#8Cy0?G90R0y zzY;KInaaBtkgf_q;{6Jcj2w(ZBjR}oNIXpo)D6wp0>Q`;=Yb%C6U*(3dWqo@ytlcR z*oWW`$hRdU17RffcQT?1O7qsM>79UdC2z2|e?+TLHMR_|BlsZNYS7a44`9It4fiTX z36F144W0j{nm-RnJYlrLO>4wgxVY_t&>MFyO(J{=)APLF+n6}8Wex)?m1}tmN7QBt z>SGW(=QkBQPV*C^yPCunqL1jBk3F-|6;Qbf7~BVIJ1IA{Pz`PcNU115YWl8#G&*0j5e$ zCUgQMy2*g3uka!uHOOax-0{>!yZQ(|L%nj;Zs{%H_)I9neb=N}U4yWXNEQ2zpq`cu zd*Em;qe|0_<2j!1_azE&^}3+uRk>aQj`4)QaMzC5YH;@7Q*km!qN6m?I1S|DI)9^z zyM0N`*N)`{(3XB%OU-Z}q4+XZXWTBI*U8h!1I?Bytm3#`G+Mr$iqMEkuAsO4;3jhC z?YsMkBe}5`<3wQ!>?2=RYknwksQLJ-s^RZmQ}cc}5D7vI7SOe^;5A3$Ayf(YiC1Xp zp1@14tMto%)A#|Y4bK7+tyrWNiiUgHSM?QBrJ>F2pY|2Ii4MD%hRFG!p%}#~8~-#x zF2$y`alL_)fh+x6l^1)PlM1r|Nj~w=6%0tJNI(g&vxd(Cq&^hnBMClT)HrQ5>Jik~ zqp{GqPor$FINI^pH>ZisT4di5gr{)3f&_QoemV{B8ewj}ktVinOAAVl=8P&$QQSk- zps|2-g*oj#(#00Bc`)mF+@|3)s$kkQg#LAK2>omF_Gi+?E-khoc-fCTkMjtEJ8wUo zF2?ehq@bNz@m5}HWAp-~YoV6+<|E!4BVI2Uhc?a|4V#I=SC5t1TNG}Tcod_a=-V}L-yM;9N z6@`ts7ovQlul-0rv3*k)?{RE7Z{U8umHmD{@tMY7U{0hfccf@HwinG_1tZ~wQTEsS zi)}*!v_ejyeYhAZ!0;Rx8au$CGV#M396R9*MHWph^6PO^Cy_^S=>uf3g@=8&?e8K`0es)$X#>&gR82*m_5){V=~Mf4MfnPH3@ckL+z&7eD2 zi*9|MD1?UN9_Oa3n2Qq{;1X56PjEdBAh)zZK`lakKBjdL>TBWJ1D6L}ZY^9kaFxJ~ zu7%43t`xY^T9p&`aXDTicab~HpBK41q5?( zzl?OvaXr#>Y`?3yAbf;0!6UdYB3*MXk96%bdpgU11m7d^#bGzTU~UYa>mprqqK`D4 z_V4I`9Z#CbVZV-o&1B6fe*iYZjzh zrRsVMkW{i_gEdxJv`R6-`upZg={$V-ee>Tlv**m5nQgzBZvR32cL}D1eW*=I|8{ic{ zAG((g$-}BTW-K{RFc4ONd=U*&7Z=BPZU`^7p$WV~;NAB#7_!{y;MSSWbQ8RwaCaQ> zQ?%UuFhi(>U?vA! zkFu-rDR|E@juYO6=aBYL0lxByod;<+dE9z4KwG3XE-e1ku3HMLkynRre&)|1_{<>3 zUlS^c8AoblK4+uI^IsTq33>hmb>#UWJo5aPc;xv&Hl~bh47m(IoInkDL!7k|HRGdS zbN&yopp}(#oy;*oc!9^e43Bzwvt4`^sm+zxiZ;r#Hhjy~%_aVY`qrZmo=3(^>^mkS zp2x^c{r7wx$ix1VYzKcOqguoDUjf#lw7q8bINIDc-xPL zi#j8Kr;rX4&%l}aXKed0{06Dhd8ounKA2o7(b}2F(`z=g6TXZp@WCi+oLcu!jDWg$ z0J-?-V44;C{e_5Y|4dd1~!r0%|$Km@(Z=lSp<{}p*y)m4Mro@>OY^%=k zcmqC#kHAr+(HABX9Memj$Gjj8{L94zpMy94$LO^JTs_IhD?SR7$eXb6X~UaxT&J@s zn`2$3ULJFdxYS`AcySe~#z$cm#S$zOFw16;Kdj*pz^)?4JV<>y(6T|7Q_SNY)WroT zg%3j>dNgUgLax_PAHE0XkvhjiqvqgM*7M+~$s%vh!Nh5QVHnn3O=nm+1|LIel!W_G zsNOLdm`B>ExRxNRoO&&M2UX*H;jc*Rj=|-#ZTmZ*{@u-9+7!WV)L75;KaDw#v{CWA z?+bAC99xgV^++4#8CJ8$uXn;3bLkixJ6|DsXhoz z8Rx$iOc@^tNHe?^zU2G8a0sb$V)r$SiVdY<*|qFiyb`xMq&CXW-t+w^yk)*UtQD{p z8G<))i|@B2Fv}K@QSpLqL)?ngp$Ke8<z`}HiGv(R?B z6h7qpIDFgpz3{T{%_7IFLmH&J$SE4MsCfJS^!}bBFSa>N&i{fe BGoAnd delta 38445 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 diff --git a/docs/html/functions.html b/docs/html/functions.html index 0c91a0c..52a24bc 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -170,6 +170,9 @@ $(function() {
  • pfnFree : VmaDeviceMemoryCallbacks
  • +
  • pHeapSizeLimit +: VmaAllocatorCreateInfo +
  • physicalDevice : VmaAllocatorCreateInfo
  • diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index 5bdd9e8..445456a 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -170,6 +170,9 @@ $(function() {
  • pfnFree : VmaDeviceMemoryCallbacks
  • +
  • pHeapSizeLimit +: VmaAllocatorCreateInfo +
  • physicalDevice : VmaAllocatorCreateInfo
  • diff --git a/docs/html/index.html b/docs/html/index.html index 9e8b311..e6f3b54 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -73,7 +73,9 @@ $(function() {
  • Lost allocations
  • -
  • Configuration
    • Custom memory allocator
    • +
    • Configuration
    • Thread safety
    • @@ -295,10 +297,16 @@ void MyBuffer::EnsureBuffer()

      Configuration

      -

      Please check "CONFIGURATION SECTION" in the code to find macros that you can define before each #include of this file or change directly in this file to provide your own implementation of basic facilities like assert, min and max functions, mutex etc. C++ STL is used by default, but changing these allows you to get rid of any STL usage if you want, as many game developers tend to do.

      +

      Please check "CONFIGURATION SECTION" in the code to find macros that you can define before each #include of this file or change directly in this file to provide your own implementation of basic facilities like assert, min() and max() functions, mutex etc. C++ STL is used by default, but changing these allows you to get rid of any STL usage if you want, as many game developers tend to do.

      -Custom memory allocator

      -

      You can use custom memory allocator by filling optional member VmaAllocatorCreateInfo::pAllocationCallbacks. These functions will be passed to Vulkan, as well as used by the library itself to make any CPU-side allocations.

      +Custom host memory allocator +

      If you use custom allocator for CPU memory rather than default operator new and delete from C++, you can make this library using your allocator as well by filling optional member VmaAllocatorCreateInfo::pAllocationCallbacks. These functions will be passed to Vulkan, as well as used by the library itself to make any CPU-side allocations.

      +

      +Device memory allocation callbacks

      +

      The library makes calls to vkAllocateMemory() and vkFreeMemory() internally. You can setup callbacks to be informed about these calls, e.g. for the purpose of gathering some statistics. To do it, fill optional member VmaAllocatorCreateInfo::pDeviceMemoryCallbacks.

      +

      +Device heap memory limit

      +

      If you want to test how your program behaves with limited amount of Vulkan device memory available (without switching your graphics card to one that really has smaller VRAM), you can use a feature of this library intended for this purpose. To do it, fill optional member VmaAllocatorCreateInfo::pHeapSizeLimit.

      Thread safety

        diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js index 48da8dd..7e837ac 100644 --- a/docs/html/search/all_8.js +++ b/docs/html/search/all_8.js @@ -6,6 +6,7 @@ var searchData= ['pfn_5fvmafreedevicememoryfunction',['PFN_vmaFreeDeviceMemoryFunction',['../group__general.html#gaef2545dc2e9dd4f29ab9ba6ac6fe2f49',1,'vk_mem_alloc.h']]], ['pfnallocate',['pfnAllocate',['../struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb',1,'VmaDeviceMemoryCallbacks']]], ['pfnfree',['pfnFree',['../struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c',1,'VmaDeviceMemoryCallbacks']]], + ['pheapsizelimit',['pHeapSizeLimit',['../struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b',1,'VmaAllocatorCreateInfo']]], ['physicaldevice',['physicalDevice',['../struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156',1,'VmaAllocatorCreateInfo']]], ['pmappeddata',['pMappedData',['../struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2',1,'VmaAllocationInfo']]], ['pool',['pool',['../struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150',1,'VmaAllocationCreateInfo']]], diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js index 91686af..4c01446 100644 --- a/docs/html/search/all_c.js +++ b/docs/html/search/all_c.js @@ -1,7 +1,7 @@ var searchData= [ ['unusedbytes',['UnusedBytes',['../struct_vma_stat_info.html#a394d2aef4348cb58abf73764804b4f2d',1,'VmaStatInfo']]], - ['unusedrangecount',['UnusedRangeCount',['../struct_vma_stat_info.html#a56c4fb4dba646479180b601854cde2a6',1,'VmaStatInfo::UnusedRangeCount()'],['../struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4',1,'VmaPoolStats::unusedRangeCount()']]], + ['unusedrangecount',['unusedRangeCount',['../struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4',1,'VmaPoolStats::unusedRangeCount()'],['../struct_vma_stat_info.html#a56c4fb4dba646479180b601854cde2a6',1,'VmaStatInfo::UnusedRangeCount()']]], ['unusedrangesizeavg',['UnusedRangeSizeAvg',['../struct_vma_stat_info.html#a88ad9bdc2b3a98964a4d0c338c0c9060',1,'VmaStatInfo']]], ['unusedrangesizemax',['UnusedRangeSizeMax',['../struct_vma_stat_info.html#a10c52c0841f01ca704e8ddb1ea6a635d',1,'VmaStatInfo']]], ['unusedrangesizemin',['UnusedRangeSizeMin',['../struct_vma_stat_info.html#a07c508f42a4d3424bd0c259784a7f2d6',1,'VmaStatInfo']]], diff --git a/docs/html/search/variables_6.js b/docs/html/search/variables_6.js index 2b404e1..9113c5c 100644 --- a/docs/html/search/variables_6.js +++ b/docs/html/search/variables_6.js @@ -4,6 +4,7 @@ var searchData= ['pdevicememorycallbacks',['pDeviceMemoryCallbacks',['../struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e',1,'VmaAllocatorCreateInfo']]], ['pfnallocate',['pfnAllocate',['../struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb',1,'VmaDeviceMemoryCallbacks']]], ['pfnfree',['pfnFree',['../struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c',1,'VmaDeviceMemoryCallbacks']]], + ['pheapsizelimit',['pHeapSizeLimit',['../struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b',1,'VmaAllocatorCreateInfo']]], ['physicaldevice',['physicalDevice',['../struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156',1,'VmaAllocatorCreateInfo']]], ['pmappeddata',['pMappedData',['../struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2',1,'VmaAllocationInfo']]], ['pool',['pool',['../struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150',1,'VmaAllocationCreateInfo']]], diff --git a/docs/html/search/variables_a.js b/docs/html/search/variables_a.js index 91686af..4c01446 100644 --- a/docs/html/search/variables_a.js +++ b/docs/html/search/variables_a.js @@ -1,7 +1,7 @@ var searchData= [ ['unusedbytes',['UnusedBytes',['../struct_vma_stat_info.html#a394d2aef4348cb58abf73764804b4f2d',1,'VmaStatInfo']]], - ['unusedrangecount',['UnusedRangeCount',['../struct_vma_stat_info.html#a56c4fb4dba646479180b601854cde2a6',1,'VmaStatInfo::UnusedRangeCount()'],['../struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4',1,'VmaPoolStats::unusedRangeCount()']]], + ['unusedrangecount',['unusedRangeCount',['../struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4',1,'VmaPoolStats::unusedRangeCount()'],['../struct_vma_stat_info.html#a56c4fb4dba646479180b601854cde2a6',1,'VmaStatInfo::UnusedRangeCount()']]], ['unusedrangesizeavg',['UnusedRangeSizeAvg',['../struct_vma_stat_info.html#a88ad9bdc2b3a98964a4d0c338c0c9060',1,'VmaStatInfo']]], ['unusedrangesizemax',['UnusedRangeSizeMax',['../struct_vma_stat_info.html#a10c52c0841f01ca704e8ddb1ea6a635d',1,'VmaStatInfo']]], ['unusedrangesizemin',['UnusedRangeSizeMin',['../struct_vma_stat_info.html#a07c508f42a4d3424bd0c259784a7f2d6',1,'VmaStatInfo']]], diff --git a/docs/html/struct_vma_allocator_create_info-members.html b/docs/html/struct_vma_allocator_create_info-members.html index 63f4c83..629a078 100644 --- a/docs/html/struct_vma_allocator_create_info-members.html +++ b/docs/html/struct_vma_allocator_create_info-members.html @@ -70,9 +70,10 @@ $(function() { frameInUseCountVmaAllocatorCreateInfo pAllocationCallbacksVmaAllocatorCreateInfo pDeviceMemoryCallbacksVmaAllocatorCreateInfo - physicalDeviceVmaAllocatorCreateInfo - preferredLargeHeapBlockSizeVmaAllocatorCreateInfo - preferredSmallHeapBlockSizeVmaAllocatorCreateInfo + pHeapSizeLimitVmaAllocatorCreateInfo + physicalDeviceVmaAllocatorCreateInfo + preferredLargeHeapBlockSizeVmaAllocatorCreateInfo + preferredSmallHeapBlockSizeVmaAllocatorCreateInfo