summaryrefslogtreecommitdiffstats
path: root/third_party/rust/metal/examples/mps/shaders.metal
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/metal/examples/mps/shaders.metal')
-rw-r--r--third_party/rust/metal/examples/mps/shaders.metal26
1 files changed, 26 insertions, 0 deletions
diff --git a/third_party/rust/metal/examples/mps/shaders.metal b/third_party/rust/metal/examples/mps/shaders.metal
new file mode 100644
index 0000000000..d824d70d1b
--- /dev/null
+++ b/third_party/rust/metal/examples/mps/shaders.metal
@@ -0,0 +1,26 @@
+//
+// Created by Sergey Reznik on 9/15/18.
+// Copyright © 2018 Serhii Rieznik. All rights reserved.
+//
+
+// Taken from https://github.com/sergeyreznik/metal-ray-tracer/tree/part-1/source/Shaders
+// MIT License https://github.com/sergeyreznik/metal-ray-tracer/blob/part-1/LICENSE
+
+#include <MetalPerformanceShaders/MetalPerformanceShaders.h>
+
+using Ray = MPSRayOriginMinDistanceDirectionMaxDistance;
+using Intersection = MPSIntersectionDistancePrimitiveIndexCoordinates;
+
+kernel void generateRays(
+ device Ray* rays [[buffer(0)]],
+ uint2 coordinates [[thread_position_in_grid]],
+ uint2 size [[threads_per_grid]])
+{
+ float2 uv = float2(coordinates) / float2(size - 1);
+
+ uint rayIndex = coordinates.x + coordinates.y * size.x;
+ rays[rayIndex].origin = MPSPackedFloat3(uv.x, uv.y, -1.0);
+ rays[rayIndex].direction = MPSPackedFloat3(0.0, 0.0, 1.0);
+ rays[rayIndex].minDistance = 0.0f;
+ rays[rayIndex].maxDistance = 2.0f;
+}