Avoid passing around the SamplerFunction as a parameter Nearly every member function of the SamplerCore class was taking a SamplerFunction structure as a parameter. This refactoring takes it during construction instead and makes it accessible as a member data field, just like the `state` member. Bug: b/210880838 Change-Id: Ib0620b3a17f60f73a093ccb01d02ca6dbe1a0fd7 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/60948 Kokoro-Result: kokoro <noreply+kokoro@google.com> Tested-by: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp index b3585d5..8c49337 100644 --- a/src/Pipeline/SamplerCore.cpp +++ b/src/Pipeline/SamplerCore.cpp
@@ -21,12 +21,13 @@ namespace sw { -SamplerCore::SamplerCore(Pointer<Byte> &constants, const Sampler &state) +SamplerCore::SamplerCore(Pointer<Byte> &constants, const Sampler &state, SamplerFunction function) : constants(constants) , state(state) + , function(function) { } -Vector4f SamplerCore::sampleTexture(Pointer<Byte> &texture, Float4 uvwa[4], Float4 &dRef, Float &&lodOrBias, Float4 &dsx, Float4 &dsy, Vector4i &offset, Int4 &sample, SamplerFunction function) +Vector4f SamplerCore::sampleTexture(Pointer<Byte> &texture, Float4 uvwa[4], Float4 &dRef, Float &&lodOrBias, Float4 &dsx, Float4 &dsy, Vector4i &offset, Int4 &sample) { Vector4f c; @@ -68,19 +69,19 @@ { if(state.is1D()) { - computeLod1D(texture, lod, u, dsx, dsy, function); + computeLod1D(texture, lod, u, dsx, dsy); } else if(state.is2D()) { - computeLod2D(texture, lod, anisotropy, uDelta, vDelta, u, v, dsx, dsy, function); + computeLod2D(texture, lod, anisotropy, uDelta, vDelta, u, v, dsx, dsy); } else if(state.isCube()) { - computeLodCube(texture, lod, uvwa[0], uvwa[1], uvwa[2], dsx, dsy, M, function); + computeLodCube(texture, lod, uvwa[0], uvwa[1], uvwa[2], dsx, dsy, M); } else { - computeLod3D(texture, lod, u, v, w, dsx, dsy, function); + computeLod3D(texture, lod, u, v, w, dsx, dsy); } Float bias = state.mipLodBias; @@ -146,11 +147,11 @@ if(use32BitFiltering) { - c = sampleFloatFilter(texture, u, v, w, a, dRef, offset, sample, lod, anisotropy, uDelta, vDelta, function); + c = sampleFloatFilter(texture, u, v, w, a, dRef, offset, sample, lod, anisotropy, uDelta, vDelta); } else // 16-bit filtering. { - Vector4s cs = sampleFilter(texture, u, v, w, a, offset, sample, lod, anisotropy, uDelta, vDelta, function); + Vector4s cs = sampleFilter(texture, u, v, w, a, offset, sample, lod, anisotropy, uDelta, vDelta); for(int component = 0; component < numComponents; component++) { @@ -280,9 +281,9 @@ return uvw; } -Vector4s SamplerCore::sampleFilter(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Vector4i &offset, const Int4 &sample, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, SamplerFunction function) +Vector4s SamplerCore::sampleFilter(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Vector4i &offset, const Int4 &sample, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta) { - Vector4s c = sampleAniso(texture, u, v, w, a, offset, sample, lod, anisotropy, uDelta, vDelta, false, function); + Vector4s c = sampleAniso(texture, u, v, w, a, offset, sample, lod, anisotropy, uDelta, vDelta, false); if(function == Fetch) { @@ -291,12 +292,12 @@ if(state.mipmapFilter == MIPMAP_LINEAR) { - Vector4s cc = sampleAniso(texture, u, v, w, a, offset, sample, lod, anisotropy, uDelta, vDelta, true, function); + Vector4s cc = sampleAniso(texture, u, v, w, a, offset, sample, lod, anisotropy, uDelta, vDelta, true); lod *= Float(1 << 16); - UShort4 utri = UShort4(Float4(lod)); // FIXME: Optimize - Short4 stri = utri >> 1; // FIXME: Optimize + UShort4 utri = UShort4(Float4(lod)); // TODO: Optimize + Short4 stri = utri >> 1; // TODO: Optimize if(hasUnsignedTextureComponent(0)) cc.x = MulHigh(As<UShort4>(cc.x), utri); @@ -349,13 +350,13 @@ return c; } -Vector4s SamplerCore::sampleAniso(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Vector4i &offset, const Int4 &sample, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, bool secondLOD, SamplerFunction function) +Vector4s SamplerCore::sampleAniso(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Vector4i &offset, const Int4 &sample, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, bool secondLOD) { Vector4s c; if(state.textureFilter != FILTER_ANISOTROPIC) { - c = sampleQuad(texture, u, v, w, a, offset, sample, lod, secondLOD, function); + c = sampleQuad(texture, u, v, w, a, offset, sample, lod, secondLOD); } else { @@ -386,7 +387,7 @@ Do { - c = sampleQuad(texture, u0, v0, w, a, offset, sample, lod, secondLOD, function); + c = sampleQuad(texture, u0, v0, w, a, offset, sample, lod, secondLOD); u0 += du; v0 += dv; @@ -433,19 +434,19 @@ return c; } -Vector4s SamplerCore::sampleQuad(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD, SamplerFunction function) +Vector4s SamplerCore::sampleQuad(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD) { if(state.textureType != VK_IMAGE_VIEW_TYPE_3D) { - return sampleQuad2D(texture, u, v, w, a, offset, sample, lod, secondLOD, function); + return sampleQuad2D(texture, u, v, w, a, offset, sample, lod, secondLOD); } else { - return sample3D(texture, u, v, w, offset, sample, lod, secondLOD, function); + return sample3D(texture, u, v, w, offset, sample, lod, secondLOD); } } -Vector4s SamplerCore::sampleQuad2D(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD, SamplerFunction function) +Vector4s SamplerCore::sampleQuad2D(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD) { Vector4s c; @@ -458,11 +459,11 @@ Short4 uuuu = address(u, state.addressingModeU, mipmap); Short4 vvvv = address(v, state.addressingModeV, mipmap); Short4 wwww = address(w, state.addressingModeW, mipmap); - Short4 layerIndex = computeLayerIndex(a, mipmap); + Short4 layerIndex = computeLayerIndex16(a, mipmap); if(state.textureFilter == FILTER_POINT) { - c = sampleTexel(uuuu, vvvv, wwww, layerIndex, offset, sample, mipmap, buffer, function); + c = sampleTexel(uuuu, vvvv, wwww, layerIndex, offset, sample, mipmap, buffer); } else { @@ -471,10 +472,10 @@ Short4 uuuu1 = offsetSample(uuuu, mipmap, OFFSET(Mipmap, uHalf), state.addressingModeU == ADDRESSING_WRAP, +1, lod); Short4 vvvv1 = offsetSample(vvvv, mipmap, OFFSET(Mipmap, vHalf), state.addressingModeV == ADDRESSING_WRAP, +1, lod); - Vector4s c00 = sampleTexel(uuuu0, vvvv0, wwww, layerIndex, offset, sample, mipmap, buffer, function); - Vector4s c10 = sampleTexel(uuuu1, vvvv0, wwww, layerIndex, offset, sample, mipmap, buffer, function); - Vector4s c01 = sampleTexel(uuuu0, vvvv1, wwww, layerIndex, offset, sample, mipmap, buffer, function); - Vector4s c11 = sampleTexel(uuuu1, vvvv1, wwww, layerIndex, offset, sample, mipmap, buffer, function); + Vector4s c00 = sampleTexel(uuuu0, vvvv0, wwww, layerIndex, offset, sample, mipmap, buffer); + Vector4s c10 = sampleTexel(uuuu1, vvvv0, wwww, layerIndex, offset, sample, mipmap, buffer); + Vector4s c01 = sampleTexel(uuuu0, vvvv1, wwww, layerIndex, offset, sample, mipmap, buffer); + Vector4s c11 = sampleTexel(uuuu1, vvvv1, wwww, layerIndex, offset, sample, mipmap, buffer); if(!gather) // Blend { @@ -647,7 +648,7 @@ return c; } -Vector4s SamplerCore::sample3D(Pointer<Byte> &texture, Float4 &u_, Float4 &v_, Float4 &w_, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD, SamplerFunction function) +Vector4s SamplerCore::sample3D(Pointer<Byte> &texture, Float4 &u_, Float4 &v_, Float4 &w_, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD) { Vector4s c_; @@ -662,7 +663,7 @@ if(state.textureFilter == FILTER_POINT) { - c_ = sampleTexel(uuuu, vvvv, wwww, 0, offset, sample, mipmap, buffer, function); + c_ = sampleTexel(uuuu, vvvv, wwww, 0, offset, sample, mipmap, buffer); } else { @@ -734,7 +735,7 @@ { for(int k = 0; k < 2; k++) { - c[i][j][k] = sampleTexel(u[i][j][k], v[i][j][k], s[i][j][k], 0, offset, sample, mipmap, buffer, function); + c[i][j][k] = sampleTexel(u[i][j][k], v[i][j][k], s[i][j][k], 0, offset, sample, mipmap, buffer); if(componentCount >= 1) { @@ -795,9 +796,9 @@ return c_; } -Vector4f SamplerCore::sampleFloatFilter(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, SamplerFunction function) +Vector4f SamplerCore::sampleFloatFilter(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta) { - Vector4f c = sampleFloatAniso(texture, u, v, w, a, dRef, offset, sample, lod, anisotropy, uDelta, vDelta, false, function); + Vector4f c = sampleFloatAniso(texture, u, v, w, a, dRef, offset, sample, lod, anisotropy, uDelta, vDelta, false); if(function == Fetch) { @@ -806,7 +807,7 @@ if(state.mipmapFilter == MIPMAP_LINEAR) { - Vector4f cc = sampleFloatAniso(texture, u, v, w, a, dRef, offset, sample, lod, anisotropy, uDelta, vDelta, true, function); + Vector4f cc = sampleFloatAniso(texture, u, v, w, a, dRef, offset, sample, lod, anisotropy, uDelta, vDelta, true); Float4 lod4 = Float4(Frac(lod)); @@ -819,13 +820,13 @@ return c; } -Vector4f SamplerCore::sampleFloatAniso(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, bool secondLOD, SamplerFunction function) +Vector4f SamplerCore::sampleFloatAniso(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, bool secondLOD) { Vector4f c; if(state.textureFilter != FILTER_ANISOTROPIC) { - c = sampleFloat(texture, u, v, w, a, dRef, offset, sample, lod, secondLOD, function); + c = sampleFloat(texture, u, v, w, a, dRef, offset, sample, lod, secondLOD); } else { @@ -854,7 +855,7 @@ Do { - c = sampleFloat(texture, u0, v0, w, a, dRef, offset, sample, lod, secondLOD, function); + c = sampleFloat(texture, u0, v0, w, a, dRef, offset, sample, lod, secondLOD); u0 += du; v0 += dv; @@ -877,19 +878,19 @@ return c; } -Vector4f SamplerCore::sampleFloat(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD, SamplerFunction function) +Vector4f SamplerCore::sampleFloat(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD) { if(state.textureType != VK_IMAGE_VIEW_TYPE_3D) { - return sampleFloat2D(texture, u, v, w, a, dRef, offset, sample, lod, secondLOD, function); + return sampleFloat2D(texture, u, v, w, a, dRef, offset, sample, lod, secondLOD); } else { - return sampleFloat3D(texture, u, v, w, dRef, offset, sample, lod, secondLOD, function); + return sampleFloat3D(texture, u, v, w, dRef, offset, sample, lod, secondLOD); } } -Vector4f SamplerCore::sampleFloat2D(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD, SamplerFunction function) +Vector4f SamplerCore::sampleFloat2D(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, const Float4 &a, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD) { Vector4f c; @@ -902,8 +903,8 @@ Int4 x0, x1, y0, y1; Float4 fu, fv; Int4 filter = computeFilterOffset(lod); - address(u, x0, x1, fu, mipmap, offset.x, filter, OFFSET(Mipmap, width), state.addressingModeU, function); - address(v, y0, y1, fv, mipmap, offset.y, filter, OFFSET(Mipmap, height), state.addressingModeV, function); + address(u, x0, x1, fu, mipmap, offset.x, filter, OFFSET(Mipmap, width), state.addressingModeU); + address(v, y0, y1, fv, mipmap, offset.y, filter, OFFSET(Mipmap, height), state.addressingModeV); Int4 pitchP = *Pointer<Int4>(mipmap + OFFSET(Mipmap, pitchP), 16); y0 *= pitchP; @@ -912,7 +913,7 @@ if(state.isCube() || state.isArrayed()) { Int4 face = As<Int4>(w); - Int4 layerIndex = computeLayerIndex(a, mipmap, function); + Int4 layerIndex = computeLayerIndex(a, mipmap); // For cube maps, the layer argument is per cube, each of which has 6 layers if(state.textureType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY) @@ -932,16 +933,16 @@ if(state.textureFilter == FILTER_POINT || (function == Fetch)) { - c = sampleTexel(x0, y0, z, dRef, sample, mipmap, buffer, function); + c = sampleTexel(x0, y0, z, dRef, sample, mipmap, buffer); } else { y1 *= pitchP; - Vector4f c00 = sampleTexel(x0, y0, z, dRef, sample, mipmap, buffer, function); - Vector4f c10 = sampleTexel(x1, y0, z, dRef, sample, mipmap, buffer, function); - Vector4f c01 = sampleTexel(x0, y1, z, dRef, sample, mipmap, buffer, function); - Vector4f c11 = sampleTexel(x1, y1, z, dRef, sample, mipmap, buffer, function); + Vector4f c00 = sampleTexel(x0, y0, z, dRef, sample, mipmap, buffer); + Vector4f c10 = sampleTexel(x1, y0, z, dRef, sample, mipmap, buffer); + Vector4f c01 = sampleTexel(x0, y1, z, dRef, sample, mipmap, buffer); + Vector4f c11 = sampleTexel(x1, y1, z, dRef, sample, mipmap, buffer); if(!gather) // Blend { @@ -982,7 +983,7 @@ return c; } -Vector4f SamplerCore::sampleFloat3D(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD, SamplerFunction function) +Vector4f SamplerCore::sampleFloat3D(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Float4 &dRef, Vector4i &offset, const Int4 &sample, Float &lod, bool secondLOD) { Vector4f c; @@ -994,9 +995,9 @@ Int4 x0, x1, y0, y1, z0, z1; Float4 fu, fv, fw; Int4 filter = computeFilterOffset(lod); - address(u, x0, x1, fu, mipmap, offset.x, filter, OFFSET(Mipmap, width), state.addressingModeU, function); - address(v, y0, y1, fv, mipmap, offset.y, filter, OFFSET(Mipmap, height), state.addressingModeV, function); - address(w, z0, z1, fw, mipmap, offset.z, filter, OFFSET(Mipmap, depth), state.addressingModeW, function); + address(u, x0, x1, fu, mipmap, offset.x, filter, OFFSET(Mipmap, width), state.addressingModeU); + address(v, y0, y1, fv, mipmap, offset.y, filter, OFFSET(Mipmap, height), state.addressingModeV); + address(w, z0, z1, fw, mipmap, offset.z, filter, OFFSET(Mipmap, depth), state.addressingModeW); Int4 pitchP = *Pointer<Int4>(mipmap + OFFSET(Mipmap, pitchP), 16); Int4 sliceP = *Pointer<Int4>(mipmap + OFFSET(Mipmap, sliceP), 16); @@ -1005,21 +1006,21 @@ if(state.textureFilter == FILTER_POINT || (function == Fetch)) { - c = sampleTexel(x0, y0, z0, dRef, sample, mipmap, buffer, function); + c = sampleTexel(x0, y0, z0, dRef, sample, mipmap, buffer); } else { y1 *= pitchP; z1 *= sliceP; - Vector4f c000 = sampleTexel(x0, y0, z0, dRef, sample, mipmap, buffer, function); - Vector4f c100 = sampleTexel(x1, y0, z0, dRef, sample, mipmap, buffer, function); - Vector4f c010 = sampleTexel(x0, y1, z0, dRef, sample, mipmap, buffer, function); - Vector4f c110 = sampleTexel(x1, y1, z0, dRef, sample, mipmap, buffer, function); - Vector4f c001 = sampleTexel(x0, y0, z1, dRef, sample, mipmap, buffer, function); - Vector4f c101 = sampleTexel(x1, y0, z1, dRef, sample, mipmap, buffer, function); - Vector4f c011 = sampleTexel(x0, y1, z1, dRef, sample, mipmap, buffer, function); - Vector4f c111 = sampleTexel(x1, y1, z1, dRef, sample, mipmap, buffer, function); + Vector4f c000 = sampleTexel(x0, y0, z0, dRef, sample, mipmap, buffer); + Vector4f c100 = sampleTexel(x1, y0, z0, dRef, sample, mipmap, buffer); + Vector4f c010 = sampleTexel(x0, y1, z0, dRef, sample, mipmap, buffer); + Vector4f c110 = sampleTexel(x1, y1, z0, dRef, sample, mipmap, buffer); + Vector4f c001 = sampleTexel(x0, y0, z1, dRef, sample, mipmap, buffer); + Vector4f c101 = sampleTexel(x1, y0, z1, dRef, sample, mipmap, buffer); + Vector4f c011 = sampleTexel(x0, y1, z1, dRef, sample, mipmap, buffer); + Vector4f c111 = sampleTexel(x1, y1, z1, dRef, sample, mipmap, buffer); // Blend first slice if(componentCount >= 1) c000.x = c000.x + fu * (c100.x - c000.x); @@ -1082,7 +1083,7 @@ return lod; } -void SamplerCore::computeLod1D(Pointer<Byte> &texture, Float &lod, Float4 &uuuu, Float4 &dsx, Float4 &dsy, SamplerFunction function) +void SamplerCore::computeLod1D(Pointer<Byte> &texture, Float &lod, Float4 &uuuu, Float4 &dsx, Float4 &dsy) { Float4 dudxy; @@ -1106,7 +1107,7 @@ lod = log2sqrt(lod); } -void SamplerCore::computeLod2D(Pointer<Byte> &texture, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Float4 &uuuu, Float4 &vvvv, Float4 &dsx, Float4 &dsy, SamplerFunction function) +void SamplerCore::computeLod2D(Pointer<Byte> &texture, Float &lod, Float &anisotropy, Float4 &uDelta, Float4 &vDelta, Float4 &uuuu, Float4 &vvvv, Float4 &dsx, Float4 &dsy) { Float4 duvdxy; @@ -1154,7 +1155,7 @@ lod = log2sqrt(lod); // log2(sqrt(lod)) } -void SamplerCore::computeLodCube(Pointer<Byte> &texture, Float &lod, Float4 &u, Float4 &v, Float4 &w, Float4 &dsx, Float4 &dsy, Float4 &M, SamplerFunction function) +void SamplerCore::computeLodCube(Pointer<Byte> &texture, Float &lod, Float4 &u, Float4 &v, Float4 &w, Float4 &dsx, Float4 &dsy, Float4 &M) { Float4 dudxy, dvdxy, dsdxy; @@ -1187,7 +1188,7 @@ dudxy = Max(Max(duvdxy, dusdxy), dvsdxy); - lod = Max(Float(dudxy.y), Float(dudxy.z)); // FIXME: Max(dudxy.y, dudxy.z); + lod = Max(Float(dudxy.y), Float(dudxy.z)); // TODO: Max(dudxy.y, dudxy.z); // Scale by texture dimension. lod *= *Pointer<Float>(texture + OFFSET(Texture, width)); @@ -1195,7 +1196,7 @@ lod = log2(lod); } -void SamplerCore::computeLod3D(Pointer<Byte> &texture, Float &lod, Float4 &uuuu, Float4 &vvvv, Float4 &wwww, Float4 &dsx, Float4 &dsy, SamplerFunction function) +void SamplerCore::computeLod3D(Pointer<Byte> &texture, Float &lod, Float4 &uuuu, Float4 &vvvv, Float4 &wwww, Float4 &dsx, Float4 &dsy) { Float4 dudxy, dvdxy, dsdxy; @@ -1224,7 +1225,7 @@ dudxy += dvdxy; dudxy += dsdxy; - lod = Max(Float(dudxy.y), Float(dudxy.z)); // FIXME: Max(dudxy.y, dudxy.z); + lod = Max(Float(dudxy.y), Float(dudxy.z)); // TODO: Max(dudxy.y, dudxy.z); lod = log2sqrt(lod); // log2(sqrt(lod)) } @@ -1300,7 +1301,7 @@ case AddressingMode::ADDRESSING_CLAMP: case AddressingMode::ADDRESSING_MIRROR: case AddressingMode::ADDRESSING_MIRRORONCE: - case AddressingMode::ADDRESSING_BORDER: // FIXME: Implement and test ADDRESSING_MIRROR, ADDRESSING_MIRRORONCE, ADDRESSING_BORDER + case AddressingMode::ADDRESSING_BORDER: // TODO(b/29069044): Implement and test ADDRESSING_MIRROR, ADDRESSING_MIRRORONCE, ADDRESSING_BORDER tmp = Min(Max(tmp, Int4(0)), whd - Int4(1)); break; case AddressingMode::ADDRESSING_SEAMLESS: @@ -1312,7 +1313,7 @@ return As<Short4>(UShort4(tmp)); } -void SamplerCore::computeIndices(UInt index[4], Short4 uuuu, Short4 vvvv, Short4 wwww, const Short4 &layerIndex, Vector4i &offset, const Int4 &sample, const Pointer<Byte> &mipmap, SamplerFunction function) +void SamplerCore::computeIndices(UInt index[4], Short4 uuuu, Short4 vvvv, Short4 wwww, const Short4 &layerIndex, Vector4i &offset, const Int4 &sample, const Pointer<Byte> &mipmap) { uuuu = MulHigh(As<UShort4>(uuuu), UShort4(*Pointer<Int4>(mipmap + OFFSET(Mipmap, width)))); @@ -1379,7 +1380,7 @@ index[3] = Extract(indices, 3); } -void SamplerCore::computeIndices(UInt index[4], Int4 uuuu, Int4 vvvv, Int4 wwww, const Int4 &sample, Int4 valid, const Pointer<Byte> &mipmap, SamplerFunction function) +void SamplerCore::computeIndices(UInt index[4], Int4 uuuu, Int4 vvvv, Int4 wwww, const Int4 &sample, Int4 valid, const Pointer<Byte> &mipmap) { UInt4 indices = uuuu; @@ -1717,12 +1718,12 @@ return c; } -Vector4s SamplerCore::sampleTexel(Short4 &uuuu, Short4 &vvvv, Short4 &wwww, const Short4 &layerIndex, Vector4i &offset, const Int4 &sample, Pointer<Byte> &mipmap, Pointer<Byte> buffer, SamplerFunction function) +Vector4s SamplerCore::sampleTexel(Short4 &uuuu, Short4 &vvvv, Short4 &wwww, const Short4 &layerIndex, Vector4i &offset, const Int4 &sample, Pointer<Byte> &mipmap, Pointer<Byte> buffer) { Vector4s c; UInt index[4]; - computeIndices(index, uuuu, vvvv, wwww, layerIndex, offset, sample, mipmap, function); + computeIndices(index, uuuu, vvvv, wwww, layerIndex, offset, sample, mipmap); if(isYcbcrFormat()) { @@ -1743,7 +1744,7 @@ // Chroma { - computeIndices(index, uuuu, vvvv, wwww, layerIndex, offset, sample, mipmap + sizeof(Mipmap), function); + computeIndices(index, uuuu, vvvv, wwww, layerIndex, offset, sample, mipmap + sizeof(Mipmap)); UShort4 U, V; if(state.textureFormat == VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM) @@ -1866,7 +1867,7 @@ return c; } -Vector4f SamplerCore::sampleTexel(Int4 &uuuu, Int4 &vvvv, Int4 &wwww, Float4 &dRef, const Int4 &sample, Pointer<Byte> &mipmap, Pointer<Byte> buffer, SamplerFunction function) +Vector4f SamplerCore::sampleTexel(Int4 &uuuu, Int4 &vvvv, Int4 &wwww, Float4 &dRef, const Int4 &sample, Pointer<Byte> &mipmap, Pointer<Byte> buffer) { Int4 valid; @@ -1880,7 +1881,7 @@ } UInt index[4]; - computeIndices(index, uuuu, vvvv, wwww, sample, valid, mipmap, function); + computeIndices(index, uuuu, vvvv, wwww, sample, valid, mipmap); Vector4f c; @@ -1907,7 +1908,7 @@ t2 = Int4(*Pointer<UShort4>(buffer + index[2] * 4)); t3 = Int4(*Pointer<UShort4>(buffer + index[3] * 4)); - // FIXME: shuffles + // TODO: shuffles c.x = As<Float4>(halfToFloatBits(t0)); c.y = As<Float4>(halfToFloatBits(t1)); c.z = As<Float4>(halfToFloatBits(t2)); @@ -1930,7 +1931,7 @@ case VK_FORMAT_R32_SINT: case VK_FORMAT_R32_UINT: case VK_FORMAT_D32_SFLOAT: - // FIXME: Optimal shuffling? + // TODO: Optimal shuffling? c.x.x = *Pointer<Float>(buffer + index[0] * 4); c.x.y = *Pointer<Float>(buffer + index[1] * 4); c.x.z = *Pointer<Float>(buffer + index[2] * 4); @@ -1939,7 +1940,7 @@ case VK_FORMAT_R32G32_SFLOAT: case VK_FORMAT_R32G32_SINT: case VK_FORMAT_R32G32_UINT: - // FIXME: Optimal shuffling? + // TODO: Optimal shuffling? c.x.xy = *Pointer<Float4>(buffer + index[0] * 8); c.x.zw = *Pointer<Float4>(buffer + index[1] * 8 - 8); c.z.xy = *Pointer<Float4>(buffer + index[2] * 8); @@ -2210,7 +2211,7 @@ } } -Short4 SamplerCore::computeLayerIndex(const Float4 &a, Pointer<Byte> &mipmap) +Short4 SamplerCore::computeLayerIndex16(const Float4 &a, Pointer<Byte> &mipmap) { if(!state.isArrayed()) { @@ -2236,7 +2237,7 @@ return (positive & x) | (~positive & (x + d)); } -void SamplerCore::address(const Float4 &uvw, Int4 &xyz0, Int4 &xyz1, Float4 &f, Pointer<Byte> &mipmap, Int4 &offset, Int4 &filter, int whd, AddressingMode addressingMode, SamplerFunction function) +void SamplerCore::address(const Float4 &uvw, Int4 &xyz0, Int4 &xyz1, Float4 &f, Pointer<Byte> &mipmap, Int4 &offset, Int4 &filter, int whd, AddressingMode addressingMode) { if(addressingMode == ADDRESSING_UNUSED) { @@ -2413,7 +2414,7 @@ UNREACHABLE("addressingMode %d", int(addressingMode)); // Cube sampling doesn't support offset. case ADDRESSING_MIRROR: case ADDRESSING_MIRRORONCE: - // TODO: Implement ADDRESSING_MIRROR and ADDRESSING_MIRRORONCE. + // TODO(b/29069044): Implement ADDRESSING_MIRROR and ADDRESSING_MIRRORONCE. // Fall through to Clamp. case ADDRESSING_CLAMP: xyz0 = Min(Max(xyz0, Int4(0)), maxXYZ); @@ -2451,7 +2452,7 @@ } } -Int4 SamplerCore::computeLayerIndex(const Float4 &a, Pointer<Byte> &mipmap, SamplerFunction function) +Int4 SamplerCore::computeLayerIndex(const Float4 &a, Pointer<Byte> &mipmap) { if(!state.isArrayed()) {