summaryrefslogtreecommitdiff
path: root/src/mesa/shader/slang/library/slang_fragment_builtin.gc
diff options
context:
space:
mode:
authorBrian <brian@yutani.localnet.net>2007-01-09 09:14:32 -0700
committerBrian <brian@yutani.localnet.net>2007-01-09 09:14:32 -0700
commit855ebb26d1868d4c1e61a90c1533154b97bd41ff (patch)
tree0b694189dce4658bd36af46f51e70fcfb6ea91ff /src/mesa/shader/slang/library/slang_fragment_builtin.gc
parent20aec24ac7b4fba169dc6889b093f4dcc2c62bb6 (diff)
Implement shadow samplers and dFdx(), dFdy() code generation.
Diffstat (limited to 'src/mesa/shader/slang/library/slang_fragment_builtin.gc')
-rw-r--r--src/mesa/shader/slang/library/slang_fragment_builtin.gc102
1 files changed, 65 insertions, 37 deletions
diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin.gc b/src/mesa/shader/slang/library/slang_fragment_builtin.gc
index 1c099a673b..034672370a 100644
--- a/src/mesa/shader/slang/library/slang_fragment_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_fragment_builtin.gc
@@ -120,28 +120,48 @@ vec4 texture3DProj(const sampler3D sampler, const vec4 coord, const float bias)
vec4 textureCube(const samplerCube sampler, const vec3 coord, const float bias)
{
- __asm vec4_texcube __retVal, sampler, coord, bias;
+ vec4 coord4;
+ coord4.xyz = coord;
+ coord4.w = bias;
+ __asm vec4_texcube __retVal, sampler, coord4;
}
+// 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)
{
- __asm vec4_shad1d __retVal, sampler, coord, 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)
{
- return shadow1D (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), 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)
{
- __asm vec4_shad2d __retVal, sampler, coord, 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)
{
- return shadow2D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), bias);
+ vec4 pcoord;
+ pcoord.xy = coord.xy / coord.w;
+ pcoord.z = coord.z;
+ pcoord.w = bias;
+ __asm vec4_texb2d __retVal, sampler, pcoord;
}
@@ -152,59 +172,67 @@ vec4 shadow2DProj(const sampler2DShadow sampler, const vec4 coord, const float b
// 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));
}