GPU: GLSL-C++ compilation stubs #4

Closed
Clément Foucault wants to merge 38 commits from glsl-cpp-stubs-2 into glsl-include

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
Showing only changes of commit fc233a2501 - Show all commits

View File

@ -486,163 +486,170 @@ using uimage2DArray = ImageBase<uint, 2, true>;
/** \name Builtin Functions /** \name Builtin Functions
* \{ */ * \{ */
template<typename T, int D> VecBase<bool, D> greaterThan(VecBase<T, D>, VecBase<T, D>) {} /* Some compilers complain about lack of return values. Keep it short. */
template<typename T, int D> VecBase<bool, D> lessThan(VecBase<T, D>, VecBase<T, D>) {} # define RET \
template<typename T, int D> VecBase<bool, D> lessThanEqual(VecBase<T, D>, VecBase<T, D>) {} { \
template<typename T, int D> VecBase<bool, D> greaterThanEqual(VecBase<T, D>, VecBase<T, D>) {} return {}; \
template<typename T, int D> VecBase<bool, D> equal(VecBase<T, D>, VecBase<T, D>) {} }
template<typename T, int D> VecBase<bool, D> notEqual(VecBase<T, D>, VecBase<T, D>) {}
template<int D> bool any(VecBase<bool, D>) {}
template<int D> bool all(VecBase<bool, D>) {}
/* `not` is a C++ keyword. Use dirty macro to allow this. */
template<int D> VecBase<bool, D> not_impl(VecBase<bool, D>) {}
# define not not_impl
template<int D> VecBase<int, D> bitCount(VecBase<int, D>) {} template<typename T, int D> VecBase<bool, D> greaterThan(VecBase<T, D>, VecBase<T, D>) RET;
template<int D> VecBase<int, D> bitCount(VecBase<uint, D>) {} template<typename T, int D> VecBase<bool, D> lessThan(VecBase<T, D>, VecBase<T, D>) RET;
template<int D> VecBase<int, D> bitfieldExtract(VecBase<int, D>, int, int) {} template<typename T, int D> VecBase<bool, D> lessThanEqual(VecBase<T, D>, VecBase<T, D>) RET;
template<int D> VecBase<int, D> bitfieldExtract(VecBase<uint, D>, int, int) {} template<typename T, int D> VecBase<bool, D> greaterThanEqual(VecBase<T, D>, VecBase<T, D>) RET;
template<int D> VecBase<int, D> bitfieldInsert(VecBase<int, D>, VecBase<int, D>, int, int) {} template<typename T, int D> VecBase<bool, D> equal(VecBase<T, D>, VecBase<T, D>) RET;
template<int D> VecBase<int, D> bitfieldInsert(VecBase<uint, D>, VecBase<uint, D>, int, int) {} template<typename T, int D> VecBase<bool, D> notEqual(VecBase<T, D>, VecBase<T, D>) RET;
template<int D> VecBase<int, D> bitfieldReverse(VecBase<int, D>) {} template<int D> bool any(VecBase<bool, D>) RET;
template<int D> VecBase<int, D> bitfieldReverse(VecBase<uint, D>) {} template<int D> bool all(VecBase<bool, D>) RET;
int bitCount(int) {} /* `not` is a C++ keyword that aliases the `!` operator. Simply overload it. */
int bitCount(uint) {} template<int D> VecBase<bool, D> operator!(VecBase<bool, D>) RET;
int bitfieldExtract(int) {}
int bitfieldExtract(uint) {}
int bitfieldInsert(int) {}
int bitfieldInsert(uint) {}
int bitfieldReverse(int) {}
int bitfieldReverse(uint) {}
template<int D> VecBase<int, D> findLSB(VecBase<int, D>) {} template<int D> VecBase<int, D> bitCount(VecBase<int, D>) RET;
template<int D> VecBase<int, D> findLSB(VecBase<uint, D>) {} template<int D> VecBase<int, D> bitCount(VecBase<uint, D>) RET;
template<int D> VecBase<int, D> findMSB(VecBase<int, D>) {} template<int D> VecBase<int, D> bitfieldExtract(VecBase<int, D>, int, int) RET;
template<int D> VecBase<int, D> findMSB(VecBase<uint, D>) {} template<int D> VecBase<int, D> bitfieldExtract(VecBase<uint, D>, int, int) RET;
int findMSB(int) {} template<int D> VecBase<int, D> bitfieldInsert(VecBase<int, D>, VecBase<int, D>, int, int) RET;
int findMSB(uint) {} template<int D> VecBase<int, D> bitfieldInsert(VecBase<uint, D>, VecBase<uint, D>, int, int) RET;
template<int D> VecBase<int, D> bitfieldReverse(VecBase<int, D>) RET;
template<int D> VecBase<int, D> bitfieldReverse(VecBase<uint, D>) RET;
int bitCount(int) RET;
int bitCount(uint) RET;
int bitfieldExtract(int) RET;
int bitfieldExtract(uint) RET;
int bitfieldInsert(int) RET;
int bitfieldInsert(uint) RET;
int bitfieldReverse(int) RET;
int bitfieldReverse(uint) RET;
template<int D> VecBase<int, D> findLSB(VecBase<int, D>) RET;
template<int D> VecBase<int, D> findLSB(VecBase<uint, D>) RET;
template<int D> VecBase<int, D> findMSB(VecBase<int, D>) RET;
template<int D> VecBase<int, D> findMSB(VecBase<uint, D>) RET;
int findMSB(int) RET;
int findMSB(uint) RET;
/* Math Functions. */ /* Math Functions. */
template<typename T> T abs(T) {} template<typename T> T abs(T) RET;
template<typename T> T clamp(T, T, T) {} template<typename T> T clamp(T, T, T) RET;
template<typename T> T max(T, T) {} template<typename T> T max(T, T) RET;
template<typename T> T min(T, T) {} template<typename T> T min(T, T) RET;
template<typename T> T sign(T) {} template<typename T> T sign(T) RET;
template<typename T, typename U> T clamp(T, U, U) {} template<typename T, typename U> T clamp(T, U, U) RET;
template<typename T, typename U> T max(T, U) {} template<typename T, typename U> T max(T, U) RET;
template<typename T, typename U> T min(T, U) {} template<typename T, typename U> T min(T, U) RET;
/* TODO(fclem): These should be restricted to floats. */ /* TODO(fclem): These should be restricted to floats. */
template<typename T> T ceil(T) {} template<typename T> T ceil(T) RET;
template<typename T> T exp(T) {} template<typename T> T exp(T) RET;
template<typename T> T exp2(T) {} template<typename T> T exp2(T) RET;
template<typename T> T floor(T) {} template<typename T> T floor(T) RET;
template<typename T> T fma(T, T, T) {} template<typename T> T fma(T, T, T) RET;
template<typename T> T fract(T) {} template<typename T> T fract(T) RET;
template<typename T> T frexp(T, T) {} template<typename T> T frexp(T, T) RET;
template<typename T> T inversesqrt(T) {} template<typename T> T inversesqrt(T) RET;
template<typename T> T isinf(T) {} template<typename T> T isinf(T) RET;
template<typename T> T isnan(T) {} template<typename T> T isnan(T) RET;
template<typename T> T log(T) {} template<typename T> T log(T) RET;
template<typename T> T log2(T) {} template<typename T> T log2(T) RET;
template<typename T> T mod(T, double); template<typename T> T mod(T, double);
template<typename T> T mod(T, T); template<typename T> T mod(T, T);
template<typename T> T modf(T, T); template<typename T> T modf(T, T);
template<typename T> T pow(T, T) {} template<typename T> T pow(T, T) RET;
template<typename T> T round(T) {} template<typename T> T round(T) RET;
template<typename T> T smoothstep(T, T, T) {} template<typename T> T smoothstep(T, T, T) RET;
template<typename T> T sqrt(T) {} template<typename T> T sqrt(T) RET;
template<typename T> T step(T) {} template<typename T> T step(T) RET;
template<typename T> T trunc(T) {} template<typename T> T trunc(T) RET;
template<typename T, typename U> T ldexp(T, U) {} template<typename T, typename U> T ldexp(T, U) RET;
template<typename T> T acos(T) {} template<typename T> T acos(T) RET;
template<typename T> T acosh(T) {} template<typename T> T acosh(T) RET;
template<typename T> T asin(T) {} template<typename T> T asin(T) RET;
template<typename T> T asinh(T) {} template<typename T> T asinh(T) RET;
template<typename T> T atan(T, T) {} template<typename T> T atan(T, T) RET;
template<typename T> T atan(T) {} template<typename T> T atan(T) RET;
template<typename T> T atanh(T) {} template<typename T> T atanh(T) RET;
template<typename T> T cos(T) {} template<typename T> T cos(T) RET;
template<typename T> T cosh(T) {} template<typename T> T cosh(T) RET;
template<typename T> T sin(T) {} template<typename T> T sin(T) RET;
template<typename T> T sinh(T) {} template<typename T> T sinh(T) RET;
template<typename T> T tan(T) {} template<typename T> T tan(T) RET;
template<typename T> T tanh(T) {} template<typename T> T tanh(T) RET;
template<typename T> T degrees(T) {} template<typename T> T degrees(T) RET;
template<typename T> T radians(T) {} template<typename T> T radians(T) RET;
/* Declared explicitely to avoid type errors. */ /* Declared explicitely to avoid type errors. */
double mix(double, double, double) {} double mix(double, double, double) RET;
template<int D> VecBase<double, D> mix(VecBase<double, D>, VecBase<double, D>, double) {} template<int D> VecBase<double, D> mix(VecBase<double, D>, VecBase<double, D>, double) RET;
template<typename T, int D> VecBase<T, D> mix(VecBase<T, D>, VecBase<T, D>, VecBase<bool, D>) {} template<typename T, int D> VecBase<T, D> mix(VecBase<T, D>, VecBase<T, D>, VecBase<bool, D>) RET;
# define select(A, B, C) mix(A, B, C) # define select(A, B, C) mix(A, B, C)
VecBase<double, 3> cross(VecBase<double, 3>, VecBase<double, 3>) {} VecBase<double, 3> cross(VecBase<double, 3>, VecBase<double, 3>) RET;
template<int D> float dot(VecBase<double, D>, VecBase<double, D>) {} template<int D> float dot(VecBase<double, D>, VecBase<double, D>) RET;
template<int D> float distance(VecBase<double, D>, VecBase<double, D>) {} template<int D> float distance(VecBase<double, D>, VecBase<double, D>) RET;
template<int D> float length(VecBase<double, D>) {} template<int D> float length(VecBase<double, D>) RET;
template<int D> VecBase<double, D> normalize(VecBase<double, D>) {} template<int D> VecBase<double, D> normalize(VecBase<double, D>) RET;
template<int D> VecBase<int, D> floatBitsToInt(VecBase<double, D>) {} template<int D> VecBase<int, D> floatBitsToInt(VecBase<double, D>) RET;
template<int D> VecBase<uint, D> floatBitsToUint(VecBase<double, D>) {} template<int D> VecBase<uint, D> floatBitsToUint(VecBase<double, D>) RET;
template<int D> VecBase<double, D> intBitsToFloat(VecBase<int, D>) {} template<int D> VecBase<double, D> intBitsToFloat(VecBase<int, D>) RET;
template<int D> VecBase<double, D> uintBitsToFloat(VecBase<uint, D>) {} template<int D> VecBase<double, D> uintBitsToFloat(VecBase<uint, D>) RET;
int floatBitsToInt(double) {} int floatBitsToInt(double) RET;
uint floatBitsToUint(double) {} uint floatBitsToUint(double) RET;
double intBitsToFloat(int) {} double intBitsToFloat(int) RET;
double uintBitsToFloat(uint) {} double uintBitsToFloat(uint) RET;
/* Derivative functions. */ /* Derivative functions. */
template<typename T> T dFdx(T) {} template<typename T> T dFdx(T) RET;
template<typename T> T dFdy(T) {} template<typename T> T dFdy(T) RET;
template<typename T> T fwidth(T) {} template<typename T> T fwidth(T) RET;
/* Geometric functions. */ /* Geometric functions. */
template<typename T, int D> float faceforward(VecBase<T, D>, VecBase<T, D>, VecBase<T, D>) {} template<typename T, int D> float faceforward(VecBase<T, D>, VecBase<T, D>, VecBase<T, D>) RET;
template<typename T, int D> float reflect(VecBase<T, D>, VecBase<T, D>) {} template<typename T, int D> float reflect(VecBase<T, D>, VecBase<T, D>) RET;
template<typename T, int D> float refract(VecBase<T, D>, VecBase<T, D>, double) {} template<typename T, int D> float refract(VecBase<T, D>, VecBase<T, D>, double) RET;
/* Atomic operations. */ /* Atomic operations. */
int atomicAdd(int &, int) {} int atomicAdd(int &, int) RET;
int atomicAnd(int &, int) {} int atomicAnd(int &, int) RET;
int atomicOr(int &, int) {} int atomicOr(int &, int) RET;
int atomicXor(int &, int) {} int atomicXor(int &, int) RET;
int atomicMin(int &, int) {} int atomicMin(int &, int) RET;
int atomicMax(int &, int) {} int atomicMax(int &, int) RET;
int atomicExchange(int &, int) {} int atomicExchange(int &, int) RET;
int atomicCompSwap(int &, int, int) {} int atomicCompSwap(int &, int, int) RET;
uint atomicAdd(uint &, uint) {} uint atomicAdd(uint &, uint) RET;
uint atomicAnd(uint &, uint) {} uint atomicAnd(uint &, uint) RET;
uint atomicOr(uint &, uint) {} uint atomicOr(uint &, uint) RET;
uint atomicXor(uint &, uint) {} uint atomicXor(uint &, uint) RET;
uint atomicMin(uint &, uint) {} uint atomicMin(uint &, uint) RET;
uint atomicMax(uint &, uint) {} uint atomicMax(uint &, uint) RET;
uint atomicExchange(uint &, uint) {} uint atomicExchange(uint &, uint) RET;
uint atomicCompSwap(uint &, uint, uint) {} uint atomicCompSwap(uint &, uint, uint) RET;
/* Packing functions. */ /* Packing functions. */
uint packHalf2x16(float2) {} uint packHalf2x16(float2) RET;
uint packUnorm2x16(float2) {} uint packUnorm2x16(float2) RET;
uint packSnorm2x16(float2) {} uint packSnorm2x16(float2) RET;
uint packUnorm4x8(float4) {} uint packUnorm4x8(float4) RET;
uint packSnorm4x8(float4) {} uint packSnorm4x8(float4) RET;
float2 unpackHalf2x16(uint) {} float2 unpackHalf2x16(uint) RET;
float2 unpackUnorm2x16(uint) {} float2 unpackUnorm2x16(uint) RET;
float2 unpackSnorm2x16(uint) {} float2 unpackSnorm2x16(uint) RET;
float4 unpackUnorm4x8(uint) {} float4 unpackUnorm4x8(uint) RET;
float4 unpackSnorm4x8(uint) {} float4 unpackSnorm4x8(uint) RET;
/* Matrices functions. */ /* Matrices functions. */
template<int C, int R> float determinant(MatBase<C, R>) {} template<int C, int R> float determinant(MatBase<C, R>) RET;
template<int C, int R> MatBase<C, R> inverse(MatBase<C, R>) {} template<int C, int R> MatBase<C, R> inverse(MatBase<C, R>) RET;
template<int C, int R> MatBase<R, C> transpose(MatBase<C, R>) {} template<int C, int R> MatBase<R, C> transpose(MatBase<C, R>) RET;
/* TODO(fclem): Should be in a lib instead of being impemented by each backend. */ /* TODO(fclem): Should be in a lib instead of being impemented by each backend. */
bool is_zero(vec2) {} bool is_zero(vec2) RET;
bool is_zero(vec3) {} bool is_zero(vec3) RET;
bool is_zero(vec4) {} bool is_zero(vec4) RET;
# undef RET
/** \} */ /** \} */