Skip to content

Commit 84a290e

Browse files
the masks have been wrong in HLSL since inception
1 parent 798939a commit 84a290e

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

include/nbl/builtin/hlsl/glsl_compat/subgroup_ballot.hlsl

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,30 @@ namespace hlsl
1313
{
1414
namespace glsl
1515
{
16-
uint32_t4 gl_SubgroupEqMask() {
17-
return uint32_t4(0, 0, 0, 1) << gl_SubgroupInvocationID();
16+
17+
uint32_t4 gl_SubgroupEqMask()
18+
{
19+
const uint32_t comp = gl_SubgroupInvocationID()>>5;
20+
uint32_t4 retval = uint32_t4(0,0,0,0);
21+
retval[comp] = 0x1u<<(gl_SubgroupInvocationID()&31u);
22+
return retval;
1823
}
1924

20-
uint32_t4 gl_SubgroupGeMask() {
21-
return uint32_t4(0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu) << gl_SubgroupInvocationID();
25+
uint32_t4 gl_SubgroupGeMask()
26+
{
27+
const uint32_t FullBits = 0xffffffffu;
28+
const uint32_t comp = gl_SubgroupInvocationID()>>5;
29+
uint32_t4 retval = uint32_t4(comp>0 ? 0u:FullBits,comp>1 ? 0u:FullBits,comp>2 ? 0u:FullBits,0u);
30+
retval[comp] = FullBits<<(gl_SubgroupInvocationID()&31u);
31+
return retval;
2232
}
2333

24-
uint32_t4 gl_SubgroupGtMask() {
25-
return gl_SubgroupGeMask() << 1;
34+
uint32_t4 gl_SubgroupGtMask()
35+
{
36+
uint32_t4 retval = gl_SubgroupGeMask();
37+
const uint32_t comp = gl_SubgroupInvocationID()>>5;
38+
retval[comp] = 0xfffffffeu<<(gl_SubgroupInvocationID()&31u);
39+
return retval;
2640
}
2741

2842
uint32_t4 gl_SubgroupLeMask() {

0 commit comments

Comments
 (0)