gKit2 light
Loading...
Searching...
No Matches
histogram.glsl
1
2// version finale
3
4#version 430
5
6#ifdef COMPUTE_SHADER
7
8layout(std430, binding= 0) coherent buffer HistogramData
9{
10 int histogram[16];
11};
12
13// image resultat
14layout(binding= 0, rgba8) readonly uniform image2D image;
15
16shared int group_histogram[16];
17
18layout(local_size_x= 8, local_size_y= 8) in;
19void main( )
20{
21 uint ID= gl_LocalInvocationIndex;
22 if(ID < 16)
23 group_histogram[ID]= 0;
24
25 // attend que tous les sous groupes s'executent
26 barrier();
27
28 int local_histogram[16]= int[16](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
29
30 for(int i= 0; i < 16; i++)
31 {
32 ivec2 offset= ivec2((i % 4), (i / 4));
33 vec4 pixel= imageLoad(image, ivec2(gl_WorkGroupID.xy)*32 + ivec2(gl_LocalInvocationID.xy) + offset*8);
34
35 // calculer la cellule de l'histogramme pour le pixel
36 float grey= (pixel.r + pixel.g + pixel.b) / 3; // entre 0 et 1
37 int bin= int(grey * 15);
38
39 local_histogram[bin]++;
40 }
41
42 for(int i= 0; i < 16; i++)
43 if(local_histogram[i] > 0)
44 atomicAdd(group_histogram[i], local_histogram[i]);
45
46 // attend que tous les sous groupes s'executent
47 barrier();
48
49 if(ID < 16)
50 atomicAdd(histogram[ID], group_histogram[ID]);
51}
52
53#endif
vecteur generique 4d, ou 3d homogene, utilitaire.
Definition vec.h:192