// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#extension GL_KHR_shader_subgroup_arithmetic : enable

layout(local_size_x = 512, local_size_y = 1) in;
layout(std430) buffer;

#include <impeller/path.glsl>

layout(binding = 0) readonly buffer Cubics {
  uint count;
  CubicData data[];
}
cubics;

layout(binding = 1) buffer Quads {
  uint count;
  QuadData data[];
}
quads;

uniform Config {
  float accuracy;
}
config;

shared uint quad_counts[512];
shared uint count_sums[512];

void main() {
  uint ident = gl_GlobalInvocationID.x;
  CubicData cubic;
  uint quad_count = 0;
  if (ident < cubics.count) {
    cubic = cubics.data[ident];
    quad_count = EstimateQuadraticCount(cubic, config.accuracy);
    quad_counts[ident] = quad_count;
  }

  barrier();
  if (quad_count == 0) {
    return;
  }

  count_sums[ident] = subgroupInclusiveAdd(quad_counts[ident]);

  quads.count = count_sums[cubics.count - 1];
  for (uint i = 0; i < quad_count; i++) {
    uint offset = count_sums[ident] - quad_count;
    quads.data[offset + i] = GenerateQuadraticFromCubic(cubic, i, quad_count);
  }
}
