diff options
Diffstat (limited to 'examples/nv-aftermath-example/shaders.slang')
| -rw-r--r-- | examples/nv-aftermath-example/shaders.slang | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/examples/nv-aftermath-example/shaders.slang b/examples/nv-aftermath-example/shaders.slang new file mode 100644 index 000000000..61588dd49 --- /dev/null +++ b/examples/nv-aftermath-example/shaders.slang @@ -0,0 +1,81 @@ +// This shader is purposefully designed to be so slow it will cause a GPU timeout/crash. + +// Uniform data to be passed from application -> shader. +cbuffer Uniforms +{ + float4x4 modelViewProjection; + + // We want to make things fail so we can get an aftermath capture, + // so lets have a count that makes things really slow. + int failCount; +} + +// Per-vertex attributes to be assembled from bound vertex buffers. +struct AssembledVertex +{ + float3 position : POSITION; + float3 color : COLOR; +}; + +// Output of the vertex shader, and input to the fragment shader. +struct CoarseVertex +{ + float3 color; +}; + +// Output of the fragment shader +struct Fragment +{ + float4 color; +}; + +// Vertex Shader + +struct VertexStageOutput +{ + CoarseVertex coarseVertex : CoarseVertex; + float4 sv_position : SV_Position; +}; + +[shader("vertex")] +VertexStageOutput vertexMain( + AssembledVertex assembledVertex) +{ + VertexStageOutput output; + + float3 position = assembledVertex.position; + float3 color = assembledVertex.color; + + output.coarseVertex.color = color; + output.sv_position = mul(modelViewProjection, float4(position, 1.0)); + + return output; +} + +// Fragment Shader + +[shader("fragment")] +float4 fragmentMain( + CoarseVertex coarseVertex : CoarseVertex) : SV_Target +{ + float3 color = coarseVertex.color; + + float factor = 0.0f; + + // Waste lots of cycles + for (int i = 0; i < failCount; ++i) + { + factor += 1.0e-20 * sin(float(i & 0xffff)); + factor += 1.0e-21 * cos(float(i & 0xfff) + 1.0); + factor += 1.0e-8f * tan(float(i & 0xfffff)); + } + + factor = abs(factor); + + while (factor < 0.25) + { + factor += factor; + } + + return float4(color, 1.0) * factor; +} |
