Commit 3b96fa85 by Alexis Hetu Committed by Nicolas Capens

Fix array texture LOD computation.

2D array textures use 2D LOD calculations, not 3D. Change-Id: I0ce834bc4afb63dfeba3d9662105ffdaa07028da Reviewed-on: https://swiftshader-review.googlesource.com/4716Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent c8b97857
......@@ -62,9 +62,6 @@ namespace sw
}
#endif
bool cubeTexture = state.textureType == TEXTURE_CUBE;
bool volumeTexture = state.textureType == TEXTURE_3D || state.textureType == TEXTURE_2D_ARRAY;
Float4 uuuu = u;
Float4 vvvv = v;
Float4 wwww = w;
......@@ -90,7 +87,7 @@ namespace sw
Float4 lodU;
Float4 lodV;
if(cubeTexture)
if(state.textureType == TEXTURE_CUBE)
{
cubeFace(face, uuuu, vvvv, lodU, lodV, u, v, w);
}
......@@ -100,9 +97,9 @@ namespace sw
Float4 uDelta;
Float4 vDelta;
if(!volumeTexture)
if(state.textureType != TEXTURE_3D)
{
if(!cubeTexture)
if(state.textureType != TEXTURE_CUBE)
{
computeLod(texture, lod, anisotropy, uDelta, vDelta, uuuu, vvvv, q.x, dsx, dsy, bias, gradients, lodProvided);
}
......@@ -116,7 +113,7 @@ namespace sw
computeLod3D(texture, lod, uuuu, vvvv, wwww, q.x, dsx, dsy, bias, gradients, lodProvided);
}
if(cubeTexture)
if(state.textureType == TEXTURE_CUBE)
{
uuuu += Float4(0.5f);
vvvv += Float4(0.5f);
......@@ -301,9 +298,6 @@ namespace sw
}
#endif
bool cubeTexture = state.textureType == TEXTURE_CUBE;
bool volumeTexture = state.textureType == TEXTURE_3D || state.textureType == TEXTURE_2D_ARRAY;
if(state.textureType == TEXTURE_NULL)
{
c.x = Float4(0.0f);
......@@ -323,7 +317,7 @@ namespace sw
Float4 lodU;
Float4 lodV;
if(cubeTexture)
if(state.textureType == TEXTURE_CUBE)
{
cubeFace(face, uuuu, vvvv, lodU, lodV, u, v, w);
}
......@@ -333,9 +327,9 @@ namespace sw
Float4 uDelta;
Float4 vDelta;
if(!volumeTexture)
if(state.textureType != TEXTURE_3D)
{
if(!cubeTexture)
if(state.textureType != TEXTURE_CUBE)
{
computeLod(texture, lod, anisotropy, uDelta, vDelta, uuuu, vvvv, q.x, dsx, dsy, bias, gradients, lodProvided);
}
......@@ -349,7 +343,7 @@ namespace sw
computeLod3D(texture, lod, uuuu, vvvv, wwww, q.x, dsx, dsy, bias, gradients, lodProvided);
}
if(cubeTexture)
if(state.textureType == TEXTURE_CUBE)
{
uuuu += Float4(0.5f);
vvvv += Float4(0.5f);
......@@ -590,8 +584,6 @@ namespace sw
void SamplerCore::sampleFilter(Pointer<Byte> &texture, Vector4s &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool lodProvided)
{
bool volumeTexture = state.textureType == TEXTURE_3D || state.textureType == TEXTURE_2D_ARRAY;
sampleAniso(texture, c, u, v, w, lod, anisotropy, uDelta, vDelta, face, false, lodProvided);
if(state.mipmapFilter > MIPMAP_POINT)
......@@ -656,7 +648,7 @@ namespace sw
}
}
if(state.addressingModeW == ADDRESSING_BORDER && volumeTexture)
if(state.addressingModeW == ADDRESSING_BORDER && state.textureType == TEXTURE_3D)
{
Short4 s0;
......@@ -675,7 +667,7 @@ namespace sw
if(state.addressingModeU == ADDRESSING_BORDER ||
state.addressingModeV == ADDRESSING_BORDER ||
(state.addressingModeW == ADDRESSING_BORDER && volumeTexture))
(state.addressingModeW == ADDRESSING_BORDER && state.textureType == TEXTURE_3D))
{
Short4 b;
......@@ -1107,8 +1099,6 @@ namespace sw
void SamplerCore::sampleFloatFilter(Pointer<Byte> &texture, Vector4f &c, Float4 &u, Float4 &v, Float4 &w, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Int face[4], bool lodProvided)
{
bool volumeTexture = state.textureType == TEXTURE_3D || state.textureType == TEXTURE_2D_ARRAY;
sampleFloatAniso(texture, c, u, v, w, lod, anisotropy, uDelta, vDelta, face, false, lodProvided);
if(state.mipmapFilter > MIPMAP_POINT)
......@@ -1152,7 +1142,7 @@ namespace sw
}
}
if(state.addressingModeW == ADDRESSING_BORDER && volumeTexture)
if(state.addressingModeW == ADDRESSING_BORDER && state.textureType == TEXTURE_3D)
{
Int4 s0;
......@@ -1171,7 +1161,7 @@ namespace sw
if(state.addressingModeU == ADDRESSING_BORDER ||
state.addressingModeV == ADDRESSING_BORDER ||
(state.addressingModeW == ADDRESSING_BORDER && volumeTexture))
(state.addressingModeW == ADDRESSING_BORDER && state.textureType == TEXTURE_3D))
{
Int4 b;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment