From: Alexis Hetu Date: Tue, 3 Oct 2017 17:56:07 +0000 (-0400) Subject: Fix for 3D texture sampling X-Git-Tag: android-x86-7.1-r3~346 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=42e5303dcf62a82ab26142fa755ebd01992d0c1e;p=android-x86%2Fexternal-swiftshader.git Fix for 3D texture sampling 3D texture sampling did not support width*height > MAX_USHORT(65535). Changed for 32 bit integer computation for that multiplication to solve this issue. Verified with 3D texture related dEQP tests. Bug b/26105892 chromium:763382 Change-Id: Ifd07278f6263d000620a0b525c07ed4fcbdcf2e7 Reviewed-on: https://swiftshader-review.googlesource.com/12988 Reviewed-by: Nicolas Capens Tested-by: Alexis Hétu --- diff --git a/src/Shader/SamplerCore.cpp b/src/Shader/SamplerCore.cpp index 290f4020c..cf02699bb 100644 --- a/src/Shader/SamplerCore.cpp +++ b/src/Shader/SamplerCore.cpp @@ -1695,19 +1695,20 @@ namespace sw wwww = applyOffset(wwww, offset.z, Int4(*Pointer(mipmap + OFFSET(Mipmap, depth))), texelFetch ? ADDRESSING_TEXELFETCH : state.addressingModeW); } } - Short4 www2 = wwww; - wwww = As(UnpackLow(wwww, Short4(0x0000))); - www2 = As(UnpackHigh(www2, Short4(0x0000))); - wwww = As(MulAdd(wwww, *Pointer(mipmap + OFFSET(Mipmap,sliceP)))); - www2 = As(MulAdd(www2, *Pointer(mipmap + OFFSET(Mipmap,sliceP)))); - uuuu = As(As(uuuu) + As(wwww)); - uuu2 = As(As(uuu2) + As(www2)); - } - - index[0] = Extract(As(uuuu), 0); - index[1] = Extract(As(uuuu), 1); - index[2] = Extract(As(uuu2), 0); - index[3] = Extract(As(uuu2), 1); + UInt4 uv(As(uuuu), As(uuu2)); + uv += As(Int4(As(wwww))) * *Pointer(mipmap + OFFSET(Mipmap, sliceP)); + index[0] = Extract(As(uv), 0); + index[1] = Extract(As(uv), 1); + index[2] = Extract(As(uv), 2); + index[3] = Extract(As(uv), 3); + } + else + { + index[0] = Extract(As(uuuu), 0); + index[1] = Extract(As(uuuu), 1); + index[2] = Extract(As(uuu2), 0); + index[3] = Extract(As(uuu2), 1); + } if(texelFetch) {