29 lines
821 B
HLSL
29 lines
821 B
HLSL
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#define MAX_DISPATCH_THREAD_PER_DIMENSION 4096
|
|
|
|
int3 GetRayTracingThreadCountWrapped(uint TargetThreadCount, uint ThreadGroupSize)
|
|
{
|
|
int3 ThreadCount = int3(TargetThreadCount, 1, 1);
|
|
if (ThreadCount.x > MAX_DISPATCH_THREAD_PER_DIMENSION)
|
|
{
|
|
ThreadCount.y = (ThreadCount.x + ThreadGroupSize - 1) / ThreadGroupSize;
|
|
ThreadCount.x = ThreadGroupSize;
|
|
}
|
|
|
|
if (ThreadCount.y > MAX_DISPATCH_THREAD_PER_DIMENSION)
|
|
{
|
|
ThreadCount.z = (ThreadCount.y + ThreadGroupSize - 1) / ThreadGroupSize;
|
|
ThreadCount.y = ThreadGroupSize;
|
|
}
|
|
|
|
return ThreadCount;
|
|
}
|
|
|
|
uint GetUnWrappedRayTracingDispatchThreadId(int3 DispatchThreadId, uint ThreadGroupSize)
|
|
{
|
|
return DispatchThreadId.x + (DispatchThreadId.z * ThreadGroupSize + DispatchThreadId.y) * ThreadGroupSize;
|
|
}
|