Skip to content
Snippets Groups Projects

Resolve "Indirect Dispatch"

Merged Ghost User requested to merge 106-indirect-dispatch into develop
Compare and Show latest version
6 files
+ 17
23
Compare changes
  • Side-by-side
  • Inline
Files
6
@@ -15,7 +15,6 @@ layout( push_constant ) uniform constants{
// camera planes are needed to linearize depth
float cameraNearPlane;
float cameraFarPlane;
float time;
};
float linearizeDepth(float depth, float near, float far){
@@ -77,19 +76,16 @@ SampleData loadSampleData(vec2 uv){
return data;
}
// simple hash/noise function from: https://www.shadertoy.com/view/ttc3zr
uint murmurHash12(uvec2 src) {
const uint M = 0x5bd1e995u;
uint h = 1190494759u;
src *= M; src ^= src>>24u; src *= M;
h *= M; h ^= src.x; h *= M; h ^= src.y;
h ^= h>>13u; h *= M; h ^= h>>15u;
return h;
}
float hash12(vec2 src) {
uint h = murmurHash12(floatBitsToUint(src));
return uintBitsToFloat(h & 0x007fffffu | 0x3f800000u) - 1.0;
// simple binary dither pattern
// could be optimized to avoid modulo and branch
float dither(ivec2 coord){
int ditherSize = 4;
bool x = coord.x % ditherSize < (ditherSize / 2);
bool y = coord.y % ditherSize < (ditherSize / 2);
return x ^^ y ? 1 : 0;
}
void main(){
@@ -126,7 +122,9 @@ void main(){
vec2 uvEnd = clamp(uv + mainPixel.motion, 0, 1);
// samples are placed evenly, but the entire filter is jittered
float random = hash12(uv + time) - 0.5; // in range [-0.5, 0.5]
// dither returns either 0 or 1
// the sampleUV code expects an offset in range [-0.5, 0.5], so the dither is rescaled to a binary -0.25/0.25
float random = dither(coord) * 0.5 - 0.25;
for(int i = 0; i < sampleCount; i++){
vec2 sampleUV = mix(uvStart, uvEnd, (i + random + 1) / float(sampleCount + 1));
Loading