mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 11:08:03 +02:00
Implement shadow samplers and dFdx(), dFdy() code generation.
This commit is contained in:
parent
20aec24ac7
commit
855ebb26d1
6 changed files with 120 additions and 70 deletions
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -52,36 +52,48 @@
|
|||
119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,98,51,100,0,18,95,95,114,101,116,86,
|
||||
97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,0,12,0,116,101,
|
||||
120,116,117,114,101,67,117,98,101,0,1,1,0,19,115,97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,
|
||||
114,100,0,0,1,1,0,9,98,105,97,115,0,0,0,1,4,118,101,99,52,95,116,101,120,99,117,98,101,0,18,95,95,
|
||||
114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,18,98,105,97,
|
||||
115,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,0,1,1,0,20,115,97,109,112,108,101,114,0,0,1,1,0,
|
||||
11,99,111,111,114,100,0,0,1,1,0,9,98,105,97,115,0,0,0,1,4,118,101,99,52,95,115,104,97,100,49,100,0,
|
||||
18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,18,
|
||||
98,105,97,115,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,80,114,111,106,0,1,1,0,20,115,97,109,
|
||||
112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,1,1,0,9,98,105,97,115,0,0,0,1,8,58,115,104,97,
|
||||
100,111,119,49,68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,
|
||||
59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,17,48,0,48,0,0,0,18,99,111,111,114,100,0,59,112,0,
|
||||
18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,115,104,97,100,111,
|
||||
119,50,68,0,1,1,0,21,115,97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,1,1,0,9,98,105,
|
||||
97,115,0,0,0,1,4,118,101,99,52,95,115,104,97,100,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,
|
||||
115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,18,98,105,97,115,0,0,0,0,1,0,12,0,115,104,
|
||||
97,100,111,119,50,68,80,114,111,106,0,1,1,0,21,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,
|
||||
114,100,0,0,1,1,0,9,98,105,97,115,0,0,0,1,8,58,115,104,97,100,111,119,50,68,0,18,115,97,109,112,
|
||||
108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,
|
||||
0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,
|
||||
100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,0,0,0,1,0,9,0,100,70,
|
||||
100,120,0,1,0,0,9,112,0,0,0,1,8,17,48,0,48,48,49,0,0,0,0,1,0,10,0,100,70,100,120,0,1,0,0,10,112,0,
|
||||
0,0,1,8,58,118,101,99,50,0,17,48,0,48,48,49,0,0,0,0,0,0,1,0,11,0,100,70,100,120,0,1,0,0,11,112,0,0,
|
||||
0,1,8,58,118,101,99,51,0,17,48,0,48,48,49,0,0,0,0,0,0,1,0,12,0,100,70,100,120,0,1,0,0,12,112,0,0,0,
|
||||
1,8,58,118,101,99,52,0,17,48,0,48,48,49,0,0,0,0,0,0,1,0,9,0,100,70,100,121,0,1,0,0,9,112,0,0,0,1,8,
|
||||
17,48,0,48,48,49,0,0,0,0,1,0,10,0,100,70,100,121,0,1,0,0,10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,
|
||||
0,48,48,49,0,0,0,0,0,0,1,0,11,0,100,70,100,121,0,1,0,0,11,112,0,0,0,1,8,58,118,101,99,51,0,17,48,0,
|
||||
48,48,49,0,0,0,0,0,0,1,0,12,0,100,70,100,121,0,1,0,0,12,112,0,0,0,1,8,58,118,101,99,52,0,17,48,0,
|
||||
48,48,49,0,0,0,0,0,0,1,0,9,0,102,119,105,100,116,104,0,1,0,0,9,112,0,0,0,1,8,58,97,98,115,0,58,100,
|
||||
70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,10,0,
|
||||
102,119,105,100,116,104,0,1,0,0,10,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,
|
||||
0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,11,0,102,119,105,100,116,104,0,1,
|
||||
0,0,11,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,
|
||||
100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,12,0,102,119,105,100,116,104,0,1,0,0,12,112,0,0,0,1,8,58,97,
|
||||
98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,
|
||||
46,0,0,0
|
||||
114,100,0,0,1,1,0,9,98,105,97,115,0,0,0,1,3,2,0,12,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,
|
||||
114,100,52,0,59,120,121,122,0,18,99,111,111,114,100,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,
|
||||
18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,99,117,98,101,0,18,95,95,114,101,116,86,97,
|
||||
108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,0,12,0,115,104,97,100,
|
||||
111,119,49,68,0,1,1,0,20,115,97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,1,1,0,9,98,
|
||||
105,97,115,0,0,0,1,3,2,0,12,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,
|
||||
122,0,18,99,111,111,114,100,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,98,105,97,115,0,20,0,4,
|
||||
118,101,99,52,95,116,101,120,98,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,
|
||||
101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,80,114,111,106,
|
||||
0,1,1,0,20,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,1,1,0,9,98,105,97,115,0,
|
||||
0,0,1,3,2,0,12,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0,18,99,111,111,
|
||||
114,100,0,59,120,0,18,99,111,111,114,100,0,59,119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,122,0,
|
||||
18,99,111,111,114,100,0,59,122,0,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,
|
||||
0,4,118,101,99,52,95,116,101,120,98,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,
|
||||
108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,0,1,1,0,21,
|
||||
115,97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,1,1,0,9,98,105,97,115,0,0,0,1,3,2,0,
|
||||
12,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,122,0,18,99,111,111,114,
|
||||
100,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,
|
||||
101,120,98,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,
|
||||
111,114,100,52,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,1,0,21,115,97,109,
|
||||
112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,1,1,0,9,98,105,97,115,0,0,0,1,3,2,0,12,1,112,
|
||||
99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,120,
|
||||
121,0,18,99,111,111,114,100,0,59,119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,122,0,18,99,111,
|
||||
111,114,100,0,59,122,0,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,0,4,118,
|
||||
101,99,52,95,116,101,120,98,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,
|
||||
114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,0,9,0,100,70,100,120,0,1,1,0,9,112,0,0,0,1,4,118,101,
|
||||
99,52,95,100,100,120,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,112,0,59,120,120,120,120,0,0,
|
||||
0,0,1,0,10,0,100,70,100,120,0,1,1,0,10,112,0,0,0,1,4,118,101,99,52,95,100,100,120,0,18,95,95,114,
|
||||
101,116,86,97,108,0,59,120,121,0,0,18,112,0,59,120,121,121,121,0,0,0,0,1,0,11,0,100,70,100,120,0,1,
|
||||
1,0,11,112,0,0,0,1,4,118,101,99,52,95,100,100,120,0,18,95,95,114,101,116,86,97,108,0,59,120,121,
|
||||
122,0,0,18,112,0,59,120,121,122,122,0,0,0,0,1,0,12,0,100,70,100,120,0,1,1,0,12,112,0,0,0,1,4,118,
|
||||
101,99,52,95,100,100,120,0,18,95,95,114,101,116,86,97,108,0,0,18,112,0,0,0,0,1,0,9,0,100,70,100,
|
||||
121,0,1,1,0,9,112,0,0,0,1,4,118,101,99,52,95,100,100,121,0,18,95,95,114,101,116,86,97,108,0,59,120,
|
||||
0,0,18,112,0,59,120,120,120,120,0,0,0,0,1,0,10,0,100,70,100,121,0,1,1,0,10,112,0,0,0,1,4,118,101,
|
||||
99,52,95,100,100,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,112,0,59,120,121,121,121,
|
||||
0,0,0,0,1,0,11,0,100,70,100,121,0,1,1,0,11,112,0,0,0,1,4,118,101,99,52,95,100,100,121,0,18,95,95,
|
||||
114,101,116,86,97,108,0,59,120,121,122,0,0,18,112,0,59,120,121,122,122,0,0,0,0,1,0,12,0,100,70,100,
|
||||
121,0,1,1,0,12,112,0,0,0,1,4,118,101,99,52,95,100,100,121,0,18,95,95,114,101,116,86,97,108,0,0,18,
|
||||
112,0,0,0,0,1,0,9,0,102,119,105,100,116,104,0,1,1,0,9,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,
|
||||
120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,10,0,102,119,
|
||||
105,100,116,104,0,1,1,0,10,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,
|
||||
98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,11,0,102,119,105,100,116,104,0,1,1,0,11,
|
||||
112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,
|
||||
0,18,112,0,0,0,0,0,46,0,0,1,0,12,0,102,119,105,100,116,104,0,1,1,0,12,112,0,0,0,1,8,58,97,98,115,0,
|
||||
58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,0
|
||||
|
|
|
|||
|
|
@ -756,6 +756,8 @@ static const struct
|
|||
{"vec4_texcube", slang_asm_vec4_texcube, slang_asm_none},
|
||||
{"vec4_shad1d", slang_asm_vec4_shad1d, slang_asm_none},
|
||||
{"vec4_shad2d", slang_asm_vec4_shad2d, slang_asm_none},
|
||||
{"vec4_ddx", 0, slang_asm_none},
|
||||
{"vec4_ddy", 0, slang_asm_none},
|
||||
/* GL_MESA_shader_debug */
|
||||
{"float_print", slang_asm_float_deref, slang_asm_float_print},
|
||||
{"int_print", slang_asm_int_deref, slang_asm_int_print},
|
||||
|
|
|
|||
|
|
@ -619,6 +619,8 @@ static slang_asm_info AsmInfo[] = {
|
|||
{ "vec4_frac", IR_FRAC, 1, 1 },
|
||||
{ "vec4_abs", IR_ABS, 1, 1 },
|
||||
{ "vec4_negate", IR_NEG, 1, 1 },
|
||||
{ "vec4_ddx", IR_DDX, 1, 1 },
|
||||
{ "vec4_ddy", IR_DDY, 1, 1 },
|
||||
/* float binary op */
|
||||
{ "float_add", IR_ADD, 1, 2 },
|
||||
{ "float_subtract", IR_SUB, 1, 2 },
|
||||
|
|
|
|||
|
|
@ -77,6 +77,8 @@ static slang_ir_info IrInfo[] = {
|
|||
{ IR_FRAC, "IR_FRAC", OPCODE_FRC, 4, 1 },
|
||||
{ IR_ABS, "IR_ABS", OPCODE_ABS, 4, 1 },
|
||||
{ IR_NEG, "IR_NEG", 0/*spec case*/, 4, 1 },
|
||||
{ IR_DDX, "IR_DDX", OPCODE_DDX, 4, 1 },
|
||||
{ IR_DDX, "IR_DDY", OPCODE_DDX, 4, 1 },
|
||||
{ IR_SIN, "IR_SIN", OPCODE_SIN, 1, 1 },
|
||||
{ IR_COS, "IR_COS", OPCODE_COS, 1, 1 },
|
||||
/* other */
|
||||
|
|
@ -701,6 +703,8 @@ emit(slang_gen_context *gc, slang_ir_node *n, struct gl_program *prog)
|
|||
case IR_ABS:
|
||||
case IR_SIN:
|
||||
case IR_COS:
|
||||
case IR_DDX:
|
||||
case IR_DDY:
|
||||
return emit_unop(gc, n, prog);
|
||||
case IR_TEX:
|
||||
case IR_TEXB:
|
||||
|
|
|
|||
|
|
@ -74,6 +74,8 @@ typedef enum
|
|||
IR_FRAC,
|
||||
IR_ABS, /* absolute value */
|
||||
IR_NEG, /* negate */
|
||||
IR_DDX, /* derivative w.r.t. X */
|
||||
IR_DDY, /* derivative w.r.t. Y */
|
||||
IR_SIN, /* sine */
|
||||
IR_COS, /* cosine */
|
||||
IR_NOT, /* logical not */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue