/* automatically generated by rust-bindgen */

#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct glslopt_shader {
    _unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct glslopt_ctx {
    _unused: [u8; 0],
}
pub const glslopt_shader_type_kGlslOptShaderVertex: glslopt_shader_type = 0;
pub const glslopt_shader_type_kGlslOptShaderFragment: glslopt_shader_type = 1;
pub type glslopt_shader_type = u32;
pub const glslopt_options_kGlslOptionSkipPreprocessor: glslopt_options = 1;
pub const glslopt_options_kGlslOptionNotFullShader: glslopt_options = 2;
pub type glslopt_options = u32;
pub const glslopt_target_kGlslTargetOpenGL: glslopt_target = 0;
pub const glslopt_target_kGlslTargetOpenGLES20: glslopt_target = 1;
pub const glslopt_target_kGlslTargetOpenGLES30: glslopt_target = 2;
pub const glslopt_target_kGlslTargetMetal: glslopt_target = 3;
pub type glslopt_target = u32;
pub const glslopt_basic_type_kGlslTypeFloat: glslopt_basic_type = 0;
pub const glslopt_basic_type_kGlslTypeInt: glslopt_basic_type = 1;
pub const glslopt_basic_type_kGlslTypeBool: glslopt_basic_type = 2;
pub const glslopt_basic_type_kGlslTypeTex2D: glslopt_basic_type = 3;
pub const glslopt_basic_type_kGlslTypeTex3D: glslopt_basic_type = 4;
pub const glslopt_basic_type_kGlslTypeTexCube: glslopt_basic_type = 5;
pub const glslopt_basic_type_kGlslTypeTex2DShadow: glslopt_basic_type = 6;
pub const glslopt_basic_type_kGlslTypeTex2DArray: glslopt_basic_type = 7;
pub const glslopt_basic_type_kGlslTypeOther: glslopt_basic_type = 8;
pub const glslopt_basic_type_kGlslTypeCount: glslopt_basic_type = 9;
pub type glslopt_basic_type = u32;
pub const glslopt_precision_kGlslPrecHigh: glslopt_precision = 0;
pub const glslopt_precision_kGlslPrecMedium: glslopt_precision = 1;
pub const glslopt_precision_kGlslPrecLow: glslopt_precision = 2;
pub const glslopt_precision_kGlslPrecCount: glslopt_precision = 3;
pub type glslopt_precision = u32;
extern "C" {
    pub fn glslopt_initialize(target: glslopt_target) -> *mut glslopt_ctx;
}
extern "C" {
    pub fn glslopt_cleanup(ctx: *mut glslopt_ctx);
}
extern "C" {
    pub fn glslopt_set_max_unroll_iterations(
        ctx: *mut glslopt_ctx,
        iterations: ::std::os::raw::c_uint,
    );
}
extern "C" {
    pub fn glslopt_optimize(
        ctx: *mut glslopt_ctx,
        type_: glslopt_shader_type,
        shaderSource: *const ::std::os::raw::c_char,
        options: ::std::os::raw::c_uint,
    ) -> *mut glslopt_shader;
}
extern "C" {
    pub fn glslopt_get_status(shader: *mut glslopt_shader) -> bool;
}
extern "C" {
    pub fn glslopt_get_output(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
}
extern "C" {
    pub fn glslopt_get_raw_output(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
}
extern "C" {
    pub fn glslopt_get_log(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
}
extern "C" {
    pub fn glslopt_shader_delete(shader: *mut glslopt_shader);
}
extern "C" {
    pub fn glslopt_shader_get_input_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn glslopt_shader_get_input_desc(
        shader: *mut glslopt_shader,
        index: ::std::os::raw::c_int,
        outName: *mut *const ::std::os::raw::c_char,
        outType: *mut glslopt_basic_type,
        outPrec: *mut glslopt_precision,
        outVecSize: *mut ::std::os::raw::c_int,
        outMatSize: *mut ::std::os::raw::c_int,
        outArraySize: *mut ::std::os::raw::c_int,
        outLocation: *mut ::std::os::raw::c_int,
    );
}
extern "C" {
    pub fn glslopt_shader_get_uniform_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn glslopt_shader_get_uniform_total_size(
        shader: *mut glslopt_shader,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn glslopt_shader_get_uniform_desc(
        shader: *mut glslopt_shader,
        index: ::std::os::raw::c_int,
        outName: *mut *const ::std::os::raw::c_char,
        outType: *mut glslopt_basic_type,
        outPrec: *mut glslopt_precision,
        outVecSize: *mut ::std::os::raw::c_int,
        outMatSize: *mut ::std::os::raw::c_int,
        outArraySize: *mut ::std::os::raw::c_int,
        outLocation: *mut ::std::os::raw::c_int,
    );
}
extern "C" {
    pub fn glslopt_shader_get_texture_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn glslopt_shader_get_texture_desc(
        shader: *mut glslopt_shader,
        index: ::std::os::raw::c_int,
        outName: *mut *const ::std::os::raw::c_char,
        outType: *mut glslopt_basic_type,
        outPrec: *mut glslopt_precision,
        outVecSize: *mut ::std::os::raw::c_int,
        outMatSize: *mut ::std::os::raw::c_int,
        outArraySize: *mut ::std::os::raw::c_int,
        outLocation: *mut ::std::os::raw::c_int,
    );
}
extern "C" {
    pub fn glslopt_shader_get_stats(
        shader: *mut glslopt_shader,
        approxMath: *mut ::std::os::raw::c_int,
        approxTex: *mut ::std::os::raw::c_int,
        approxFlow: *mut ::std::os::raw::c_int,
    );
}
