From ab792d6a3d9e2c572ae73c91fd7dd4f87587916a Mon Sep 17 00:00:00 2001 From: saschawillems Date: Sat, 1 Oct 2016 13:54:50 +0200 Subject: [PATCH] Use sparse texture clamp to find first populated mip level for texels --- .../sparseresidency.frag | 22 +++++++++--------- .../sparseresidency.frag.spv | Bin 1556 -> 2464 bytes .../sparseresidency.vert | 19 +++++++-------- .../sparseresidency.vert.spv | Bin 1908 -> 2436 bytes 4 files changed, 19 insertions(+), 22 deletions(-) diff --git a/data/shaders/texturesparseresidency/sparseresidency.frag b/data/shaders/texturesparseresidency/sparseresidency.frag index 63660bfd..9bc581ec 100644 --- a/data/shaders/texturesparseresidency/sparseresidency.frag +++ b/data/shaders/texturesparseresidency/sparseresidency.frag @@ -7,6 +7,9 @@ layout (binding = 1) uniform sampler2D samplerColor; layout (location = 0) in vec2 inUV; layout (location = 1) in float inLodBias; +layout (location = 2) in vec3 inNormal; +layout (location = 3) in vec3 inViewVec; +layout (location = 4) in vec3 inLightVec; layout (location = 0) out vec4 outFragColor; @@ -17,29 +20,26 @@ void main() // Get residency code for current texel int residencyCode = sparseTextureARB(samplerColor, inUV, color, inLodBias); -//#define MIN_LOD -#ifdef MIN_LOD // Fetch sparse until we get a valid texel - // todo: does not work in SPIR-V with current drivers (will be fixed in a new release) float minLod = 1.0; while (!sparseTexelsResidentARB(residencyCode)) { residencyCode = sparseTextureClampARB(samplerColor, inUV, minLod, color); minLod += 1.0f; } -#endif + // Check if texel is resident bool texelResident = sparseTexelsResidentARB(residencyCode); - float lodClamp = 1.0f; - if (texelResident) - { - color = texture(samplerColor, inUV, inLodBias); - } - else + if (!texelResident) { color = vec4(1.0, 0.0, 0.0, 0.0); } - outFragColor = vec4(color.rgb, 1.0); + vec3 N = normalize(inNormal); + vec3 L = normalize(inLightVec); + vec3 R = reflect(-L, N); + vec3 diffuse = max(dot(N, L), 0.25) * color.rgb; + outFragColor = vec4(diffuse, 1.0); +// outFragColor = vec4(color.rgb, 1.0); } \ No newline at end of file diff --git a/data/shaders/texturesparseresidency/sparseresidency.frag.spv b/data/shaders/texturesparseresidency/sparseresidency.frag.spv index f6fae7bc240d4c930f562ed5ab50e83a55f75321..11fd7590addb14778d5f59bb366fc3add751cd91 100644 GIT binary patch literal 2464 zcmZvdX>(LX6oxy?geZ|kHW9@ca0QHjfG8n^1R2mVK!CVcYASQVTQ!+U%}h%9Wc&ku z@<;eP{84UIR{1=gZtGUcPQ5wjyl3gtr~4)o8W6zLX&r4%0P*?-x4Y}?qic$Tu)>US2)_Aqjj;RJG}7(RNo zS;U+=_C^fa+4B-MrzpAvx$y|Q#+m1l%Tcez`INoo{$Qisg^Kjh4^wf@{jJgMLHlXtJheFcvbS0m-^Vhc$&5VvDd5U>1KoF^ z?F>!=m$vt*o&5{R_73&itA6i7+u>F7y?tZR^$f zJ&lwTXR-A?4_xP9<@W-)Dvl6416K$3Zmk!P#>*e)wd_Y)Pk(h~`vkomz+s&E2UC#T zwPZU_m%SfGTF)~Ye*|eQdE>R6ublpul5UQEZRf53B(`tOUhUcV*OG30o<##agzX!L z+4XHSy;Waxu@7`t1pD;C~vAzYr@m$OM^c&B%^Ql*C=iv94{hn=p zm%X&hZtk-ECe5Fx8~66DU8fh{z#-uMYkSAXfcLBIOkW1x=Y_F7@h)FMH^(^7tN#I~ zv;M0CBYB)5q(`H-Jn3n@Igi`?U63zsTCg)6?k7rRBXLJQy&RV`P zZDXC+2S6^*?`q=yAoe44m$Q`r5XiZ|y7hc#ey{eDeM;-kA#Z{OFvH2T7lCv780fQx z?_56T=(`1S&TaIZqt6__1^JwF2VL&RwC`PXx$OT0-F;?w!S?Yfux1k&yW^jTw!WPA z8M=AdUPgDHU(#LOLpMg=+TPy-U~T8C-@h^D`|Yd%XLgUj5ccsfaq=$n#=+0j*Z&9@ zV@=Q9N?h*eb8I=^ntOi%n!jVtOb8o;zbijw8WwkZ?|SXLh}t{5 z4~d*MRh-pkw7#Y}b`lOp@Jq54*(2GkV$rmjW>sZ2=9@ODiRt$G2gir~d>m$Z+%MuU z#c39Aqc#7p^#@6KGB$NZl=lOlQ{F+Eq?vqObx+G@aXyUV(cr9;MzP~B$>&Ov#97CM z+kDhK9DVpGCtSDn4@bQ;Ivj?%ZYD`8N*}pat~nYT9Yxr^cC!NdhGRib(j9OY^RN#FKONo7s!^i zo_he(zd*lDc{prS811}_u_YFMN(NW9Ma5na7s#lETo>huhhNc+%*c}uy*xZ#Rc*5p zh-3Yn3xa#*F#Tar`+_|AI3w|k^5lXi9!$UB&@a0=YtX^;4}DFT`=nNCUQpKS@~jIS z=kX1P$>V!;OLJqszVbbKAOu(L5xMwa_*&S58o=Bc9B0~=CogzUuZpvAHw?HRV(Rj& z<*s<=J{SGwoqHT;-YQ}0<}ISXR5sRfmoJoy9?#3@FPI)K%jh4Nny$#~cU+mYy}ByQ z8sg|7`jM(5|1}vpyx$8BogVW>(HZE}4aZ*Sd;@ULD>Zu$8;&EEGl7|N9{S8W?&r1) z{kt^&XEAmf6hw7aE|L)U$y88@mt;5GWuSI{I-ny5pZm(6?^Ggq<*~`B zaXij=ZLuRhT|%sO$*v#P(2q+_O0Zm#T#;OtOh^_buO)5zYt{Z!LE3eqP%JI1=Sz)X z&#(KdFj=#veP_@pNVHhZ=g4W?bwgm ziQ80(P+r0Hc+kZH(_=9G0rL(FFA38-Rz|X79-Jl5@mNp96DlUShG} z{+>(XGZ*|0CFa-WxG&lZZtnPTXJ#}cVHwUPFviS{n#`Y>r7^Psv&d&Npf@b?!P$Af z3;cP%BKfWnAyQm_f_rm1iR(WNjLkDbn;Ud@j1_| zvE$FZZc04w@Y$fUGGqEe><8Mp2OMX?e1mY7Yf?H3|9S1$IB&6^OJ^B=5u@)vMwOX6 zzm(tu&u%?fluj(eyf3ijeIuQ^$Xj$ed8hSu;h8IoGrz>}4HAofWhM5Gz0I|5m*h(3Ixdd$_+zL3taf;-e@Z&_^M{*|4nzNXOASDgSWmt zmY(k0tS}tQ>U$y`E?vu<bI?sM+BeU~0`!So<#p=A~*hz0D6>UOzbWV}B5M{ZD>7h`ng< zbFe??pVi0}_BvkI?{$v+PT zKH7_t{5N$zj^b{c04-`{PGK)43cBT~aHs3Ff_OKG2f;UV)CSMO7xlxWIPPc0Ec#>C zVef4eANZ7M8g?eL04*>x0n-ndw{mz}m|j^0*|vTit|aVPP9KoDlIYSn?##x4iQAC5 zyWsxCrS~&ObSE;WV~%j&WexjI=%|^Q&dFE~ms6Nv&aP+fbF)jo*z`U)ci)=TgD1qY zmz9$mI8W(R)LxQJD?jyv@s)%}w4;Szv6ycW4*v!1Lo(+FQwtpa%i7U$C-Gq31&(}U z+VSzd&*+z#!+~ez;f>%NpVpc;SH)2ye(nV`JGe>VYuZaP>X^59QfF89l+I|mk2od29KV%1fypre4FT*6?*1#M+OgOK6A3N?7d>R@2=&vopSdqM^8?7-*WWV zQswmjKt?=z{1w>`-HY#`jNEA49gi%p?UZ|Lxooa^%cZ%BN!?Gx5sw}}{WD8=*Z*^! z>7Vy<{V(VY?=&xT{(nYwaqvG?J2P995eM()wxn}*ZZC!5SgyZio#C>*ys}(&Zm-1= fj~;(^ZY#p%M?=kgZ>uuCN&2F1FuFg=v@H7z*uHs(