Files
Seele/res/shaders/ComputeFrustums.slang
T

34 lines
1.4 KiB
Plaintext
Raw Normal View History

2020-06-02 11:46:18 +02:00
import Common;
2023-11-11 13:56:12 +01:00
import DispatchParams;
2020-06-02 11:46:18 +02:00
struct ComputeShaderInput
{
uint3 groupID : SV_GroupID;
uint3 groupThreadID : SV_GroupThreadID;
uint3 dispatchThreadID : SV_DispatchThreadID;
uint groupIndex : SV_GroupIndex;
};
[numthreads(BLOCK_SIZE, BLOCK_SIZE, 1)]
[shader("compute")]
void computeFrustums(ComputeShaderInput in)
{
2024-02-21 10:30:04 +01:00
float3 origin = float3(0, 0, 0);
2024-02-01 17:07:51 +01:00
float3 corners[4] = {
2024-05-29 10:40:35 +02:00
screenToWorld(float4(float2(in.dispatchThreadID.x + 0, in.dispatchThreadID.y + 0) * BLOCK_SIZE, -1.0f, 1.0f)).xyz,
screenToWorld(float4(float2(in.dispatchThreadID.x + 1, in.dispatchThreadID.y + 0) * BLOCK_SIZE, -1.0f, 1.0f)).xyz,
screenToWorld(float4(float2(in.dispatchThreadID.x + 0, in.dispatchThreadID.y + 1) * BLOCK_SIZE, -1.0f, 1.0f)).xyz,
screenToWorld(float4(float2(in.dispatchThreadID.x + 1, in.dispatchThreadID.y + 1) * BLOCK_SIZE, -1.0f, 1.0f)).xyz
2024-02-01 17:07:51 +01:00
};
Frustum frustum;
2024-02-23 08:31:21 +01:00
frustum.sides[0] = computePlane(origin, corners[2], corners[0]);
2024-02-21 10:30:04 +01:00
frustum.sides[1] = computePlane(origin, corners[1], corners[3]);
frustum.sides[2] = computePlane(origin, corners[0], corners[1]);
frustum.sides[3] = computePlane(origin, corners[3], corners[2]);
2024-10-01 16:56:04 +02:00
if(in.dispatchThreadID.x < pDispatchParams.numThreads.x && in.dispatchThreadID.y < pDispatchParams.numThreads.y)
2020-06-02 11:46:18 +02:00
{
2024-10-01 16:56:04 +02:00
uint index = in.dispatchThreadID.x + (in.dispatchThreadID.y * pDispatchParams.numThreads.x);
2024-02-01 17:07:51 +01:00
pDispatchParams.frustums[index] = frustum;
2020-06-02 11:46:18 +02:00
}
}