VK_Groupshared tests for OOB GSM memory access

This commit is contained in:
Jake Turner committed 2026-10-23 13:01:29 +01:00
1 parent f179aa01c9
commit abba384d45
1 file changed
+27
+27
View File
@@ -51,6 +51,8 @@ layout(binding = 1, std430) buffer outdataBuf
shared float gsmData[MAX_THREADS];
shared int gsmIntData[MAX_THREADS];
shared int gInt;
shared float gsmSmallArray[MAX_THREADS];
shared vec3 gsmSmall2DArray[3][MAX_THREADS];
#define IsTest(x) (push.test == x)
@@ -266,6 +268,31 @@ void main()
GroupMemoryBarrierWithGroupSync();
outval.w = gInt;
}
else if (IsTest(13))
{
// Out of bounds GSM access should not crash
uint idx = gid.x;
uint oneu = (idx+1)/(idx+1);
uint zerou = oneu - 1;
uint idxOOB = idx * 2 + MAX_THREADS * oneu;
gsmSmallArray[idx] = float(gid.x);
gsmSmall2DArray[zerou][idx].x = float(gid.x);
gsmSmall2DArray[zerou][idx].y = float(gid.x) + 1.0;
gsmSmall2DArray[oneu][idx].x = float(gid.x);
gsmSmall2DArray[oneu][idx].y = float(gid.x) + 1.0;
gsmSmall2DArray[oneu+oneu][idx].x = float(gid.x);
gsmSmall2DArray[oneu+oneu][idx].y = float(gid.x) + 1.0;
gsmSmallArray[idxOOB] += float(zerou);
gsmSmall2DArray[oneu][idxOOB].x += float(zerou);
gsmSmall2DArray[oneu][idxOOB].y += float(zerou);
outval.x = gsmSmallArray[idx + zerou];
outval.y = gsmSmallArray[idx + zerou];
outval.z = gsmSmall2DArray[oneu][idx + zerou].x;
outval.w = gsmSmall2DArray[oneu][idx + zerou].y;
}
outdata[gid.x] = outval;
}