X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=builtin_data%2F_builtin.glsl;h=61e7519f79eb1c19b4d8e8e0d63e50f195acbc03;hb=c672560f6815986879d87d4886cd1bad292a3cee;hp=cfd67272cb699ab989100b7f245869f42eb3c2de;hpb=cae521f02bda5988ed2f1a9ae5c09734f6fa2352;p=libs%2Fgl.git diff --git a/builtin_data/_builtin.glsl b/builtin_data/_builtin.glsl index cfd67272..61e7519f 100644 --- a/builtin_data/_builtin.glsl +++ b/builtin_data/_builtin.glsl @@ -18,6 +18,10 @@ typedef vector(2) int ivec2; typedef vector(3) int ivec3; typedef vector(4) int ivec4; +typedef vector(2) bool bvec2; +typedef vector(3) bool bvec3; +typedef vector(4) bool bvec4; + typedef image(dimensions=1, sampled) float sampler1D; typedef image(dimensions=2, sampled) float sampler2D; typedef image(dimensions=3, sampled) float sampler3D; @@ -33,6 +37,14 @@ typedef image(dimensions=cube, shadow, sampled) float samplerCubeShadow; typedef image(dimensions=cube[], shadow, sampled) float samplerCubeArrayShadow; // BEGIN BUILTIN FUNCTIONS +float radians(float degrees); +vec2 radians(vec2 degrees); +vec3 radians(vec3 degrees); +vec4 radians(vec4 degrees); +float degrees(float radians); +vec2 degrees(vec2 radians); +vec3 degrees(vec3 radians); +vec4 degrees(vec4 radians); float sin(float angle); vec2 sin(vec2 angle); vec3 sin(vec3 angle); @@ -57,6 +69,10 @@ float atan(float y, float x); vec2 atan(vec2 y, vec2 x); vec3 atan(vec3 y, vec3 x); vec4 atan(vec4 y, vec4 x); +float atan(float y_over_x); +vec2 atan(vec2 y_over_x); +vec3 atan(vec3 y_over_x); +vec4 atan(vec4 y_over_x); float sinh(float angle); vec2 sinh(vec2 angle); vec3 sinh(vec3 angle); @@ -209,6 +225,14 @@ vec4 mix(vec4 x, vec4 y, vec4 a); vec2 mix(vec2 x, vec2 y, float a); vec3 mix(vec3 x, vec3 y, float a); vec4 mix(vec4 x, vec4 y, float a); +float mix(float x, float y, bool a); +vec2 mix(vec2 x, vec2 y, bvec2 a); +vec3 mix(vec3 x, vec3 y, bvec3 a); +vec4 mix(vec4 x, vec4 y, bvec4 a); +int mix(int x, int y, bool a); +ivec2 mix(ivec2 x, ivec2 y, bvec2 a); +ivec3 mix(ivec3 x, ivec3 y, bvec3 a); +ivec4 mix(ivec4 x, ivec4 y, bvec4 a); float step(float edge, float x); vec2 step(vec2 edge, vec2 x); vec3 step(vec3 edge, vec3 x); @@ -223,10 +247,34 @@ vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x); vec2 smoothstep(float edge0, float edge1, vec2 x); vec3 smoothstep(float edge0, float edge1, vec3 x); vec4 smoothstep(float edge0, float edge1, vec4 x); +bool isnan(float x); +bvec2 isnan(vec2 x); +bvec3 isnan(vec3 x); +bvec4 isnan(vec4 x); +bool isinf(float x); +bvec2 isinf(vec2 x); +bvec3 isinf(vec3 x); +bvec4 isinf(vec4 x); +int floatBitsToInt(float value); +ivec2 floatBitsToInt(vec2 value); +ivec3 floatBitsToInt(vec3 value); +ivec4 floatBitsToInt(vec4 value); +float intBitsToFloat(int value); +vec2 intBitsToFloat(ivec2 value); +vec3 intBitsToFloat(ivec3 value); +vec4 intBitsToFloat(ivec4 value); float fma(float a, float b, float c); vec2 fma(vec2 a, vec2 b, vec2 c); vec3 fma(vec3 a, vec3 b, vec3 c); vec4 fma(vec4 a, vec4 b, vec4 c); +float frexp(float x, out int exp); +vec2 frexp(vec2 x, out ivec2 exp); +vec3 frexp(vec3 x, out ivec3 exp); +vec4 frexp(vec4 x, out ivec4 exp); +float ldexp(float x, int exp); +vec2 ldexp(vec2 x, ivec2 exp); +vec3 ldexp(vec3 x, ivec3 exp); +vec4 ldexp(vec4 x, ivec4 exp); float length(float x); float length(vec2 x); float length(vec3 x); @@ -265,15 +313,103 @@ mat2x4 matrixCompMult(mat2x4 x, mat2x4 y); mat4x2 matrixCompMult(mat4x2 x, mat4x2 y); mat3x4 matrixCompMult(mat3x4 x, mat3x4 y); mat4x3 matrixCompMult(mat4x3 x, mat4x3 y); +mat2 outerProduct(vec2 c, vec2 r); +mat3 outerProduct(vec3 c, vec3 r); +mat4 outerProduct(vec4 c, vec4 r); +mat2x3 outerProduct(vec3 c, vec2 r); +mat3x2 outerProduct(vec2 c, vec3 r); +mat2x4 outerProduct(vec4 c, vec2 r); +mat4x2 outerProduct(vec2 c, vec4 r); +mat3x4 outerProduct(vec4 c, vec3 r); +mat4x3 outerProduct(vec3 c, vec4 r); mat2 transpose(mat2 m); mat3 transpose(mat3 m); mat4 transpose(mat4 m); +mat3x2 transpose(mat2x3 m); +mat2x3 transpose(mat3x2 m); +mat4x2 transpose(mat2x4 m); +mat2x4 transpose(mat4x2 m); +mat4x3 transpose(mat3x4 m); +mat3x4 transpose(mat4x3 m); mat2 determinant(mat2 m); mat3 determinant(mat3 m); mat4 determinant(mat4 m); mat2 inverse(mat2 m); mat3 inverse(mat3 m); mat4 inverse(mat4 m); +bvec2 lessThan(vec2 x, vec2 y); +bvec3 lessThan(vec3 x, vec3 y); +bvec4 lessThan(vec4 x, vec4 y); +bvec2 lessThan(ivec2 x, ivec2 y); +bvec3 lessThan(ivec3 x, ivec3 y); +bvec4 lessThan(ivec4 x, ivec4 y); +bvec2 lessThanEqual(vec2 x, vec2 y); +bvec3 lessThanEqual(vec3 x, vec3 y); +bvec4 lessThanEqual(vec4 x, vec4 y); +bvec2 lessThanEqual(ivec2 x, ivec2 y); +bvec3 lessThanEqual(ivec3 x, ivec3 y); +bvec4 lessThanEqual(ivec4 x, ivec4 y); +bvec2 greaterThan(vec2 x, vec2 y); +bvec3 greaterThan(vec3 x, vec3 y); +bvec4 greaterThan(vec4 x, vec4 y); +bvec2 greaterThan(ivec2 x, ivec2 y); +bvec3 greaterThan(ivec3 x, ivec3 y); +bvec4 greaterThan(ivec4 x, ivec4 y); +bvec2 greaterThanEqual(vec2 x, vec2 y); +bvec3 greaterThanEqual(vec3 x, vec3 y); +bvec4 greaterThanEqual(vec4 x, vec4 y); +bvec2 greaterThanEqual(ivec2 x, ivec2 y); +bvec3 greaterThanEqual(ivec3 x, ivec3 y); +bvec4 greaterThanEqual(ivec4 x, ivec4 y); +bvec2 equal(vec2 x, vec2 y); +bvec3 equal(vec3 x, vec3 y); +bvec4 equal(vec4 x, vec4 y); +bvec2 equal(ivec2 x, ivec2 y); +bvec3 equal(ivec3 x, ivec3 y); +bvec4 equal(ivec4 x, ivec4 y); +bvec2 notEqual(vec2 x, vec2 y); +bvec3 notEqual(vec3 x, vec3 y); +bvec4 notEqual(vec4 x, vec4 y); +bvec2 notEqual(ivec2 x, ivec2 y); +bvec3 notEqual(ivec3 x, ivec3 y); +bvec4 notEqual(ivec4 x, ivec4 y); +bool any(bvec2 x); +bool any(bvec3 x); +bool any(bvec4 x); +bool all(bvec2 x); +bool all(bvec3 x); +bool all(bvec4 x); +bool not(bvec2 x); +bool not(bvec3 x); +bool not(bvec4 x); +void imulExtended(int x, int y, out int msb, out int lsb); +void imulExtended(ivec2 x, ivec2 y, out ivec2 msb, out ivec2 lsb); +void imulExtended(ivec3 x, ivec3 y, out ivec3 msb, out ivec3 lsb); +void imulExtended(ivec4 x, ivec4 y, out ivec4 msb, out ivec4 lsb); +int bitfieldExtract(int value, int offset, int bits); +ivec2 bitfieldExtract(ivec2 value, int offset, int bits); +ivec3 bitfieldExtract(ivec3 value, int offset, int bits); +ivec4 bitfieldExtract(ivec4 value, int offset, int bits); +int bitfieldInsert(int value, int insert, int offset, int bits); +ivec2 bitfieldInsert(ivec2 value, ivec2 insert, int offset, int bits); +ivec3 bitfieldInsert(ivec3 value, ivec3 insert, int offset, int bits); +ivec4 bitfieldInsert(ivec4 value, ivec4 insert, int offset, int bits); +int bitfieldReverse(int value); +ivec2 bitfieldReverse(ivec2 value); +ivec3 bitfieldReverse(ivec3 value); +ivec4 bitfieldReverse(ivec4 value); +int bitCount(int value); +ivec2 bitCount(ivec2 value); +ivec3 bitCount(ivec3 value); +ivec4 bitCount(ivec4 value); +int findLSB(int value); +ivec2 findLSB(ivec2 value); +ivec3 findLSB(ivec3 value); +ivec4 findLSB(ivec4 value); +int findMSB(int value); +ivec2 findMSB(ivec2 value); +ivec3 findMSB(ivec3 value); +ivec4 findMSB(ivec4 value); int textureSize(sampler1D sampler, int lod); ivec2 textureSize(sampler2D sampler, int lod); ivec3 textureSize(sampler3D sampler, int lod); @@ -315,9 +451,12 @@ vec4 texelFetch(sampler2DArray sampler, ivec3 P, int lod); // END BUILTIN FUNCTIONS #pragma MSP stage(vertex) +in int gl_VertexID; +in int gl_InstanceID; out gl_PerVertex { vec4 gl_Position; + float gl_PointSize; float gl_ClipDistance[]; }; @@ -325,13 +464,80 @@ out gl_PerVertex in gl_PerVertex { vec4 gl_Position; + float gl_PointSize; float gl_ClipDistance[]; } gl_in[]; +in int gl_PrimitiveIDIn; out gl_PerVertex { vec4 gl_Position; + float gl_PointSize; float gl_ClipDistance[]; }; +out int gl_PrimitiveID; +out int gl_Layer; void EmitVertex(); void EndPrimitive(); + +#pragma MSP stage(fragment) +// BEGIN BUILTIN FRAGMENT FUNCTIONS +float dFdx(float p); +vec2 dFdx(vec2 p); +vec3 dFdx(vec3 p); +vec4 dFdx(vec4 p); +float dFdy(float p); +vec2 dFdy(vec2 p); +vec3 dFdy(vec3 p); +vec4 dFdy(vec4 p); +float dFdxFine(float p); +vec2 dFdxFine(vec2 p); +vec3 dFdxFine(vec3 p); +vec4 dFdxFine(vec4 p); +float dFdyFine(float p); +vec2 dFdyFine(vec2 p); +vec3 dFdyFine(vec3 p); +vec4 dFdyFine(vec4 p); +float dFdxCoarse(float p); +vec2 dFdxCoarse(vec2 p); +vec3 dFdxCoarse(vec3 p); +vec4 dFdxCoarse(vec4 p); +float dFdyCoarse(float p); +vec2 dFdyCoarse(vec2 p); +vec3 dFdyCoarse(vec3 p); +vec4 dFdyCoarse(vec4 p); +float fwidth(float p); +vec2 fwidth(vec2 p); +vec3 fwidth(vec3 p); +vec4 fwidth(vec4 p); +float fwidthFine(float p); +vec2 fwidthFine(vec2 p); +vec3 fwidthFine(vec3 p); +vec4 fwidthFine(vec4 p); +float fwidthCoarse(float p); +vec2 fwidthCoarse(vec2 p); +vec3 fwidthCoarse(vec3 p); +vec4 fwidthCoarse(vec4 p); +float interpolateAtCentroid(float interpolant); +vec2 interpolateAtCentroid(vec2 interpolant); +vec3 interpolateAtCentroid(vec3 interpolant); +vec4 interpolateAtCentroid(vec4 interpolant); +float interpolateAtSample(float interpolant, int sample); +vec2 interpolateAtSample(vec2 interpolant, int sample); +vec3 interpolateAtSample(vec3 interpolant, int sample); +vec4 interpolateAtSample(vec4 interpolant, int sample); +float interpolateAtOffset(float interpolant, vec2 offset); +vec2 interpolateAtOffset(vec2 interpolant, vec2 offset); +vec3 interpolateAtOffset(vec3 interpolant, vec2 offset); +vec4 interpolateAtOffset(vec4 interpolant, vec2 offset); +// END BUILTIN FRAGMENT FUNCTIONS + +in vec4 gl_FragCoord; +in bool gl_FrontFacing; +in float gl_ClipDistance[]; +in vec2 gl_PointCoord; +in int gl_PrimitiveID; +in int gl_SampleID; +in vec2 gl_SamplePosition; +in int gl_Layer; +out float gl_FragDepth;