aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu')
-rw-r--r--src/gpu/GrFragmentProcessor.cpp2
-rw-r--r--src/gpu/GrGpu.cpp60
-rw-r--r--src/gpu/GrGpu.h46
-rw-r--r--src/gpu/GrProcessor.h32
-rw-r--r--src/gpu/GrProgramDesc.cpp19
-rw-r--r--src/gpu/GrProgramDesc.h17
-rw-r--r--src/gpu/GrRenderTarget.cpp15
-rw-r--r--src/gpu/GrRenderTargetPriv.h5
-rw-r--r--src/gpu/gl/GrGLGpu.cpp32
-rw-r--r--src/gpu/gl/GrGLGpu.h3
-rw-r--r--src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp52
-rw-r--r--src/gpu/glsl/GrGLSLFragmentShaderBuilder.h16
-rw-r--r--src/gpu/glsl/GrGLSLProgramBuilder.cpp3
-rw-r--r--src/gpu/mock/GrMockGpu.h5
-rw-r--r--src/gpu/mtl/GrMtlGpu.h3
-rw-r--r--src/gpu/vk/GrVkGpu.cpp7
-rw-r--r--src/gpu/vk/GrVkGpu.h3
17 files changed, 13 insertions, 307 deletions
diff --git a/src/gpu/GrFragmentProcessor.cpp b/src/gpu/GrFragmentProcessor.cpp
index 187a17701d..719ab7e451 100644
--- a/src/gpu/GrFragmentProcessor.cpp
+++ b/src/gpu/GrFragmentProcessor.cpp
@@ -78,8 +78,6 @@ void GrFragmentProcessor::markPendingExecution() const {
}
int GrFragmentProcessor::registerChildProcessor(std::unique_ptr<GrFragmentProcessor> child) {
- this->combineRequiredFeatures(*child);
-
if (child->usesLocalCoords()) {
fFlags |= kUsesLocalCoords_Flag;
}
diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp
index ff26c799c9..94e35f6fd0 100644
--- a/src/gpu/GrGpu.cpp
+++ b/src/gpu/GrGpu.cpp
@@ -36,7 +36,6 @@ GrGpu::GrGpu(GrContext* context)
: fResetTimestamp(kExpiredTimestamp+1)
, fResetBits(kAll_GrBackendState)
, fContext(context) {
- fMultisampleSpecs.emplace_back(0, 0, nullptr); // Index 0 is an invalid unique id.
}
GrGpu::~GrGpu() {}
@@ -451,65 +450,6 @@ void GrGpu::didWriteToSurface(GrSurface* surface, GrSurfaceOrigin origin, const
}
}
-const GrGpu::MultisampleSpecs& GrGpu::queryMultisampleSpecs(const GrPipeline& pipeline) {
- GrRenderTarget* rt = pipeline.renderTarget();
- SkASSERT(rt->numStencilSamples() > 1);
-
- GrStencilSettings stencil;
- if (pipeline.isStencilEnabled()) {
- // TODO: attach stencil and create settings during render target flush.
- SkASSERT(rt->renderTargetPriv().getStencilAttachment());
- stencil.reset(*pipeline.getUserStencil(), pipeline.hasStencilClip(),
- rt->renderTargetPriv().numStencilBits());
- }
-
- int effectiveSampleCnt;
- SkSTArray<16, SkPoint, true> pattern;
- this->onQueryMultisampleSpecs(rt, pipeline.proxy()->origin(), stencil,
- &effectiveSampleCnt, &pattern);
- SkASSERT(effectiveSampleCnt >= rt->numStencilSamples());
-
- uint8_t id;
- if (this->caps()->sampleLocationsSupport()) {
- SkASSERT(pattern.count() == effectiveSampleCnt);
- const auto& insertResult = fMultisampleSpecsIdMap.insert(
- MultisampleSpecsIdMap::value_type(pattern, SkTMin(fMultisampleSpecs.count(), 255)));
- id = insertResult.first->second;
- if (insertResult.second) {
- // This means the insert did not find the pattern in the map already, and therefore an
- // actual insertion took place. (We don't expect to see many unique sample patterns.)
- const SkPoint* sampleLocations = insertResult.first->first.begin();
- SkASSERT(id == fMultisampleSpecs.count());
- fMultisampleSpecs.emplace_back(id, effectiveSampleCnt, sampleLocations);
- }
- } else {
- id = effectiveSampleCnt;
- for (int i = fMultisampleSpecs.count(); i <= id; ++i) {
- fMultisampleSpecs.emplace_back(i, i, nullptr);
- }
- }
- SkASSERT(id > 0);
-
- return fMultisampleSpecs[id];
-}
-
-bool GrGpu::SamplePatternComparator::operator()(const SamplePattern& a,
- const SamplePattern& b) const {
- if (a.count() != b.count()) {
- return a.count() < b.count();
- }
- for (int i = 0; i < a.count(); ++i) {
- // This doesn't have geometric meaning. We just need to define an ordering for std::map.
- if (a[i].x() != b[i].x()) {
- return a[i].x() < b[i].x();
- }
- if (a[i].y() != b[i].y()) {
- return a[i].y() < b[i].y();
- }
- }
- return false; // Equal.
-}
-
GrSemaphoresSubmitted GrGpu::finishFlush(int numSemaphores,
GrBackendSemaphore backendSemaphores[]) {
GrResourceProvider* resourceProvider = fContext->contextPriv().resourceProvider();
diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
index 87ddb76910..f11799f070 100644
--- a/src/gpu/GrGpu.h
+++ b/src/gpu/GrGpu.h
@@ -321,33 +321,6 @@ public:
const SkIRect& srcRect,
const SkIPoint& dstPoint);
- struct MultisampleSpecs {
- MultisampleSpecs(uint8_t uniqueID, int effectiveSampleCnt, const SkPoint* locations)
- : fUniqueID(uniqueID),
- fEffectiveSampleCnt(effectiveSampleCnt),
- fSampleLocations(locations) {}
-
- // Nonzero ID that uniquely identifies these multisample specs.
- uint8_t fUniqueID;
- // The actual number of samples the GPU will run. NOTE: this value can be greater than the
- // the render target's sample count.
- int fEffectiveSampleCnt;
- // If sample locations are supported, points to the subpixel locations at which the GPU will
- // sample. Pixel center is at (.5, .5), and (0, 0) indicates the top left corner.
- const SkPoint* fSampleLocations;
- };
-
- // Finds a render target's multisample specs. The pipeline is only needed in case we need to
- // flush the draw state prior to querying multisample info. The pipeline is not expected to
- // affect the multisample information itself.
- const MultisampleSpecs& queryMultisampleSpecs(const GrPipeline&);
-
- // Finds the multisample specs with a given unique id.
- const MultisampleSpecs& getMultisampleSpecs(uint8_t uniqueID) {
- SkASSERT(uniqueID > 0 && uniqueID < fMultisampleSpecs.count());
- return fMultisampleSpecs[uniqueID];
- }
-
// Creates a GrGpuRTCommandBuffer which GrOpLists send draw commands to instead of directly
// to the Gpu object.
virtual GrGpuRTCommandBuffer* createCommandBuffer(
@@ -594,11 +567,6 @@ private:
GrSurface* src, GrSurfaceOrigin srcOrigin,
const SkIRect& srcRect, const SkIPoint& dstPoint) = 0;
- // overridden by backend specific derived class to perform the multisample queries
- virtual void onQueryMultisampleSpecs(GrRenderTarget*, GrSurfaceOrigin rtOrigin,
- const GrStencilSettings&,
- int* effectiveSampleCnt, SamplePattern*) = 0;
-
virtual void onFinishFlush(bool insertedSemaphores) = 0;
virtual void onDumpJSON(SkJSONWriter*) const {}
@@ -609,18 +577,10 @@ private:
++fResetTimestamp;
}
- struct SamplePatternComparator {
- bool operator()(const SamplePattern&, const SamplePattern&) const;
- };
-
- typedef std::map<SamplePattern, uint8_t, SamplePatternComparator> MultisampleSpecsIdMap;
-
- ResetTimestamp fResetTimestamp;
- uint32_t fResetBits;
- MultisampleSpecsIdMap fMultisampleSpecsIdMap;
- SkSTArray<1, MultisampleSpecs, true> fMultisampleSpecs;
+ ResetTimestamp fResetTimestamp;
+ uint32_t fResetBits;
// The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu.
- GrContext* fContext;
+ GrContext* fContext;
friend class GrPathRendering;
typedef SkRefCnt INHERITED;
diff --git a/src/gpu/GrProcessor.h b/src/gpu/GrProcessor.h
index c87d4ff262..28cb995918 100644
--- a/src/gpu/GrProcessor.h
+++ b/src/gpu/GrProcessor.h
@@ -167,18 +167,6 @@ public:
return str;
}
- /**
- * Platform specific built-in features that a processor can request for the fragment shader.
- */
- enum RequiredFeatures {
- kNone_RequiredFeatures = 0,
- kSampleLocations_RequiredFeature = 1 << 0
- };
-
- GR_DECL_BITFIELD_OPS_FRIENDS(RequiredFeatures);
-
- RequiredFeatures requiredFeatures() const { return fRequiredFeatures; }
-
void* operator new(size_t size);
void operator delete(void* target);
@@ -195,31 +183,15 @@ public:
ClassID classID() const { return fClassID; }
protected:
- GrProcessor(ClassID classID)
- : fClassID(classID)
- , fRequiredFeatures(kNone_RequiredFeatures) {}
-
- /**
- * If the prcoessor will generate code that uses platform specific built-in features, then it
- * must call these methods from its constructor. Otherwise, requests to use these features will
- * be denied.
- */
- void setWillUseSampleLocations() { fRequiredFeatures |= kSampleLocations_RequiredFeature; }
-
- void combineRequiredFeatures(const GrProcessor& other) {
- fRequiredFeatures |= other.fRequiredFeatures;
- }
+ GrProcessor(ClassID classID) : fClassID(classID) {}
private:
GrProcessor(const GrProcessor&) = delete;
GrProcessor& operator=(const GrProcessor&) = delete;
- ClassID fClassID;
- RequiredFeatures fRequiredFeatures;
+ ClassID fClassID;
};
-GR_MAKE_BITFIELD_OPS(GrProcessor::RequiredFeatures);
-
/** A GrProcessor with the ability to access textures, buffers, and image storages. */
class GrResourceIOProcessor : public GrProcessor {
public:
diff --git a/src/gpu/GrProgramDesc.cpp b/src/gpu/GrProgramDesc.cpp
index 976b12ab09..0a558e06b9 100644
--- a/src/gpu/GrProgramDesc.cpp
+++ b/src/gpu/GrProgramDesc.cpp
@@ -166,7 +166,6 @@ bool GrProgramDesc::Build(GrProgramDesc* desc,
desc->key().reset();
return false;
}
- GrProcessor::RequiredFeatures requiredFeatures = primProc.requiredFeatures();
for (int i = 0; i < pipeline.numFragmentProcessors(); ++i) {
const GrFragmentProcessor& fp = pipeline.getFragmentProcessor(i);
@@ -174,7 +173,6 @@ bool GrProgramDesc::Build(GrProgramDesc* desc,
desc->key().reset();
return false;
}
- requiredFeatures |= fp.requiredFeatures();
}
const GrXferProcessor& xp = pipeline.getXferProcessor();
@@ -189,7 +187,6 @@ bool GrProgramDesc::Build(GrProgramDesc* desc,
desc->key().reset();
return false;
}
- requiredFeatures |= xp.requiredFeatures();
// --------DO NOT MOVE HEADER ABOVE THIS LINE--------------------------------------------------
// Because header is a pointer into the dynamic array, we can't push any new data into the key
@@ -198,21 +195,7 @@ bool GrProgramDesc::Build(GrProgramDesc* desc,
// make sure any padding in the header is zeroed.
memset(header, 0, kHeaderSize);
-
- GrRenderTargetProxy* proxy = pipeline.proxy();
-
- if (requiredFeatures & GrProcessor::kSampleLocations_RequiredFeature) {
- SkASSERT(pipeline.isHWAntialiasState());
-
- GrRenderTarget* rt = pipeline.renderTarget();
- header->fSamplePatternKey =
- rt->renderTargetPriv().getMultisampleSpecs(pipeline).fUniqueID;
- } else {
- header->fSamplePatternKey = 0;
- }
-
- header->fOutputSwizzle = shaderCaps.configOutputSwizzle(proxy->config()).asKey();
-
+ header->fOutputSwizzle = shaderCaps.configOutputSwizzle(pipeline.proxy()->config()).asKey();
header->fSnapVerticesToPixelCenters = pipeline.snapVerticesToPixelCenters();
header->fColorFragmentProcessorCnt = pipeline.numColorFragmentProcessors();
header->fCoverageFragmentProcessorCnt = pipeline.numCoverageFragmentProcessors();
diff --git a/src/gpu/GrProgramDesc.h b/src/gpu/GrProgramDesc.h
index a20cdfc56b..68fdcdb964 100644
--- a/src/gpu/GrProgramDesc.h
+++ b/src/gpu/GrProgramDesc.h
@@ -100,18 +100,15 @@ public:
}
struct KeyHeader {
- // Set to uniquely identify the sample pattern, or 0 if the shader doesn't use sample
- // locations.
- uint8_t fSamplePatternKey;
// Set to uniquely idenitify any swizzling of the shader's output color(s).
- uint8_t fOutputSwizzle;
- uint8_t fColorFragmentProcessorCnt : 4;
- uint8_t fCoverageFragmentProcessorCnt : 4;
+ uint8_t fOutputSwizzle;
+ uint8_t fColorFragmentProcessorCnt; // Can be packed into 4 bits if required.
+ uint8_t fCoverageFragmentProcessorCnt;
// Set to uniquely identify the rt's origin, or 0 if the shader does not require this info.
- uint8_t fSurfaceOriginKey : 2;
- uint8_t fSnapVerticesToPixelCenters : 1;
- uint8_t fHasPointSize : 1;
- uint8_t fPad : 4;
+ uint8_t fSurfaceOriginKey : 2;
+ bool fSnapVerticesToPixelCenters : 1;
+ bool fHasPointSize : 1;
+ uint8_t fPad : 4;
};
GR_STATIC_ASSERT(sizeof(KeyHeader) == 4);
diff --git a/src/gpu/GrRenderTarget.cpp b/src/gpu/GrRenderTarget.cpp
index 36fa4ddf1b..1b8d05e581 100644
--- a/src/gpu/GrRenderTarget.cpp
+++ b/src/gpu/GrRenderTarget.cpp
@@ -24,7 +24,6 @@ GrRenderTarget::GrRenderTarget(GrGpu* gpu, const GrSurfaceDesc& desc,
: INHERITED(gpu, desc)
, fSampleCnt(desc.fSampleCnt)
, fStencilAttachment(stencil)
- , fMultisampleSpecsID(0)
, fFlags(flags) {
SkASSERT(desc.fFlags & kRenderTarget_GrSurfaceFlag);
SkASSERT(!(fFlags & GrRenderTargetFlags::kMixedSampled) || fSampleCnt > 1);
@@ -93,17 +92,3 @@ int GrRenderTargetPriv::numStencilBits() const {
SkASSERT(this->getStencilAttachment());
return this->getStencilAttachment()->bits();
}
-
-const GrGpu::MultisampleSpecs&
-GrRenderTargetPriv::getMultisampleSpecs(const GrPipeline& pipeline) const {
- SkASSERT(fRenderTarget == pipeline.renderTarget()); // TODO: remove RT from pipeline.
- GrGpu* gpu = fRenderTarget->getGpu();
- if (auto id = fRenderTarget->fMultisampleSpecsID) {
- SkASSERT(gpu->queryMultisampleSpecs(pipeline).fUniqueID == id);
- return gpu->getMultisampleSpecs(id);
- }
- const GrGpu::MultisampleSpecs& specs = gpu->queryMultisampleSpecs(pipeline);
- fRenderTarget->fMultisampleSpecsID = specs.fUniqueID;
- return specs;
-}
-
diff --git a/src/gpu/GrRenderTargetPriv.h b/src/gpu/GrRenderTargetPriv.h
index e2285185a8..9822e7a09f 100644
--- a/src/gpu/GrRenderTargetPriv.h
+++ b/src/gpu/GrRenderTargetPriv.h
@@ -32,11 +32,6 @@ public:
int numStencilBits() const;
- // Finds a render target's multisample specs. The pipeline is only needed in case the info isn't
- // cached and we need to flush the draw state in order to query it. The pipeline is not expected
- // to affect the multisample information itself.
- const GrGpu::MultisampleSpecs& getMultisampleSpecs(const GrPipeline&) const;
-
GrRenderTargetFlags flags() const { return fRenderTarget->fFlags; }
private:
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 3cae7d3f3c..f2d44e6b63 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -4297,38 +4297,6 @@ bool GrGLGpu::generateMipmap(GrGLTexture* texture, GrSurfaceOrigin textureOrigin
return true;
}
-void GrGLGpu::onQueryMultisampleSpecs(GrRenderTarget* rt, GrSurfaceOrigin rtOrigin,
- const GrStencilSettings& stencil,
- int* effectiveSampleCnt, SamplePattern* samplePattern) {
- SkASSERT(GrFSAAType::kMixedSamples != rt->fsaaType() ||
- rt->renderTargetPriv().getStencilAttachment() || stencil.isDisabled());
-
- this->flushStencil(stencil);
- this->flushHWAAState(rt, true, !stencil.isDisabled());
- this->flushRenderTargetNoColorWrites(static_cast<GrGLRenderTarget*>(rt));
-
- if (0 != this->caps()->maxRasterSamples()) {
- GR_GL_GetIntegerv(this->glInterface(), GR_GL_EFFECTIVE_RASTER_SAMPLES, effectiveSampleCnt);
- } else {
- GR_GL_GetIntegerv(this->glInterface(), GR_GL_SAMPLES, effectiveSampleCnt);
- }
-
- SkASSERT(*effectiveSampleCnt >= rt->numStencilSamples());
-
- if (this->caps()->sampleLocationsSupport()) {
- samplePattern->reset(*effectiveSampleCnt);
- for (int i = 0; i < *effectiveSampleCnt; ++i) {
- GrGLfloat pos[2];
- GL_CALL(GetMultisamplefv(GR_GL_SAMPLE_POSITION, i, pos));
- if (kTopLeft_GrSurfaceOrigin == rtOrigin) {
- (*samplePattern)[i].set(pos[0], pos[1]);
- } else {
- (*samplePattern)[i].set(pos[0], 1 - pos[1]);
- }
- }
- }
-}
-
void GrGLGpu::xferBarrier(GrRenderTarget* rt, GrXferBarrierType type) {
SkASSERT(type);
switch (type) {
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h
index 93b4de167d..5928232e0c 100644
--- a/src/gpu/gl/GrGLGpu.h
+++ b/src/gpu/gl/GrGLGpu.h
@@ -263,9 +263,6 @@ private:
GrSurface* src, GrSurfaceOrigin srcOrigin,
const SkIRect& srcRect, const SkIPoint& dstPoint) override;
- void onQueryMultisampleSpecs(GrRenderTarget*, GrSurfaceOrigin, const GrStencilSettings&,
- int* effectiveSampleCnt, SamplePattern*) override;
-
// binds texture unit in GL
void setTextureUnit(int unitIdx);
diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
index 7f32aa5972..8ad3a058eb 100644
--- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
@@ -17,18 +17,6 @@
const char* GrGLSLFragmentShaderBuilder::kDstColorName = "_dstColor";
-static const char* sample_offset_array_name(GrGLSLFPFragmentBuilder::Coordinates coords) {
- static const char* kArrayNames[] = {
- "deviceSpaceSampleOffsets",
- "windowSpaceSampleOffsets"
- };
- return kArrayNames[coords];
-
- GR_STATIC_ASSERT(0 == GrGLSLFPFragmentBuilder::kSkiaDevice_Coordinates);
- GR_STATIC_ASSERT(1 == GrGLSLFPFragmentBuilder::kGLSLWindow_Coordinates);
- GR_STATIC_ASSERT(SK_ARRAY_COUNT(kArrayNames) == GrGLSLFPFragmentBuilder::kLast_Coordinates + 1);
-}
-
static const char* specific_layout_qualifier_name(GrBlendEquation equation) {
SkASSERT(GrBlendEquationIsAdvanced(equation));
@@ -84,11 +72,9 @@ GrGLSLFragmentShaderBuilder::GrGLSLFragmentShaderBuilder(GrGLSLProgramBuilder* p
, fHasCustomColorOutput(false)
, fCustomColorOutputIndex(-1)
, fHasSecondaryOutput(false)
- , fUsedSampleOffsetArrays(0)
, fForceHighPrecision(false) {
fSubstageIndices.push_back(0);
#ifdef SK_DEBUG
- fUsedProcessorFeatures = GrProcessor::kNone_RequiredFeatures;
fHasReadDstColor = false;
#endif
}
@@ -106,17 +92,6 @@ SkString GrGLSLFragmentShaderBuilder::ensureCoords2D(const GrShaderVar& coords)
return coords2D;
}
-void GrGLSLFragmentShaderBuilder::appendOffsetToSample(const char* sampleIdx, Coordinates coords) {
- SkASSERT(fProgramBuilder->header().fSamplePatternKey);
- SkDEBUGCODE(fUsedProcessorFeatures |= GrProcessor::kSampleLocations_RequiredFeature);
- if (kTopLeft_GrSurfaceOrigin == this->getSurfaceOrigin()) {
- // With a top left origin, device and window space are equal, so we only use device coords.
- coords = kSkiaDevice_Coordinates;
- }
- this->codeAppendf("%s[%s]", sample_offset_array_name(coords), sampleIdx);
- fUsedSampleOffsetArrays |= (1 << coords);
-}
-
const char* GrGLSLFragmentShaderBuilder::dstColor() {
SkDEBUGCODE(fHasReadDstColor = true;)
@@ -218,33 +193,6 @@ GrSurfaceOrigin GrGLSLFragmentShaderBuilder::getSurfaceOrigin() const {
void GrGLSLFragmentShaderBuilder::onFinalize() {
fProgramBuilder->varyingHandler()->getFragDecls(&this->inputs(), &this->outputs());
- if (fUsedSampleOffsetArrays & (1 << kSkiaDevice_Coordinates)) {
- this->defineSampleOffsetArray(sample_offset_array_name(kSkiaDevice_Coordinates),
- SkMatrix::MakeTrans(-0.5f, -0.5f));
- }
- if (fUsedSampleOffsetArrays & (1 << kGLSLWindow_Coordinates)) {
- // With a top left origin, device and window space are equal, so we only use device coords.
- SkASSERT(kBottomLeft_GrSurfaceOrigin == this->getSurfaceOrigin());
- SkMatrix m;
- m.setScale(1, -1);
- m.preTranslate(-0.5f, -0.5f);
- this->defineSampleOffsetArray(sample_offset_array_name(kGLSLWindow_Coordinates), m);
- }
-}
-
-void GrGLSLFragmentShaderBuilder::defineSampleOffsetArray(const char* name, const SkMatrix& m) {
- SkASSERT(fProgramBuilder->caps()->sampleLocationsSupport());
- const GrPipeline& pipeline = fProgramBuilder->pipeline();
- const GrRenderTargetPriv& rtp = pipeline.renderTarget()->renderTargetPriv();
- const GrGpu::MultisampleSpecs& specs = rtp.getMultisampleSpecs(pipeline);
- SkSTArray<16, SkPoint, true> offsets;
- offsets.push_back_n(specs.fEffectiveSampleCnt);
- m.mapPoints(offsets.begin(), specs.fSampleLocations, specs.fEffectiveSampleCnt);
- this->definitions().appendf("const float2 %s[] = float2[](", name);
- for (int i = 0; i < specs.fEffectiveSampleCnt; ++i) {
- this->definitions().appendf("float2(%f, %f)", offsets[i].x(), offsets[i].y());
- this->definitions().append(i + 1 != specs.fEffectiveSampleCnt ? ", " : ");\n");
- }
}
void GrGLSLFragmentShaderBuilder::onBeforeChildProcEmitCode() {
diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.h b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.h
index d64dfdb519..5a73c17d9a 100644
--- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.h
+++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.h
@@ -55,16 +55,6 @@ public:
};
/**
- * Appends the offset from the center of the pixel to a specified sample.
- *
- * @param sampleIdx GLSL expression of the sample index.
- * @param Coordinates Coordinate space in which to emit the offset.
- *
- * A processor must call setWillUseSampleLocations in its constructor before using this method.
- */
- virtual void appendOffsetToSample(const char* sampleIdx, Coordinates) = 0;
-
- /**
* Fragment procs with child procs should call these functions before/after calling emitCode
* on a child proc.
*/
@@ -112,7 +102,6 @@ public:
virtual SkString ensureCoords2D(const GrShaderVar&) override;
// GrGLSLFPFragmentBuilder interface.
- void appendOffsetToSample(const char* sampleIdx, Coordinates) override;
const SkString& getMangleString() const override { return fMangleString; }
void onBeforeChildProcEmitCode() override;
void onAfterChildProcEmitCode() override;
@@ -134,10 +123,8 @@ private:
#ifdef SK_DEBUG
// As GLSLProcessors emit code, there are some conditions we need to verify. We use the below
// state to track this. The reset call is called per processor emitted.
- GrProcessor::RequiredFeatures usedProcessorFeatures() const { return fUsedProcessorFeatures; }
bool hasReadDstColor() const { return fHasReadDstColor; }
void resetVerification() {
- fUsedProcessorFeatures = GrProcessor::kNone_RequiredFeatures;
fHasReadDstColor = false;
}
#endif
@@ -148,7 +135,6 @@ private:
GrSurfaceOrigin getSurfaceOrigin() const;
void onFinalize() override;
- void defineSampleOffsetArray(const char* name, const SkMatrix&);
static const char* kDstColorName;
@@ -176,13 +162,11 @@ private:
bool fHasCustomColorOutput;
int fCustomColorOutputIndex;
bool fHasSecondaryOutput;
- uint8_t fUsedSampleOffsetArrays;
bool fForceHighPrecision;
#ifdef SK_DEBUG
// some state to verify shaders and effects are consistent, this is reset between effects by
// the program creator
- GrProcessor::RequiredFeatures fUsedProcessorFeatures;
bool fHasReadDstColor;
#endif
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
index 04ebc6ad8e..914a958a22 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
@@ -360,16 +360,13 @@ bool GrGLSLProgramBuilder::checkSamplerCounts() {
#ifdef SK_DEBUG
void GrGLSLProgramBuilder::verify(const GrPrimitiveProcessor& gp) {
- SkASSERT(fFS.usedProcessorFeatures() == gp.requiredFeatures());
}
void GrGLSLProgramBuilder::verify(const GrXferProcessor& xp) {
- SkASSERT(fFS.usedProcessorFeatures() == xp.requiredFeatures());
SkASSERT(fFS.hasReadDstColor() == xp.willReadDstColor());
}
void GrGLSLProgramBuilder::verify(const GrFragmentProcessor& fp) {
- SkASSERT(fFS.usedProcessorFeatures() == fp.requiredFeatures());
}
#endif
diff --git a/src/gpu/mock/GrMockGpu.h b/src/gpu/mock/GrMockGpu.h
index 4cbd49ca30..98a4393d89 100644
--- a/src/gpu/mock/GrMockGpu.h
+++ b/src/gpu/mock/GrMockGpu.h
@@ -120,11 +120,6 @@ private:
return true;
}
- void onQueryMultisampleSpecs(GrRenderTarget* rt, GrSurfaceOrigin, const GrStencilSettings&,
- int* effectiveSampleCnt, SamplePattern*) override {
- *effectiveSampleCnt = rt->numStencilSamples();
- }
-
void onResolveRenderTarget(GrRenderTarget* target) override { return; }
void onFinishFlush(bool insertedSemaphores) override {}
diff --git a/src/gpu/mtl/GrMtlGpu.h b/src/gpu/mtl/GrMtlGpu.h
index 28927d0719..748a527a7b 100644
--- a/src/gpu/mtl/GrMtlGpu.h
+++ b/src/gpu/mtl/GrMtlGpu.h
@@ -46,9 +46,6 @@ public:
const SkIRect& srcRect,
const SkIPoint& dstPoint) override { return false; }
- void onQueryMultisampleSpecs(GrRenderTarget*, GrSurfaceOrigin, const GrStencilSettings&,
- int* effectiveSampleCnt, SamplePattern*) override {}
-
GrGpuRTCommandBuffer* createCommandBuffer(
GrRenderTarget*, GrSurfaceOrigin,
const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index daa4057d6d..90e5624ea1 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -1850,13 +1850,6 @@ bool GrVkGpu::onCopySurface(GrSurface* dst, GrSurfaceOrigin dstOrigin,
return false;
}
-void GrVkGpu::onQueryMultisampleSpecs(GrRenderTarget* rt, GrSurfaceOrigin, const GrStencilSettings&,
- int* effectiveSampleCnt, SamplePattern*) {
- // TODO: stub.
- SkASSERT(!this->caps()->sampleLocationsSupport());
- *effectiveSampleCnt = rt->numStencilSamples();
-}
-
bool GrVkGpu::onGetReadPixelsInfo(GrSurface* srcSurface, GrSurfaceOrigin srcOrigin, int width,
int height, size_t rowBytes, GrPixelConfig dstConfig,
DrawPreference* drawPreference,
diff --git a/src/gpu/vk/GrVkGpu.h b/src/gpu/vk/GrVkGpu.h
index 4302f7f619..84d6328e0f 100644
--- a/src/gpu/vk/GrVkGpu.h
+++ b/src/gpu/vk/GrVkGpu.h
@@ -198,9 +198,6 @@ private:
GrSurfaceOrigin srcOrigin, const SkIRect& srcRect,
const SkIPoint& dstPoint) override;
- void onQueryMultisampleSpecs(GrRenderTarget*, GrSurfaceOrigin, const GrStencilSettings&,
- int* effectiveSampleCnt, SamplePattern*) override;
-
void onFinishFlush(bool insertedSemaphores) override;
// Ends and submits the current command buffer to the queue and then creates a new command