Store GrGLSLFragmentProcessor arrays in std::vector
Bug: b/180759848
Bug: skia:11358
Change-Id: I5fd5eac4ac5bd70ea2c86c353152e5d1f0bc4c4d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/373777
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
diff --git a/src/gpu/d3d/GrD3DPipelineState.cpp b/src/gpu/d3d/GrD3DPipelineState.cpp
index 1515671..5a16e7e 100644
--- a/src/gpu/d3d/GrD3DPipelineState.cpp
+++ b/src/gpu/d3d/GrD3DPipelineState.cpp
@@ -26,7 +26,7 @@
uint32_t numSamplers,
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fragmentProcessors,
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fpImpls,
size_t vertexStride,
size_t instanceStride)
: fPipelineState(std::move(pipelineState))
@@ -34,7 +34,7 @@
, fBuiltinUniformHandles(builtinUniformHandles)
, fGeometryProcessor(std::move(geometryProcessor))
, fXferProcessor(std::move(xferProcessor))
- , fFragmentProcessors(std::move(fragmentProcessors))
+ , fFPImpls(std::move(fpImpls))
, fDataManager(uniforms, uniformSize)
, fNumSamplers(numSamplers)
, fVertexStride(vertexStride)
@@ -47,10 +47,9 @@
fGeometryProcessor->setData(fDataManager, programInfo.primProc());
for (int i = 0; i < programInfo.pipeline().numFragmentProcessors(); ++i) {
- auto& pipelineFP = programInfo.pipeline().getFragmentProcessor(i);
- auto& baseGLSLFP = *fFragmentProcessors[i];
- for (auto [fp, glslFP] : GrGLSLFragmentProcessor::ParallelRange(pipelineFP, baseGLSLFP)) {
- glslFP.setData(fDataManager, fp);
+ auto& fp = programInfo.pipeline().getFragmentProcessor(i);
+ for (auto [fp, impl] : GrGLSLFragmentProcessor::ParallelRange(fp, *fFPImpls[i])) {
+ impl.setData(fDataManager, fp);
}
}
diff --git a/src/gpu/d3d/GrD3DPipelineState.h b/src/gpu/d3d/GrD3DPipelineState.h
index 1d1795f..afaf03c 100644
--- a/src/gpu/d3d/GrD3DPipelineState.h
+++ b/src/gpu/d3d/GrD3DPipelineState.h
@@ -15,6 +15,8 @@
#include "src/gpu/d3d/GrD3DPipelineStateDataManager.h"
#include "src/gpu/glsl/GrGLSLProgramBuilder.h"
+#include <vector>
+
class GrD3DDirectCommandList;
class GrD3DGpu;
class GrD3DRootSignature;
@@ -32,7 +34,7 @@
uint32_t numSamplers,
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fragProcessors,
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fpImpls,
size_t vertexStride,
size_t instanceStride);
@@ -117,7 +119,7 @@
// Processors in the GrD3DPipelineState
std::unique_ptr<GrGLSLPrimitiveProcessor> fGeometryProcessor;
std::unique_ptr<GrGLSLXferProcessor> fXferProcessor;
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fFragmentProcessors;
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fFPImpls;
GrD3DPipelineStateDataManager fDataManager;
diff --git a/src/gpu/d3d/GrD3DPipelineStateBuilder.cpp b/src/gpu/d3d/GrD3DPipelineStateBuilder.cpp
index b0c86b3..0361673 100644
--- a/src/gpu/d3d/GrD3DPipelineStateBuilder.cpp
+++ b/src/gpu/d3d/GrD3DPipelineStateBuilder.cpp
@@ -656,7 +656,7 @@
fUniformHandler.fSamplers.count(),
std::move(fGeometryProcessor),
std::move(fXferProcessor),
- std::move(fFragmentProcessors),
+ std::move(fFPImpls),
primProc.vertexStride(),
primProc.instanceStride()));
}
diff --git a/src/gpu/dawn/GrDawnProgramBuilder.cpp b/src/gpu/dawn/GrDawnProgramBuilder.cpp
index 2fd1258..4b52d27 100644
--- a/src/gpu/dawn/GrDawnProgramBuilder.cpp
+++ b/src/gpu/dawn/GrDawnProgramBuilder.cpp
@@ -289,7 +289,7 @@
sk_sp<GrDawnProgram> result(new GrDawnProgram(uniforms, uniformBufferSize));
result->fGeometryProcessor = std::move(builder.fGeometryProcessor);
result->fXferProcessor = std::move(builder.fXferProcessor);
- result->fFragmentProcessors = std::move(builder.fFragmentProcessors);
+ result->fFPImpls = std::move(builder.fFPImpls);
std::vector<wgpu::BindGroupLayoutEntry> uniformLayoutEntries;
if (0 != uniformBufferSize) {
wgpu::BindGroupLayoutEntry entry;
@@ -502,10 +502,9 @@
fGeometryProcessor->setData(fDataManager, primProc);
for (int i = 0; i < programInfo.pipeline().numFragmentProcessors(); ++i) {
- auto& pipelineFP = programInfo.pipeline().getFragmentProcessor(i);
- auto& baseGLSLFP = *fFragmentProcessors[i];
- for (auto [fp, glslFP] : GrGLSLFragmentProcessor::ParallelRange(pipelineFP, baseGLSLFP)) {
- glslFP.setData(fDataManager, fp);
+ auto& fp = programInfo.pipeline().getFragmentProcessor(i);
+ for (auto [fp, impl] : GrGLSLFragmentProcessor::ParallelRange(fp, *fFPImpls[i])) {
+ impl.setData(fDataManager, fp);
}
}
diff --git a/src/gpu/dawn/GrDawnProgramBuilder.h b/src/gpu/dawn/GrDawnProgramBuilder.h
index 83e800a..ffc36fd 100644
--- a/src/gpu/dawn/GrDawnProgramBuilder.h
+++ b/src/gpu/dawn/GrDawnProgramBuilder.h
@@ -15,6 +15,8 @@
#include "dawn/webgpu_cpp.h"
#include "src/gpu/glsl/GrGLSLProgramBuilder.h"
+#include <vector>
+
class GrPipeline;
struct GrDawnProgram : public SkRefCnt {
@@ -55,7 +57,7 @@
}
std::unique_ptr<GrGLSLPrimitiveProcessor> fGeometryProcessor;
std::unique_ptr<GrGLSLXferProcessor> fXferProcessor;
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fFragmentProcessors;
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fFPImpls;
std::vector<wgpu::BindGroupLayout> fBindGroupLayouts;
wgpu::RenderPipeline fRenderPipeline;
GrDawnProgramDataManager fDataManager;
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index b61941d..3a21ce0 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -34,7 +34,7 @@
const VaryingInfoArray& pathProcVaryings,
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fps,
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fpImpls,
std::unique_ptr<Attribute[]> attributes,
int vertexAttributeCnt,
int instanceAttributeCnt,
@@ -48,7 +48,7 @@
pathProcVaryings,
std::move(geometryProcessor),
std::move(xferProcessor),
- std::move(fps),
+ std::move(fpImpls),
std::move(attributes),
vertexAttributeCnt,
instanceAttributeCnt,
@@ -69,7 +69,7 @@
const VaryingInfoArray& pathProcVaryings,
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fps,
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fpImpls,
std::unique_ptr<Attribute[]> attributes,
int vertexAttributeCnt,
int instanceAttributeCnt,
@@ -79,7 +79,7 @@
, fProgramID(programID)
, fPrimitiveProcessor(std::move(geometryProcessor))
, fXferProcessor(std::move(xferProcessor))
- , fFragmentProcessors(std::move(fps))
+ , fFPImpls(std::move(fpImpls))
, fAttributes(std::move(attributes))
, fVertexAttributeCnt(vertexAttributeCnt)
, fInstanceAttributeCnt(instanceAttributeCnt)
@@ -115,10 +115,9 @@
fPrimitiveProcessor->setData(fProgramDataManager, programInfo.primProc());
for (int i = 0; i < programInfo.pipeline().numFragmentProcessors(); ++i) {
- auto& pipelineFP = programInfo.pipeline().getFragmentProcessor(i);
- auto& baseGLSLFP = *fFragmentProcessors[i];
- for (auto [fp, glslFP] : GrGLSLFragmentProcessor::ParallelRange(pipelineFP, baseGLSLFP)) {
- glslFP.setData(fProgramDataManager, fp);
+ auto& fp = programInfo.pipeline().getFragmentProcessor(i);
+ for (auto [fp, impl] : GrGLSLFragmentProcessor::ParallelRange(fp, *fFPImpls[i])) {
+ impl.setData(fProgramDataManager, fp);
}
}
diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h
index 0394af8..b054135 100644
--- a/src/gpu/gl/GrGLProgram.h
+++ b/src/gpu/gl/GrGLProgram.h
@@ -13,6 +13,8 @@
#include "src/gpu/glsl/GrGLSLProgramDataManager.h"
#include "src/gpu/glsl/GrGLSLUniformHandler.h"
+#include <vector>
+
class GrGLSLFragmentProcessor;
class GrGLSLPrimitiveProcessor;
class GrGLSLXferProcessor;
@@ -56,7 +58,7 @@
const VaryingInfoArray&, // used for NVPR only currently
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fps,
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fps,
std::unique_ptr<Attribute[]>,
int vertexAttributeCnt,
int instanceAttributeCnt,
@@ -148,7 +150,7 @@
const VaryingInfoArray&, // used for NVPR only currently
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fps,
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fpImpls,
std::unique_ptr<Attribute[]>,
int vertexAttributeCnt,
int instanceAttributeCnt,
@@ -166,7 +168,7 @@
// the installed effects
std::unique_ptr<GrGLSLPrimitiveProcessor> fPrimitiveProcessor;
std::unique_ptr<GrGLSLXferProcessor> fXferProcessor;
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fFragmentProcessors;
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fFPImpls;
std::unique_ptr<Attribute[]> fAttributes;
int fVertexAttributeCnt;
diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
index ef264f3..6fc86ed 100644
--- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp
+++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
@@ -566,7 +566,7 @@
fVaryingHandler.fPathProcVaryingInfos,
std::move(fGeometryProcessor),
std::move(fXferProcessor),
- std::move(fFragmentProcessors),
+ std::move(fFPImpls),
std::move(fAttributes),
fVertexAttributeCnt,
fInstanceAttributeCnt,
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
index 91e691d..ccbb093 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
@@ -37,6 +37,8 @@
, fXferProcessor(nullptr)
, fNumFragmentSamplers(0) {}
+GrGLSLProgramBuilder::~GrGLSLProgramBuilder() = default;
+
void GrGLSLProgramBuilder::addFeature(GrShaderFlags shaders,
uint32_t featureBit,
const char* extensionName) {
@@ -132,13 +134,17 @@
void GrGLSLProgramBuilder::emitAndInstallFragProcs(SkString* color, SkString* coverage) {
int transformedCoordVarsIdx = 0;
int fpCount = this->pipeline().numFragmentProcessors();
- fFragmentProcessors = std::make_unique<std::unique_ptr<GrGLSLFragmentProcessor>[]>(fpCount);
+ SkASSERT(fFPImpls.empty());
+ fFPImpls.reserve(fpCount);
for (int i = 0; i < fpCount; ++i) {
SkString* inOut = this->pipeline().isColorFragmentProcessor(i) ? color : coverage;
SkString output;
const GrFragmentProcessor& fp = this->pipeline().getFragmentProcessor(i);
- fFragmentProcessors[i] = fp.makeProgramImpl();
- output = this->emitFragProc(fp, *fFragmentProcessors[i], transformedCoordVarsIdx, *inOut,
+ fFPImpls.push_back(fp.makeProgramImpl());
+ output = this->emitFragProc(fp,
+ *fFPImpls.back(),
+ transformedCoordVarsIdx,
+ *inOut,
output);
for (const auto& subFP : GrFragmentProcessor::FPRange(fp)) {
transformedCoordVarsIdx += subFP.numVaryingCoordsUsed();
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.h b/src/gpu/glsl/GrGLSLProgramBuilder.h
index f3f25df..9bd8dd0 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.h
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.h
@@ -21,6 +21,8 @@
#include "src/gpu/glsl/GrGLSLXferProcessor.h"
#include "src/sksl/SkSLCompiler.h"
+#include <vector>
+
class GrProgramDesc;
class GrShaderVar;
class GrGLSLVaryingHandler;
@@ -32,7 +34,7 @@
using UniformHandle = GrGLSLUniformHandler::UniformHandle;
using SamplerHandle = GrGLSLUniformHandler::SamplerHandle;
- virtual ~GrGLSLProgramBuilder() {}
+ virtual ~GrGLSLProgramBuilder();
virtual const GrCaps* caps() const = 0;
const GrShaderCaps* shaderCaps() const { return this->caps()->shaderCaps(); }
@@ -119,7 +121,7 @@
std::unique_ptr<GrGLSLPrimitiveProcessor> fGeometryProcessor;
std::unique_ptr<GrGLSLXferProcessor> fXferProcessor;
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fFragmentProcessors;
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fFPImpls;
protected:
explicit GrGLSLProgramBuilder(GrRenderTarget*, const GrProgramDesc&, const GrProgramInfo&);
diff --git a/src/gpu/mtl/GrMtlPipelineState.h b/src/gpu/mtl/GrMtlPipelineState.h
index 10cb1d7..d5c1e17 100644
--- a/src/gpu/mtl/GrMtlPipelineState.h
+++ b/src/gpu/mtl/GrMtlPipelineState.h
@@ -40,8 +40,8 @@
uint32_t uniformBufferSize,
uint32_t numSamplers,
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
- std::unique_ptr<GrGLSLXferProcessor> xferPRocessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fragmentProcessors);
+ std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fpImpls);
id<MTLRenderPipelineState> mtlPipelineState() { return fPipelineState; }
@@ -127,7 +127,7 @@
std::unique_ptr<GrGLSLPrimitiveProcessor> fGeometryProcessor;
std::unique_ptr<GrGLSLXferProcessor> fXferProcessor;
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fFragmentProcessors;
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fFPImpls;
GrMtlPipelineStateDataManager fDataManager;
};
diff --git a/src/gpu/mtl/GrMtlPipelineState.mm b/src/gpu/mtl/GrMtlPipelineState.mm
index 500bb1c..53b3824 100644
--- a/src/gpu/mtl/GrMtlPipelineState.mm
+++ b/src/gpu/mtl/GrMtlPipelineState.mm
@@ -38,7 +38,7 @@
uint32_t numSamplers,
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fragmentProcessors)
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fpImpls)
: fGpu(gpu)
, fPipelineState(pipelineState)
, fPixelFormat(pixelFormat)
@@ -46,7 +46,7 @@
, fNumSamplers(numSamplers)
, fGeometryProcessor(std::move(geometryProcessor))
, fXferProcessor(std::move(xferProcessor))
- , fFragmentProcessors(std::move(fragmentProcessors))
+ , fFPImpls(std::move(fpImpls))
, fDataManager(uniforms, uniformBufferSize) {
(void) fPixelFormat; // Suppress unused-var warning.
}
@@ -57,10 +57,9 @@
fGeometryProcessor->setData(fDataManager, programInfo.primProc());
for (int i = 0; i < programInfo.pipeline().numFragmentProcessors(); ++i) {
- auto& pipelineFP = programInfo.pipeline().getFragmentProcessor(i);
- auto& baseGLSLFP = *fFragmentProcessors[i];
- for (auto [fp, glslFP] : GrGLSLFragmentProcessor::ParallelRange(pipelineFP, baseGLSLFP)) {
- glslFP.setData(fDataManager, fp);
+ auto& fp = programInfo.pipeline().getFragmentProcessor(i);
+ for (auto [fp, impl] : GrGLSLFragmentProcessor::ParallelRange(fp, *fFPImpls[i])) {
+ impl.setData(fDataManager, fp);
}
}
diff --git a/src/gpu/mtl/GrMtlPipelineStateBuilder.mm b/src/gpu/mtl/GrMtlPipelineStateBuilder.mm
index 5e3ef98..f67f4e8 100644
--- a/src/gpu/mtl/GrMtlPipelineStateBuilder.mm
+++ b/src/gpu/mtl/GrMtlPipelineStateBuilder.mm
@@ -555,7 +555,7 @@
(uint32_t)fUniformHandler.numSamplers(),
std::move(fGeometryProcessor),
std::move(fXferProcessor),
- std::move(fFragmentProcessors));
+ std::move(fFPImpls));
}
//////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp
index b4d953e..36132ef 100644
--- a/src/gpu/vk/GrVkPipelineState.cpp
+++ b/src/gpu/vk/GrVkPipelineState.cpp
@@ -37,13 +37,13 @@
const UniformInfoArray& samplers,
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fragmentProcessors)
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fpImpls)
: fPipeline(std::move(pipeline))
, fSamplerDSHandle(samplerDSHandle)
, fBuiltinUniformHandles(builtinUniformHandles)
, fGeometryProcessor(std::move(geometryProcessor))
, fXferProcessor(std::move(xferProcessor))
- , fFragmentProcessors(std::move(fragmentProcessors))
+ , fFPImpls(std::move(fpImpls))
, fDataManager(uniforms, uniformSize, usePushConstants) {
fNumSamplers = samplers.count();
for (const auto& sampler : samplers.items()) {
@@ -71,10 +71,9 @@
fGeometryProcessor->setData(fDataManager, programInfo.primProc());
for (int i = 0; i < programInfo.pipeline().numFragmentProcessors(); ++i) {
- auto& pipelineFP = programInfo.pipeline().getFragmentProcessor(i);
- auto& baseGLSLFP = *fFragmentProcessors[i];
- for (auto [fp, glslFP] : GrGLSLFragmentProcessor::ParallelRange(pipelineFP, baseGLSLFP)) {
- glslFP.setData(fDataManager, fp);
+ auto& fp = programInfo.pipeline().getFragmentProcessor(i);
+ for (auto [fp, impl] : GrGLSLFragmentProcessor::ParallelRange(fp, *fFPImpls[i])) {
+ impl.setData(fDataManager, fp);
}
}
diff --git a/src/gpu/vk/GrVkPipelineState.h b/src/gpu/vk/GrVkPipelineState.h
index 853673b..5cf42b2 100644
--- a/src/gpu/vk/GrVkPipelineState.h
+++ b/src/gpu/vk/GrVkPipelineState.h
@@ -49,7 +49,7 @@
const UniformInfoArray& samplers,
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fragmentProcessors);
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fpImpls);
~GrVkPipelineState();
@@ -123,7 +123,7 @@
// Processors in the GrVkPipelineState
std::unique_ptr<GrGLSLPrimitiveProcessor> fGeometryProcessor;
std::unique_ptr<GrGLSLXferProcessor> fXferProcessor;
- std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fFragmentProcessors;
+ std::vector<std::unique_ptr<GrGLSLFragmentProcessor>> fFPImpls;
GrVkPipelineStateDataManager fDataManager;
diff --git a/src/gpu/vk/GrVkPipelineStateBuilder.cpp b/src/gpu/vk/GrVkPipelineStateBuilder.cpp
index 3f0a4b8..52d0f34 100644
--- a/src/gpu/vk/GrVkPipelineStateBuilder.cpp
+++ b/src/gpu/vk/GrVkPipelineStateBuilder.cpp
@@ -376,5 +376,5 @@
fUniformHandler.fSamplers,
std::move(fGeometryProcessor),
std::move(fXferProcessor),
- std::move(fFragmentProcessors));
+ std::move(fFPImpls));
}