.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R

.fi
..
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.hy 0
.if n .na
.bd B 3
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.IX Title "ddy Cg"
.TH ddy Cg "" "Cg Toolkit 2.2" "Cg Standard Library"
.UC
.SH "NAME"
\&\fBddy\fR \- returns approximate partial derivative with respect to window-space Y
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 5
\&  float  ddy(float a);
\&  float1 ddy(float1 a);
\&  float2 ddy(float2 a);
\&  float3 ddy(float3 a);
\&  float4 ddy(float4 a);
.Ve
.Vb 5
\&  half   ddy(half a);
\&  half1  ddy(half1 a);
\&  half2  ddy(half2 a);
\&  half3  ddy(half3 a);
\&  half4  ddy(half4 a);
.Ve
.Vb 5
\&  fixed  ddy(fixed a);
\&  fixed1 ddy(fixed1 a);
\&  fixed2 ddy(fixed2 a);
\&  fixed3 ddy(fixed3 a);
\&  fixed4 ddy(fixed4 a);
.Ve
.SH "PARAMETERS"
.IX Header "PARAMETERS"
.Ip "a" 8
.IX Item "a"
Vector or scalar of which to approximate the partial derivative with
respect to window-space Y.
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
Returns approximate partial derivative of \fIa\fR with respect to the
window-space (vertical) \fIy\fR coordinate.
.PP
For vectors, the returned vector contains the approximate partial
derivative of each element of the input vector.
.PP
This function is only available in fragment program profiles (but not
all of them).
.PP
The specific way the partial derivative is computed is
implementation-dependent.  Typically fragments are rasterized in
2x2 arrangements of fragments (called quad-fragments) and the partial
derivatives of a variable is computed by differencing with the adjacent
horizontal fragment in the quad-fragment.
.PP
The partial derivative computation may incorrect when \fBddy\fR is used in
control flow paths where not all the fragments within a quad-fragment
have branched the same way.
.PP
The partial derivative computation may be less exact (wobbly) when
the variable is computed based on varying parameters interpolated with
centroid interpolation.
.SH "REFERENCE IMPLEMENTATION"
.IX Header "REFERENCE IMPLEMENTATION"
\&\fBddy\fR is not expressible in Cg code.
.SH "PROFILE SUPPORT"
.IX Header "PROFILE SUPPORT"
\&\fBddy\fR is supported only in fragment profiles.  Vertex and geometry
profiles lack the concept of window space.
.PP
\&\fBddy\fR is unsupported in the fp20, ps_1_1, ps_1_2, ps_1_3, and arbfp1 profiles.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
ddx, fp30, fp40, fwidth, gp4fp
