Add Compute shaders support to WebGPU

This commit is contained in:
Wojtek Figat
2026-03-04 21:27:42 +01:00
parent 5fb9cf3be1
commit 377d5c00aa
20 changed files with 657 additions and 449 deletions

View File

@@ -54,7 +54,7 @@ bool ShouldSwap(float a, float b)
RWByteAddressBuffer IndirectArgsBuffer : register(u0);
META_CS(true, FEATURE_LEVEL_SM5)
META_CS(true, AUTO)
[numthreads(22, 1, 1)]
void CS_IndirectArgs(uint groupIndex : SV_GroupIndex)
{
@@ -129,7 +129,7 @@ void StoreItem(uint element, uint count)
#ifdef _CS_PreSort
META_CS(true, FEATURE_LEVEL_SM5)
META_CS(true, AUTO)
META_PERMUTATION_1(THREAD_GROUP_SIZE=1024)
META_PERMUTATION_1(THREAD_GROUP_SIZE=64)
[numthreads(THREAD_GROUP_SIZE, 1, 1)]
@@ -177,7 +177,7 @@ void CS_PreSort(uint3 groupID : SV_GroupID, uint groupIndex : SV_GroupIndex)
#ifdef _CS_InnerSort
META_CS(true, FEATURE_LEVEL_SM5)
META_CS(true, AUTO)
[numthreads(THREAD_GROUP_SIZE, 1, 1)]
void CS_InnerSort(uint3 groupID : SV_GroupID, uint groupIndex : SV_GroupIndex)
{
@@ -222,7 +222,7 @@ void CS_InnerSort(uint3 groupID : SV_GroupID, uint groupIndex : SV_GroupIndex)
RWBuffer<uint> SortedIndices : register(u0);
RWBuffer<float> SortingKeys : register(u1);
META_CS(true, FEATURE_LEVEL_SM5)
META_CS(true, AUTO)
[numthreads(1024, 1, 1)]
void CS_OuterSort(uint3 dispatchThreadId : SV_DispatchThreadID)
{

View File

@@ -59,7 +59,7 @@
#else
#define CAN_USE_GATHER 0
#endif
#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5
#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5 || defined(WGSL)
#define CAN_USE_COMPUTE_SHADER 1
#else
#define CAN_USE_COMPUTE_SHADER 0
@@ -79,6 +79,7 @@
// Alias read-only Buffer binded as shader resource into StructuredBuffer to be used as storage on WebGPU (not supported)
#define CAN_USE_TYPED_BUFFER_LOADS 0
#define Buffer StructuredBuffer
#define RWBuffer RWStructuredBuffer
// Hack matrix multiplication order for WebGPU (row-major vs column-major bug?)
#define PROJECT_POINT(p, m) mul(m, p)

View File

@@ -35,7 +35,7 @@ float3 GetParticleVec3(uint particleIndex, int offset)
}
// Sorting keys generation shader
META_CS(true, FEATURE_LEVEL_SM5)
META_CS(true, AUTO)
META_PERMUTATION_1(SORT_MODE=0)
META_PERMUTATION_1(SORT_MODE=1)
META_PERMUTATION_1(SORT_MODE=2)

View File

@@ -20,7 +20,7 @@ META_CB_END
RWStructuredBuffer<uint> HistogramBuffer : register(u0);
// Clears the histogram
META_CS(true, FEATURE_LEVEL_SM5)
META_CS(true, AUTO)
[numthreads(THREADGROUP_SIZE_X, 1, 1)]
void CS_ClearHistogram(uint dispatchThreadId : SV_DispatchThreadID)
{
@@ -44,7 +44,7 @@ float ComputeHistogramPositionFromLuminance(float luminance)
groupshared uint SharedHistogram[HISTOGRAM_SIZE];
// Generates the histogram
META_CS(true, FEATURE_LEVEL_SM5)
META_CS(true, AUTO)
[numthreads(THREADGROUP_SIZE_X, THREADGROUP_SIZE_Y, 1)]
void CS_GenerateHistogram(uint3 dispatchThreadId : SV_DispatchThreadID, uint3 groupThreadId : SV_GroupThreadID)
{