// 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 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 @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>
