| Index: include/gpu/GrRenderTarget.h
|
| diff --git a/include/gpu/GrRenderTarget.h b/include/gpu/GrRenderTarget.h
|
| index 77b04d24d3f993d1cafbf30712ca34afe79b1f3c..27d9aad89be67055aa9cd9d35f9ac95b040288d9 100644
|
| --- a/include/gpu/GrRenderTarget.h
|
| +++ b/include/gpu/GrRenderTarget.h
|
| @@ -30,66 +30,30 @@ public:
|
| const GrRenderTarget* asRenderTarget() const override { return this; }
|
|
|
| // GrRenderTarget
|
| - /**
|
| - * On some hardware it is possible for a render target to have multisampling
|
| - * only in certain buffers.
|
| - * Enforce only two legal sample configs.
|
| - * kUnified_SampleConfig signifies multisampling in both color and stencil
|
| - * buffers and is available across all hardware.
|
| - * kStencil_SampleConfig means multisampling is present in stencil buffer
|
| - * only; this config requires hardware support of
|
| - * NV_framebuffer_mixed_samples.
|
| - */
|
| - enum SampleConfig {
|
| - kUnified_SampleConfig = 0,
|
| - kStencil_SampleConfig = 1
|
| - };
|
| + bool isOffscreen() const { return fFlags & Flags::kOffscreen; }
|
|
|
| - /**
|
| - * @return true if the surface is multisampled in all buffers,
|
| - * false otherwise
|
| - */
|
| - bool isUnifiedMultisampled() const {
|
| - if (fSampleConfig != kUnified_SampleConfig) {
|
| - return false;
|
| - }
|
| - return 0 != fDesc.fSampleCnt;
|
| - }
|
| + bool isStencilBufferMultisampled() const { return fDesc.fSampleCnt > 0; }
|
|
|
| /**
|
| - * @return true if the surface is multisampled in the stencil buffer,
|
| - * false otherwise
|
| + * For our purposes, "Mixed Sampled" means the stencil buffer is multisampled but the color
|
| + * buffer is not.
|
| */
|
| - bool isStencilBufferMultisampled() const {
|
| - return 0 != fDesc.fSampleCnt;
|
| - }
|
| + bool isMixedSampled() const { return fFlags & Flags::kMixedSampled; }
|
|
|
| /**
|
| - * @return the number of color samples-per-pixel, or zero if non-MSAA or
|
| - * multisampled in the stencil buffer only.
|
| + * "Unified Sampled" means the stencil and color buffers are both multisampled.
|
| */
|
| - int numColorSamples() const {
|
| - if (fSampleConfig == kUnified_SampleConfig) {
|
| - return fDesc.fSampleCnt;
|
| - }
|
| - return 0;
|
| - }
|
| + bool isUnifiedMultisampled() const { return fDesc.fSampleCnt > 0 && !this->isMixedSampled(); }
|
|
|
| /**
|
| - * @return the number of stencil samples-per-pixel, or zero if non-MSAA.
|
| + * Returns the number of samples/pixel in the stencil buffer (Zero if non-MSAA).
|
| */
|
| - int numStencilSamples() const {
|
| - return fDesc.fSampleCnt;
|
| - }
|
| + int numStencilSamples() const { return fDesc.fSampleCnt; }
|
|
|
| /**
|
| - * @return true if the surface is mixed sampled, false otherwise.
|
| + * Returns the number of samples/pixel in the color buffer (Zero if non-MSAA or mixed sampled).
|
| */
|
| - bool hasMixedSamples() const {
|
| - SkASSERT(kStencil_SampleConfig != fSampleConfig ||
|
| - this->isStencilBufferMultisampled());
|
| - return kStencil_SampleConfig == fSampleConfig;
|
| - }
|
| + int numColorSamples() const { return this->isMixedSampled() ? 0 : fDesc.fSampleCnt; }
|
|
|
| /**
|
| * Call to indicate the multisample contents were modified such that the
|
| @@ -156,16 +120,23 @@ public:
|
| void setLastDrawTarget(GrDrawTarget* dt);
|
| GrDrawTarget* getLastDrawTarget() { return fLastDrawTarget; }
|
|
|
| - static SampleConfig ComputeSampleConfig(const GrCaps& caps, int sampleCnt);
|
| -
|
| protected:
|
| - GrRenderTarget(GrGpu* gpu, const GrSurfaceDesc& desc,
|
| - SampleConfig sampleConfig, GrStencilAttachment* stencil = nullptr)
|
| + enum class Flags {
|
| + kNone = 0,
|
| + kOffscreen = 1 << 0,
|
| + kMixedSampled = 1 << 1
|
| + };
|
| +
|
| + GR_DECL_BITFIELD_CLASS_OPS_FRIENDS(Flags);
|
| +
|
| + GrRenderTarget(GrGpu* gpu, const GrSurfaceDesc& desc, Flags flags,
|
| + GrStencilAttachment* stencil = nullptr)
|
| : INHERITED(gpu, desc)
|
| , fStencilAttachment(stencil)
|
| , fMultisampleSpecsID(0)
|
| - , fSampleConfig(sampleConfig)
|
| + , fFlags(flags)
|
| , fLastDrawTarget(nullptr) {
|
| + SkASSERT(!(fFlags & Flags::kMixedSampled) || fDesc.fSampleCnt > 0);
|
| fResolveRect.setLargestInverted();
|
| }
|
|
|
| @@ -186,7 +157,7 @@ private:
|
|
|
| GrStencilAttachment* fStencilAttachment;
|
| uint8_t fMultisampleSpecsID;
|
| - SampleConfig fSampleConfig;
|
| + Flags fFlags;
|
|
|
| SkIRect fResolveRect;
|
|
|
| @@ -201,5 +172,6 @@ private:
|
| typedef GrSurface INHERITED;
|
| };
|
|
|
| +GR_MAKE_BITFIELD_CLASS_OPS(GrRenderTarget::Flags);
|
|
|
| #endif
|
|
|