Skip to content

Commit 5ca4c40

Browse files
committed
VT officially works on non-NV GPUs!
1 parent 88e2e2b commit 5ca4c40

File tree

2 files changed

+8
-13
lines changed

2 files changed

+8
-13
lines changed

include/nbl/builtin/glsl/virtual_texturing/extensions.glsl

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,10 @@
55
#ifndef _NBL_BUILTIN_GLSL_VIRTUAL_TEXTURING_EXTENSIONS_INCLUDED_
66
#define _NBL_BUILTIN_GLSL_VIRTUAL_TEXTURING_EXTENSIONS_INCLUDED_
77

8+
#ifdef NBL_GL_EXT_nonuniform_qualifier
89
#extension GL_EXT_nonuniform_qualifier : enable
9-
10-
//#ifdef NBL_GL_NV_gpu_shader5
11-
#define NBL_GL_EXT_nonuniform_qualifier // TODO: we need to overhaul our GLSL preprocessing system to match what SPIRV-Cross actually does
12-
//#endif
13-
#define nonuniformEXT(a) (a)
14-
15-
#ifndef NBL_GL_EXT_nonuniform_qualifier
16-
#error "SPIR-V Cross did not implement GL_KHR_shader_subgroup_ballot on GLSL yet!"
10+
#else
11+
#extension GL_KHR_shader_subgroup_ballot : enable
1712
#endif
1813

1914
#endif

include/nbl/builtin/glsl/virtual_texturing/impl_functions.glsl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,14 @@ vec4 nbl_glsl_vTextureGrad_impl(in uint formatID, in vec3 virtualUV, in mat2 dOr
146146
if (haveToDoTrilinear)
147147
loMip = textureGrad(physicalTileStorageFormatView[nonuniformEXT(formatID)],loPhysCoord,dOriginalScaledUV[0],dOriginalScaledUV[1]);
148148
#else
149-
uint64_t outstandingSampleMask = ballotARB(true);
149+
uvec2 outstandingSampleMask = subgroupBallot(true).xy;
150150
// maybe unroll a few times manually
151-
while (outstandingSampleMask!=uint64_t(0u))
151+
while (outstandingSampleMask!=uvec2(0u))
152152
{
153-
uvec2 tmp = unpackUint2x32(outstandingSampleMask);
154-
uint subgroupFormatID = readInvocationARB(formatID,tmp[1]!=0u ? 32u:findLSB(tmp[0]));
153+
uvec2 tmp = outstandingSampleMask;
154+
uint subgroupFormatID = subgroupBroadcast(formatID,tmp[1]!=0u ? 32u:findLSB(tmp[0]));
155155
bool canSample = subgroupFormatID==formatID; // do I need this? && (outstandingSampleMask&gl_SubGroupEqMaskARB)==gl_SubGroupEqMaskARB;
156-
outstandingSampleMask ^= ballotARB(canSample);
156+
outstandingSampleMask ^= subgroupBallot(canSample).xy;
157157
if (canSample)
158158
{
159159
hiMip_retval = textureGrad(physicalTileStorageFormatView[subgroupFormatID],hiPhysCoord,dOriginalScaledUV[0],dOriginalScaledUV[1]);

0 commit comments

Comments
 (0)