sig
  type loc = [ `Loc of string * int | `Unknown ]
  val pp_loc : Format.formatter -> loc -> unit
  type insert
  val insert : ?loc:loc -> string -> insert
  type lang = [ `GLSL of int | `GLSL_ES of int ]
  type shader_stage =
      [ `Compute
      | `Fragment
      | `Geometry
      | `Tess_control
      | `Tess_evaluation
      | `Vertex ]
  val pp_shader_stage : Format.formatter -> shader_stage -> unit
  type shader = Prog.shader
  val shader :
    ?lang:lang ->
    ?loc:loc -> ?inserts:insert list -> shader_stage -> string -> shader
  val stage : shader -> shader_stage
  val loc : shader -> loc
  val lang : shader -> lang option
  type source = string * (int * string) list
  val source : ?lang:lang -> shader -> source
  type t = prog
  val create : ?name:string -> ?uset:Uniform.set -> shader list -> prog
  val name : prog -> string
  val uniforms : prog -> Uniform.set
  val shaders : prog -> shader list
  val binfo : Lit.prog -> Lit.Renderer.Private.BInfo.t
  val set_binfo : Lit.prog -> Lit.Renderer.Private.BInfo.t -> unit
end