aboutsummaryrefslogtreecommitdiff
path: root/demo/d3d/shaders/ellipsoidDepthGS.hlsl
diff options
context:
space:
mode:
Diffstat (limited to 'demo/d3d/shaders/ellipsoidDepthGS.hlsl')
-rw-r--r--demo/d3d/shaders/ellipsoidDepthGS.hlsl65
1 files changed, 65 insertions, 0 deletions
diff --git a/demo/d3d/shaders/ellipsoidDepthGS.hlsl b/demo/d3d/shaders/ellipsoidDepthGS.hlsl
new file mode 100644
index 0000000..92169d3
--- /dev/null
+++ b/demo/d3d/shaders/ellipsoidDepthGS.hlsl
@@ -0,0 +1,65 @@
+#include "shaderCommon.h"
+
+cbuffer constBuf : register(b0)
+{
+ FluidShaderConst gParams;
+};
+
+static const float2 corners[4] =
+{
+ float2(0.0, 1.0), float2(0.0, 0.0), float2(1.0, 1.0), float2(1.0, 0.0)
+};
+
+[maxvertexcount(4)]
+void ellipsoidDepthGS(point FluidVertexOut input[1], inout TriangleStream<FluidGeoOut> triStream)
+{
+ const float4 ndcPos = input[0].ndcPos;
+ // frustrum culling
+ const float ndcBound = 1.0;
+ if (any(abs(ndcPos.xy) > ndcBound))
+ {
+ return;
+ }
+
+ float4 bounds = input[0].bounds;
+
+ const float4 invQuad0 = input[0].invQ0;
+ const float4 invQuad1 = input[0].invQ1;
+ const float4 invQuad2 = input[0].invQ2;
+ const float4 invQuad3 = input[0].invQ3;
+
+ float xmin = bounds.x;
+ float xmax = bounds.y;
+ float ymin = bounds.z;
+ float ymax = bounds.w;
+
+ FluidGeoOut output;
+
+ output.position = float4(xmin, ymax, 0.5, 1.0);
+ output.invQ0 = invQuad0;
+ output.invQ1 = invQuad1;
+ output.invQ2 = invQuad2;
+ output.invQ3 = invQuad3;
+ triStream.Append(output);
+
+ output.position = float4(xmin, ymin, 0.5, 1.0);
+ output.invQ0 = invQuad0;
+ output.invQ1 = invQuad1;
+ output.invQ2 = invQuad2;
+ output.invQ3 = invQuad3;
+ triStream.Append(output);
+
+ output.position = float4(xmax, ymax, 0.5, 1.0);
+ output.invQ0 = invQuad0;
+ output.invQ1 = invQuad1;
+ output.invQ2 = invQuad2;
+ output.invQ3 = invQuad3;
+ triStream.Append(output);
+
+ output.position = float4(xmax, ymin, 0.5, 1.0);
+ output.invQ0 = invQuad0;
+ output.invQ1 = invQuad1;
+ output.invQ2 = invQuad2;
+ output.invQ3 = invQuad3;
+ triStream.Append(output);
+}