#ifndef __GL_THIN_COMPUTE_H__
#define __GL_THIN_COMPUTE_H__

#include <alias/gl.h>

#define RADIXSORT_BITS_PER_PASS 4
#define RADIXSORT_WORKGROUP_SIZE 128
#define RADIXSORT_NUM_BINS (1 << RADIXSORT_BITS_PER_PASS)

ALIAS_GL_DECLARE_SNIPPET(random_squares32)

ALIAS_GL_DECLARE_SNIPPET(sort_key_float)
ALIAS_GL_DECLARE_SNIPPET(sort_key_uint)
ALIAS_GL_DECLARE_SNIPPET(sort_key)
ALIAS_GL_DECLARE_SNIPPET(sort_key_xy)

ALIAS_GL_DECLARE_SNIPPET(sort_value_uint)
ALIAS_GL_DECLARE_SNIPPET(sort_value)
ALIAS_GL_DECLARE_SNIPPET(sort_value_xy)

ALIAS_GL_DECLARE_SNIPPET(sort_ascending)
ALIAS_GL_DECLARE_SNIPPET(sort_descending)

ALIAS_GL_DECLARE_SNIPPET(radixsort_defines)
ALIAS_GL_DECLARE_SNIPPET(radixsort_key_value)

// sortedmatrix_key and sortedmatrix_key_value require the use snippet sort_key_xy and sort_value_xy
// and their associated functions sort_key_xy_setup and sort_value_xy_setup before calling
ALIAS_GL_DECLARE_SNIPPET(sortedmatrix_key_value)

#endif