@@ -112,7 +112,6 @@ vec4 nbl_glsl_vTextureGrad_impl(in uint formatID, in vec3 virtualUV, in mat2 dOr
112112#else
113113 LoD *= 0.5 ;
114114#endif
115- LoD += 5 .f;
116115 // WARNING: LoD_high will round up when LoD negative, its not a floor
117116 int LoD_high = int (LoD);
118117
@@ -126,6 +125,7 @@ vec4 nbl_glsl_vTextureGrad_impl(in uint formatID, in vec3 virtualUV, in mat2 dOr
126125 const int actualMaxFullMip = int (originalMaxFullMip)- 1 ;
127126 clippedLoD = inMipTail ? max (actualMaxFullMip,0 ): LoD_high;
128127
128+ // TODO: investigate the next 3 lines some more
129129 haveToDoTrilinear = LoD_high< originalMaxFullMip+ _NBL_VT_IMPL_PAGE_SZ_LOG2;
130130 if (inMipTail)
131131 levelInTail = min (LoD_high- actualMaxFullMip,int (_NBL_VT_IMPL_PAGE_SZ_LOG2));
@@ -137,11 +137,10 @@ vec4 nbl_glsl_vTextureGrad_impl(in uint formatID, in vec3 virtualUV, in mat2 dOr
137137 vec3 loPhysCoord;
138138 // speculative if (haveToDoTrilinear)
139139 {
140- // now we have absolute guarantees that both LoD_high and LoD_low are in the valid original mip range
141- bool highNotInLastFull = originalMaxFullMip>= 1u && LoD_high< (int (originalMaxFullMip)- 1 );
142- clippedLoD = highNotInLastFull ? (clippedLoD+ 1 ): clippedLoD;
143- levelInTail = highNotInLastFull ? levelInTail: (levelInTail+ 1 );
144- levelInTail = min (levelInTail, int (_NBL_VT_IMPL_PAGE_SZ_LOG2));
140+ if (LoD_high< int (originalMaxFullMip)- 1 )
141+ clippedLoD++ ;
142+ else if (levelInTail< int (_NBL_VT_IMPL_PAGE_SZ_LOG2))
143+ levelInTail++ ;
145144 loPhysCoord = nbl_glsl_vTexture_helper(formatID,virtualUV,clippedLoD,levelInTail);
146145 }
147146
0 commit comments