diff options
Diffstat (limited to 'src/mesa/shader/slang/library/slang_fragment_builtin.gc')
-rw-r--r--[-rwxr-xr-x] | src/mesa/shader/slang/library/slang_fragment_builtin.gc | 260 |
1 files changed, 182 insertions, 78 deletions
diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin.gc b/src/mesa/shader/slang/library/slang_fragment_builtin.gc index 373b42de1d..9a7e17bdaf 100755..100644 --- a/src/mesa/shader/slang/library/slang_fragment_builtin.gc +++ b/src/mesa/shader/slang/library/slang_fragment_builtin.gc @@ -23,11 +23,6 @@ */ // -// TODO: -// - implement dFdx, dFdy, -// - -// // From Shader Spec, ver. 1.10, rev. 59 // @@ -42,131 +37,240 @@ varying vec4 gl_SecondaryColor; varying vec4 gl_TexCoord[gl_MaxTextureCoords]; varying float gl_FogFragCoord; -// -// 8.7 Texture Lookup Functions -// -vec4 texture1D (sampler1D sampler, float coord, float bias) { - vec4 texel; - __asm vec4_tex1d texel, sampler, coord, bias; - return texel; + +//// 8.7 Texture Lookup Functions (with bias) + +vec4 texture1D(const sampler1D sampler, const float coord, const float bias) +{ + vec4 coord4; + coord4.x = coord; + coord4.w = bias; + __asm vec4_texb1d __retVal, sampler, coord4; } -vec4 texture1DProj (sampler1D sampler, vec2 coord, float bias) { - return texture1D (sampler, coord.s / coord.t, bias); +vec4 texture1DProj(const sampler1D sampler, const vec2 coord, const float bias) +{ + // do projection here (there's no vec4_texbp1d instruction) + vec4 pcoord; + pcoord.x = coord.x / coord.y; + pcoord.w = bias; + __asm vec4_texb1d __retVal, sampler, pcoord; } -vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias) { - return texture1D (sampler, coord.s / coord.q, bias); +vec4 texture1DProj(const sampler1D sampler, const vec4 coord, const float bias) +{ + // do projection here (there's no vec4_texbp1d instruction) + vec4 pcoord; + pcoord.x = coord.x / coord.z; + pcoord.w = bias; + __asm vec4_texb1d __retVal, sampler, pcoord; } -vec4 texture2D (sampler2D sampler, vec2 coord, float bias) { - vec4 texel; - __asm vec4_tex2d texel, sampler, coord, bias; - return texel; + + + +vec4 texture2D(const sampler2D sampler, const vec2 coord, const float bias) +{ + vec4 coord4; + coord4.xy = coord.xy; + coord4.w = bias; + __asm vec4_texb2d __retVal, sampler, coord4; } -vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias) { - return texture2D (sampler, vec2 (coord.s / coord.p, coord.t / coord.p), bias); +vec4 texture2DProj(const sampler2D sampler, const vec3 coord, const float bias) +{ + // do projection here (there's no vec4_texbp2d instruction) + vec4 pcoord; + pcoord.xy = coord.xy / coord.z; + pcoord.w = bias; + __asm vec4_texb2d __retVal, sampler, pcoord; } -vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias) { - return texture2D (sampler, vec2 (coord.s / coord.q, coord.t / coord.q), bias); +vec4 texture2DProj(const sampler2D sampler, const vec4 coord, const float bias) +{ + // do projection here (there's no vec4_texbp2d instruction) + vec4 pcoord; + pcoord.xy = coord.xy / coord.w; + pcoord.w = bias; + __asm vec4_texb2d __retVal, sampler, pcoord; } -vec4 texture3D (sampler3D sampler, vec3 coord, float bias) { - vec4 texel; - __asm vec4_tex3d texel, sampler, coord, bias; - return texel; + + + +vec4 texture3D(const sampler3D sampler, const vec3 coord, const float bias) +{ + vec4 coord4; + coord4.xyz = coord.xyz; + coord4.w = bias; + __asm vec4_texb3d __retVal, sampler, coord4; } -vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias) { - return texture3D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), bias); +vec4 texture3DProj(const sampler3D sampler, const vec4 coord, const float bias) +{ + // do projection here (there's no vec4_texbp3d instruction) + vec4 pcoord; + pcoord.xyz = coord.xyz / coord.w; + pcoord.w = bias; + __asm vec4_texb3d __retVal, sampler, pcoord; } -vec4 textureCube (samplerCube sampler, vec3 coord, float bias) { - vec4 texel; - __asm vec4_texcube texel, sampler, coord, bias; - return texel; + + + +vec4 textureCube(const samplerCube sampler, const vec3 coord, const float bias) +{ + vec4 coord4; + coord4.xyz = coord; + coord4.w = bias; + __asm vec4_texcube __retVal, sampler, coord4; } -vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias) { - vec4 texel; - __asm vec4_shad1d texel, sampler, coord, bias; - return texel; + + + +// For shadow textures, we use the regular tex instructions since they should +// do the depth comparison step. + +vec4 shadow1D(const sampler1DShadow sampler, const vec3 coord, const float bias) +{ + vec4 coord4; + coord4.xyz = coord; + coord4.w = bias; + __asm vec4_texb1d __retVal, sampler, coord4; +} + +vec4 shadow1DProj(const sampler1DShadow sampler, const vec4 coord, const float bias) +{ + vec4 pcoord; + pcoord.x = coord.x / coord.w; + pcoord.z = coord.z; + pcoord.w = bias; + __asm vec4_texb1d __retVal, sampler, pcoord; +} + + + + +vec4 shadow2D(const sampler2DShadow sampler, const vec3 coord, const float bias) +{ + vec4 coord4; + coord4.xyz = coord; + coord4.w = bias; + __asm vec4_texb2d __retVal, sampler, coord4; +} + +vec4 shadow2DProj(const sampler2DShadow sampler, const vec4 coord, const float bias) +{ + vec4 pcoord; + pcoord.xy = coord.xy / coord.w; + pcoord.z = coord.z; + pcoord.w = bias; + __asm vec4_texb2d __retVal, sampler, pcoord; +} + + + +//// GL_ARB_texture_rectangle: +vec4 texture2DRect(const sampler2DRect sampler, const vec2 coord) +{ + __asm vec4_tex_rect __retVal, sampler, coord; } -vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias) { - return shadow1D (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), bias); +vec4 texture2DRectProj(const sampler2DRect sampler, const vec3 coord) +{ + // do projection here + vec4 pcoord; + pcoord.xy = coord.xy / coord.z; + __asm vec4_texp_rect __retVal, sampler, pcoord; } -vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias) { - vec4 texel; - __asm vec4_shad2d texel, sampler, coord, bias; - return texel; +vec4 texture2DRectProj(const sampler2DRect sampler, const vec4 coord) +{ + // do projection here + vec4 pcoord; + pcoord.xy = coord.xy / coord.w; + __asm vec4_texp_rect __retVal, sampler, pcoord; } -vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias) { - return shadow2D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), bias); +vec4 shadow2DRect(const sampler2DRectShadow sampler, const vec3 coord) +{ +// XXX to do } +vec4 shadow2DRectProj(const sampler2DRectShadow sampler, const vec4 coord) +{ +// XXX to do +} + + + // // 8.8 Fragment Processing Functions // -float dFdx (float p) { - // XXX: - return 0.001; +float dFdx(const float p) +{ + __asm vec4_ddx __retVal.x, p.xxxx; } -vec2 dFdx (vec2 p) { - // XXX: - return vec2 (0.001); +vec2 dFdx(const vec2 p) +{ + __asm vec4_ddx __retVal.xy, p.xyyy; } -vec3 dFdx (vec3 p) { - // XXX: - return vec3 (0.001); +vec3 dFdx(const vec3 p) +{ + __asm vec4_ddx __retVal.xyz, p.xyzz; } -vec4 dFdx (vec4 p) { - // XXX: - return vec4 (0.001); +vec4 dFdx(const vec4 p) +{ + __asm vec4_ddx __retVal, p; } -float dFdy (float p) { - // XXX: - return 0.001; +float dFdy(const float p) +{ + __asm vec4_ddy __retVal.x, p.xxxx; } -vec2 dFdy (vec2 p) { - // XXX: - return vec2 (0.001); +vec2 dFdy(const vec2 p) +{ + __asm vec4_ddy __retVal.xy, p.xyyy; } -vec3 dFdy (vec3 p) { - // XXX: - return vec3 (0.001); +vec3 dFdy(const vec3 p) +{ + __asm vec4_ddy __retVal.xyz, p.xyzz; } -vec4 dFdy (vec4 p) { - // XXX: - return vec4 (0.001); +vec4 dFdy(const vec4 p) +{ + __asm vec4_ddy __retVal, p; } -float fwidth (float p) { - return abs (dFdx (p)) + abs (dFdy (p)); +float fwidth (const float p) +{ + // XXX hand-write with __asm + return abs(dFdx(p)) + abs(dFdy(p)); } -vec2 fwidth (vec2 p) { - return abs (dFdx (p)) + abs (dFdy (p)); +vec2 fwidth(const vec2 p) +{ + // XXX hand-write with __asm + return abs(dFdx(p)) + abs(dFdy(p)); } -vec3 fwidth (vec3 p) { - return abs (dFdx (p)) + abs (dFdy (p)); +vec3 fwidth(const vec3 p) +{ + // XXX hand-write with __asm + return abs(dFdx(p)) + abs(dFdy(p)); } -vec4 fwidth (vec4 p) { - return abs (dFdx (p)) + abs (dFdy (p)); +vec4 fwidth(const vec4 p) +{ + // XXX hand-write with __asm + return abs(dFdx(p)) + abs(dFdy(p)); } |