// Copyright 2024 The Dawn & Tint Authors
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this
//    list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
//    this list of conditions and the following disclaimer in the documentation
//    and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
//    contributors may be used to endorse or promote products derived from
//    this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

////////////////////////////////////////////////////////////////////////////////
// GLSL builtin definition file                                               //
//                                                                            //
// After modifying this file, run:                                            //
//    tools/run gen                                                           //
// from the Dawn source directory.                                            //
//                                                                            //
// See docs/tint/intrinsic_definition_files.md for syntax                     //
////////////////////////////////////////////////////////////////////////////////

import "src/tint/lang/core/address_space.def"
import "src/tint/lang/core/access.def"
import "src/tint/lang/core/texel_format.def"

////////////////////////////////////////////////////////////////////////////////
// Types                                                                      //
////////////////////////////////////////////////////////////////////////////////

type bool
type f16
type f32
type i32
type u32
type atomic<T>
type ptr<S: address_space, T, A: access>

type vec2<T>
type vec3<T>
type vec4<T>
@display("vec{N}<{T}>")     type vec<N: num, T>

type array<T>

type texture_1d<T>
type texture_2d<T>
type texture_2d_array<T>
type texture_3d<T>
type texture_cube<T>
type texture_cube_array<T>
type texture_multisampled_2d<T>
type texture_depth_2d
type texture_depth_2d_array
type texture_depth_cube
type texture_depth_cube_array
type texture_depth_multisampled_2d
type texture_storage_1d<F: texel_format, A: access>
type texture_storage_2d<F: texel_format, A: access>
type texture_storage_2d_array<F: texel_format, A: access>
type texture_storage_3d<F: texel_format, A: access>

////////////////////////////////////////////////////////////////////////////////
// Type matchers                                                              //
////////////////////////////////////////////////////////////////////////////////

match scalar: f32 | f16 | i32 | u32 | bool
match iu32: i32 | u32
match fiu32: f32 | i32 | u32
match fi32_f16: f32 | i32 | f16
match fiu32_f16: f32 | i32 | u32 | f16
match fiu32_f16_bool: f32 | i32 | u32 | f16 | bool
match f32_f16: f32 | f16

match read_write: access.read_write
match readable
  : access.read
  | access.read_write
match writable
  : access.write
  | access.read_write

match workgroup_or_storage:
  address_space.storage |
  address_space.workgroup

match function: address_space.function
match storage: address_space.storage

match f32_texel_format
  : texel_format.r8unorm
  | texel_format.bgra8unorm
  | texel_format.rgba8unorm
  | texel_format.rgba8snorm
  | texel_format.rgba16float
  | texel_format.r32float
  | texel_format.rg32float
  | texel_format.rgba32float

match u32_texel_format
  : texel_format.rgba8uint
  | texel_format.rgba16uint
  | texel_format.r32uint
  | texel_format.rg32uint
  | texel_format.rgba32uint

match i32_texel_format
  : texel_format.rgba8sint
  | texel_format.rgba16sint
  | texel_format.r32sint
  | texel_format.rg32sint
  | texel_format.rgba32sint

////////////////////////////////////////////////////////////////////////////////
// Builtin Functions                                                          //
////////////////////////////////////////////////////////////////////////////////

@member_function @must_use implicit(T, A: access) fn length(ptr<storage, array<T>, A>) -> i32

@stage("compute") fn barrier()
@stage("compute") fn memoryBarrierBuffer()
@stage("compute") fn memoryBarrierImage()

@stage("fragment", "compute") implicit(T: iu32) fn atomicCompSwap(
                                    ptr<workgroup_or_storage, atomic<T>, read_write>,
                                    compare_value: T,
                                    value: T) -> T
@stage("fragment", "compute") implicit(T: iu32, S: workgroup_or_storage) fn atomicSub(
                                    ptr<S, atomic<T>, read_write>,
                                    T) -> T

fn floatBitsToInt(value: f32) -> i32
implicit(N: num) fn floatBitsToInt(value: vec<N, f32>) -> vec<N, i32>
fn floatBitsToUint(value: f32) -> u32
implicit(N: num) fn floatBitsToUint(value: vec<N, f32>) -> vec<N, u32>

fn intBitsToFloat(value: i32) -> f32
implicit(N: num) fn intBitsToFloat(value: vec<N, i32>) -> vec<N, f32>
fn uintBitsToFloat(value: u32) -> f32
implicit(N: num) fn uintBitsToFloat(value: vec<N, u32>) -> vec<N, f32>

implicit(T: iu32) fn bitCount(value: T) -> i32
implicit(T: iu32, N: num) fn bitCount(value: vec<N, T>) -> vec<N, i32>

implicit(T: iu32) fn bitfieldExtract(value: T, offset: i32, bits: i32) -> T
implicit(T: iu32, N: num) fn bitfieldExtract(value: vec<N, T>, offset: i32, bits: i32) -> vec<N, T>

implicit(T: iu32) fn bitfieldInsert(base: T, insert: T, offset: i32, bits: i32) -> T
implicit(T: iu32, N: num) fn bitfieldInsert(base: vec<N, T>,
                                             insert: vec<N, T>,
                                             offset: i32,
                                             bits: i32) -> vec<N, T>

fn packFloat2x16(value: vec2<f16>) -> u32
fn unpackFloat2x16(value: u32) -> vec2<f16>

implicit(T: fi32_f16) fn abs(T) -> T
implicit(T: fi32_f16, N: num) fn abs(vec<N, T>) -> vec<N, T>

implicit(N: num) fn any(vec<N, bool>) -> bool
implicit(N: num) fn all(vec<N, bool>) -> bool
implicit(T: f32_f16, N: num) fn dot(vec<N, T>, vec<N, T>) -> T

@must_use implicit(T: scalar) fn mix(T, T, bool) -> T
@must_use implicit(N: num, T: scalar) fn mix(vec<N, T>, vec<N, T>, vec<N, bool>) -> vec<N, T>

@must_use @const implicit(T: f32_f16) fn modf(value: T, result: ptr<function, T, read_write>) -> T
@must_use @const implicit(N: num, T: f32_f16) fn modf(value: vec<N, T>,
                                                      result: ptr<function, vec<N, T>, read_write>) -> vec<N, T>

@must_use @const implicit(T: f32_f16) fn frexp(value: T, exp: ptr<function, i32, read_write>) -> T
@must_use @const implicit(N: num, T: f32_f16) fn frexp(value: vec<N, T>,
                                                       exp : ptr<function, vec<N, i32>, read_write>) -> vec<N, T>

@must_use implicit(T: fiu32) fn textureSize(texture: texture_1d<T>,
                                            level: i32) -> i32
@must_use implicit(T: fiu32) fn textureSize(texture: texture_2d<T>,
                                            level: i32) -> vec2<i32>
@must_use implicit(T: fiu32) fn textureSize(texture: texture_2d_array<T>,
                                            level: i32) -> vec3<i32>
@must_use implicit(T: fiu32) fn textureSize(texture: texture_3d<T>,
                                            level: i32) -> vec3<i32>
@must_use implicit(T: fiu32) fn textureSize(texture: texture_cube<T>,
                                            level: i32) -> vec2<i32>
@must_use implicit(T: fiu32) fn textureSize(texture: texture_cube_array<T>,
                                            level: i32) -> vec3<i32>
@must_use fn textureSize(texture: texture_depth_2d,
                         level: i32) -> vec2<i32>
@must_use fn textureSize(texture: texture_depth_2d_array,
                         level: i32) -> vec3<i32>
@must_use fn textureSize(texture: texture_depth_cube,
                         level: i32) -> vec2<i32>
@must_use fn textureSize(texture: texture_depth_cube_array,
                        level: i32) -> vec3<i32>

@must_use implicit(T: fiu32) fn textureSize(texture: texture_multisampled_2d<T>) -> vec2<i32>
@must_use fn textureSize(texture: texture_depth_multisampled_2d) -> vec2<i32>

@must_use implicit(F: texel_format, A: access) fn imageSize(
                                            texture: texture_storage_1d<F, A>) -> i32
@must_use implicit(F: texel_format, A: access) fn imageSize(
                                            texture: texture_storage_2d<F, A>) -> vec2<i32>
@must_use implicit(F: texel_format, A: access) fn imageSize(
                                            texture: texture_storage_2d_array<F, A>) -> vec3<i32>
@must_use implicit(F: texel_format, A: access) fn imageSize(
                                            texture: texture_storage_3d<F, A>) -> vec3<i32>

implicit(T: fiu32) fn texelFetch(texture: texture_1d<T>, location: i32, level: i32) -> vec4<T>
implicit(T: fiu32) fn texelFetch(texture: texture_2d<T>, location: vec2<i32>, level: i32) -> vec4<T>
implicit(T: fiu32) fn texelFetch(texture: texture_2d_array<T>, location: vec3<i32>, level: i32) -> vec4<T>
implicit(T: fiu32) fn texelFetch(texture: texture_multisampled_2d<T>,
                                 location: vec2<i32>,
                                 sample_index: i32) -> vec4<T>
implicit(T: fiu32) fn texelFetch(texture: texture_3d<T>, location: vec3<i32>, level: i32) -> vec4<T>

implicit(F: f32_texel_format, A: readable) fn imageLoad(texture: texture_storage_1d<F, A>,
                                                      coords: i32) -> vec4<f32>
implicit(F: f32_texel_format, A: readable) fn imageLoad(texture: texture_storage_2d<F, A>,
                                                      coords: vec2<i32>) -> vec4<f32>
implicit(F: f32_texel_format, A: readable) fn imageLoad(texture: texture_storage_2d_array<F, A>,
                                                      coords: vec3<i32>) -> vec4<f32>
implicit(F: f32_texel_format, A: readable) fn imageLoad(texture: texture_storage_3d<F, A>,
                                                      coords: vec3<i32>) -> vec4<f32>

implicit(F: i32_texel_format, A: readable) fn imageLoad(texture: texture_storage_1d<F, A>,
                                                      coords: i32) -> vec4<i32>
implicit(F: i32_texel_format, A: readable) fn imageLoad(texture: texture_storage_2d<F, A>,
                                                      coords: vec2<i32>) -> vec4<i32>
implicit(F: i32_texel_format, A: readable) fn imageLoad(texture: texture_storage_2d_array<F, A>,
                                                      coords: vec3<i32>) -> vec4<i32>
implicit(F: i32_texel_format, A: readable) fn imageLoad(texture: texture_storage_3d<F, A>,
                                                      coords: vec3<i32>) -> vec4<i32>

implicit(F: u32_texel_format, A: readable) fn imageLoad(texture: texture_storage_1d<F, A>,
                                                      coords: i32) -> vec4<u32>
implicit(F: u32_texel_format, A: readable) fn imageLoad(texture: texture_storage_2d<F, A>,
                                                      coords: vec2<i32>) -> vec4<u32>
implicit(F: u32_texel_format, A: readable) fn imageLoad(texture: texture_storage_2d_array<F, A>,
                                                      coords: vec3<i32>) -> vec4<u32>
implicit(F: u32_texel_format, A: readable) fn imageLoad(texture: texture_storage_3d<F, A>,
                                                      coords: vec3<i32>) -> vec4<u32>

implicit(C: iu32) fn imageStore(texture: texture_storage_1d<f32_texel_format, writable>,
                                coords: C,
                                value: vec4<f32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_1d<i32_texel_format, writable>,
                                coords: C,
                                value: vec4<i32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_1d<u32_texel_format, writable>,
                                coords: C,
                                value: vec4<u32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_2d<f32_texel_format, writable>,
                                coords: vec2<C>,
                                value: vec4<f32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_2d<i32_texel_format, writable>,
                                coords: vec2<C>,
                                value: vec4<i32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_2d<u32_texel_format, writable>,
                                coords: vec2<C>,
                                value: vec4<u32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_3d<f32_texel_format, writable>,
                                coords: vec3<C>,
                                value: vec4<f32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_3d<i32_texel_format, writable>,
                                coords: vec3<C>,
                                value: vec4<i32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_3d<u32_texel_format, writable>,
                                coords: vec3<C>,
                                value: vec4<u32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_2d_array<f32_texel_format, writable>,
                                coords: vec3<C>,
                                value: vec4<f32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_2d_array<i32_texel_format, writable>,
                                coords: vec3<C>,
                                value: vec4<i32>)
implicit(C: iu32) fn imageStore(texture: texture_storage_2d_array<u32_texel_format, writable>,
                                coords: vec3<C>,
                                value: vec4<u32>)

implicit(T: fiu32_f16 N: num) fn lessThan(vec<N, T>, vec<N, T>) -> vec<N, bool>
implicit(T: fiu32_f16 N: num) fn lessThanEqual(vec<N, T>, vec<N, T>) -> vec<N, bool>
implicit(T: fiu32_f16 N: num) fn greaterThan(vec<N, T>, vec<N, T>) -> vec<N, bool>
implicit(T: fiu32_f16 N: num) fn greaterThanEqual(vec<N, T>, vec<N, T>) -> vec<N, bool>
implicit(T: fiu32_f16_bool N: num) fn equal(vec<N, T>, vec<N, T>) -> vec<N, bool>
implicit(T: fiu32_f16_bool N: num) fn notEqual(vec<N, T>, vec<N, T>) -> vec<N, bool>
