]> git.sesse.net Git - narabu/blobdiff - tally.shader
Update a boring comment.
[narabu] / tally.shader
index 1623a1dd06e845af873ba62adcdaa177ffe87c4e..53f73aff52af4ac75712cf3ab9c6b21459a58431 100644 (file)
@@ -73,7 +73,7 @@ void main()
 
        // Apply corrections one by one, greedily, until we are at the exact right sum.
        if (actual_sum > prob_scale) {
-               float loss = -true_prob * log2(new_val / (new_val - 1));
+               float loss = true_prob * log2(new_val / float(new_val - 1));
 
                voting_areas[i] = 0xffffffff;
                memoryBarrierShared();
@@ -101,11 +101,11 @@ void main()
 
                        if (my_vote == voting_areas[vote_no]) {
                                --new_val;
-                               loss = -true_prob * log2(new_val / (new_val - 1));
+                               loss = true_prob * log2(new_val / float(new_val - 1));
                        }
                }
        } else {
-               float benefit = true_prob * log2(new_val / (new_val + 1));
+               float benefit = -true_prob * log2(new_val / float(new_val + 1));
 
                voting_areas[i] = 0;
                memoryBarrierShared();
@@ -130,7 +130,7 @@ void main()
 
                        if (my_vote == voting_areas[vote_no]) {
                                ++new_val;
-                               benefit = true_prob * log2(new_val / (new_val + 1));
+                               benefit = -true_prob * log2(new_val / float(new_val + 1));
                        }
                }
        }
@@ -145,6 +145,12 @@ void main()
        memoryBarrierShared();
        barrier();
 
+       new_val = new_dist[i];
+
+       // TODO: Why do we need this next barrier? It makes no sense.
+       memoryBarrierShared();
+       barrier();
+
        for (uint layer = 2; layer <= 256; layer *= 2) {
                if ((i & (layer - 1)) == layer - 1) {
                        new_dist[i] += new_dist[i - (layer / 2)];
@@ -159,5 +165,5 @@ void main()
                memoryBarrierShared();
                barrier();
        }
-       ransdist[base + i] = uvec2(new_val, new_dist[i]);
+       ransdist[base + i] = uvec2(new_dist[i] - new_val, new_val);
 }