diff --git a/Shaders/Compute.glsl b/Shaders/Compute.glsl index 8ceed32..21343d1 100644 --- a/Shaders/Compute.glsl +++ b/Shaders/Compute.glsl @@ -2,6 +2,8 @@ layout(rgba32f, binding = 0) uniform writeonly image2D outputImage; +layout(location = 0) uniform uint triangleCount; + layout(std430, binding = 3) buffer layoutName { vec2 o_Points[]; @@ -26,16 +28,19 @@ layout(std430, binding = 3) buffer layoutName // gl_WorkGroupID : This is the current work group for this shader invocation. Each of the XYZ components will be on the half-open range [0, gl_NumWorkGroups.XYZ). // gl_LocalInvocationID : This is the current invocation of the shader within the work group. Each of the XYZ components will be on the half-open range [0, gl_WorkGroupSize.XYZ). -layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +// avant : 1 3 9 +// après : 3 9 27 +// count : 1 3 9 +layout(local_size_x = 64) in; void main() { - uint triangleCount = gl_NumWorkGroups.x; - uint currentPoint = gl_WorkGroupID.x; + uint currentPoint = gl_GlobalInvocationID.x; + if (currentPoint >= triangleCount) + return; uint offset = (triangleCount - 1) / 2; - uint firstPointIndex = offset * 3 + 1; - o_Points[firstPointIndex + currentPoint * 3 ] = o_Points[offset + currentPoint] / 2 + vec2(0, 0.36); + o_Points[firstPointIndex + currentPoint * 3] = o_Points[offset + currentPoint] / 2 + vec2(0, 0.36); o_Points[firstPointIndex + currentPoint * 3 + 1] = o_Points[offset + currentPoint] / 2 + vec2(-0.5, -0.5); o_Points[firstPointIndex + currentPoint * 3 + 2] = o_Points[offset + currentPoint] / 2 + vec2(0.5, -0.5); } \ No newline at end of file diff --git a/Shaders/Vertex.glsl b/Shaders/Vertex.glsl index e8ba39a..d86e4b0 100644 --- a/Shaders/Vertex.glsl +++ b/Shaders/Vertex.glsl @@ -1,14 +1,10 @@ #version 460 core -layout(location = 0) in vec2 a_Position; - layout(std430, binding = 3) buffer layoutName { vec2 data_SSBO[]; }; -out vec2 v_TexCoord; - void main() { gl_Position = vec4(data_SSBO[gl_InstanceID], 0.0, 1.0); diff --git a/src/Main.cpp b/src/Main.cpp index c82cf47..03a22ad 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -139,7 +139,7 @@ int main() GLuint vertexBuffer; glCreateBuffers(1, &vertexBuffer); - constexpr int DEPTH = 13; + constexpr int DEPTH = 14; auto vertices = GetPoints(DEPTH); @@ -155,6 +155,8 @@ int main() glVertexArrayAttribBinding(vertexArray, 0, 0); glVertexArrayAttribBinding(vertexArray, 1, 0); + Timer timer; + GLuint ssbo; glGenBuffers(1, &ssbo); glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo); @@ -173,7 +175,13 @@ int main() std::size_t count = 1; for (std::size_t i = 0; i < DEPTH; i++) { - glDispatchCompute(count, 1, 1); + glUniform1ui(0, count); + std::cout << count << std::endl; + + int dispatchCount = (count - 1) / 64 + 1; + std::cout << "DC : " <