From d3ec1a27cea83d95dd5a0ba39ff5a27761eac6cd Mon Sep 17 00:00:00 2001
From: Vlj <vljn@ovi.com>
Date: Fri, 15 Aug 2014 00:02:43 +0200
Subject: [PATCH] Completly unroll the loop

---
 data/shaders/rh.frag | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/data/shaders/rh.frag b/data/shaders/rh.frag
index 0687d7e82..17eadd2af 100644
--- a/data/shaders/rh.frag
+++ b/data/shaders/rh.frag
@@ -32,6 +32,7 @@ vec4 DirToSh(vec3 dir, float flux)
     return SHBasis (dir) * flux;
 }
 
+// We need to manually unroll the loop, otherwise Nvidia driver crashes.
 void loop(in int i,
           in vec3 RHcenter,in vec3 RHCellSize, in vec2 RHuv, in float RHdepth,
           inout vec4 SHr, inout vec4 SHg, inout vec4 SHb)
@@ -89,6 +90,20 @@ void main(void)
 
     loop(0, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
     loop(1, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(2, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(3, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(4, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(5, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(6, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(7, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(8, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(9, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(10, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(11, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(12, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(13, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(14, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
+    loop(15, RHcenter, RHCellSize, RHuv, RHdepth, SHr, SHg, SHb);
 
     SHr /= 3.14159 * SAMPLES;
     SHg /= 3.14159 * SAMPLES;