Index: src/gpu/instanced/InstancedRenderingTypes.h |
diff --git a/src/gpu/instanced/InstancedRenderingTypes.h b/src/gpu/instanced/InstancedRenderingTypes.h |
deleted file mode 100644 |
index ff9471c428488ab7d406daa2bf3ab1e54ec80814..0000000000000000000000000000000000000000 |
--- a/src/gpu/instanced/InstancedRenderingTypes.h |
+++ /dev/null |
@@ -1,191 +0,0 @@ |
-/* |
- * Copyright 2016 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#ifndef gr_instanced_InstancedRenderingTypes_DEFINED |
-#define gr_instanced_InstancedRenderingTypes_DEFINED |
- |
-#include "GrTypes.h" |
-#include "SkRRect.h" |
- |
-namespace gr_instanced { |
- |
-/** |
- * Per-vertex data. These values get fed into normal vertex attribs. |
- */ |
-struct ShapeVertex { |
- float fX, fY; //!< Shape coordinates. |
- int32_t fAttrs; //!< Shape-specific vertex attributes, if needed. |
-}; |
- |
-/** |
- * Per-instance data. These values get fed into instanced vertex attribs. |
- */ |
-struct Instance { |
- uint32_t fInfo; //!< Packed info about the instance. See InfoBits. |
- float fShapeMatrix2x3[6]; //!< Maps canonical shape coords -> device space coords. |
- uint32_t fColor; //!< Color to be written out by the primitive processor. |
- float fLocalRect[4]; //!< Local coords rect that spans [-1, +1] in shape coords. |
-}; |
- |
-enum class Attrib : uint8_t { |
- kShapeCoords, |
- kVertexAttrs, |
- kInstanceInfo, |
- kShapeMatrixX, |
- kShapeMatrixY, |
- kColor, |
- kLocalRect |
-}; |
-constexpr int kNumAttribs = 1 + (int)Attrib::kLocalRect; |
- |
-enum class AntialiasMode : uint8_t { |
- kNone, |
- kCoverage, |
- kMSAA, |
- kMixedSamples |
-}; |
-constexpr int kNumAntialiasModes = 1 + (int)AntialiasMode::kMixedSamples; |
- |
-enum class ShapeType : uint8_t { |
- kRect, |
- kOval, |
- kSimpleRRect, |
- kNinePatch, |
- kComplexRRect |
-}; |
-constexpr int kNumShapeTypes = 1 + (int)ShapeType::kComplexRRect; |
- |
-inline static ShapeType GetRRectShapeType(const SkRRect& rrect) { |
- SkASSERT(rrect.getType() >= SkRRect::kRect_Type && |
- rrect.getType() <= SkRRect::kComplex_Type); |
- return static_cast<ShapeType>(rrect.getType() - 1); |
- |
- GR_STATIC_ASSERT((int)ShapeType::kRect == SkRRect::kRect_Type - 1); |
- GR_STATIC_ASSERT((int)ShapeType::kOval == SkRRect::kOval_Type - 1); |
- GR_STATIC_ASSERT((int)ShapeType::kSimpleRRect == SkRRect::kSimple_Type - 1); |
- GR_STATIC_ASSERT((int)ShapeType::kNinePatch == SkRRect::kNinePatch_Type - 1); |
- GR_STATIC_ASSERT((int)ShapeType::kComplexRRect == SkRRect::kComplex_Type - 1); |
- GR_STATIC_ASSERT(kNumShapeTypes == SkRRect::kComplex_Type); |
-} |
- |
-enum ShapeFlag { |
- kRect_ShapeFlag = (1 << (int)ShapeType::kRect), |
- kOval_ShapeFlag = (1 << (int)ShapeType::kOval), |
- kSimpleRRect_ShapeFlag = (1 << (int)ShapeType::kSimpleRRect), |
- kNinePatch_ShapeFlag = (1 << (int)ShapeType::kNinePatch), |
- kComplexRRect_ShapeFlag = (1 << (int)ShapeType::kComplexRRect), |
- |
- kRRect_ShapesMask = kSimpleRRect_ShapeFlag | kNinePatch_ShapeFlag | kComplexRRect_ShapeFlag |
-}; |
- |
-constexpr uint8_t GetShapeFlag(ShapeType type) { return 1 << (int)type; } |
- |
-/** |
- * Defines what data is stored at which bits in the fInfo field of the instanced data. |
- */ |
-enum InfoBits { |
- kShapeType_InfoBit = 29, |
- kInnerShapeType_InfoBit = 27, |
- kPerspective_InfoBit = 26, |
- kLocalMatrix_InfoBit = 25, |
- kParamsIdx_InfoBit = 0 |
-}; |
- |
-enum InfoMasks { |
- kShapeType_InfoMask = 0u - (1 << kShapeType_InfoBit), |
- kInnerShapeType_InfoMask = (1 << kShapeType_InfoBit) - (1 << kInnerShapeType_InfoBit), |
- kPerspective_InfoFlag = (1 << kPerspective_InfoBit), |
- kLocalMatrix_InfoFlag = (1 << kLocalMatrix_InfoBit), |
- kParamsIdx_InfoMask = (1 << kLocalMatrix_InfoBit) - 1 |
-}; |
- |
-GR_STATIC_ASSERT((kNumShapeTypes - 1) <= (uint32_t)kShapeType_InfoMask >> kShapeType_InfoBit); |
-GR_STATIC_ASSERT((int)ShapeType::kSimpleRRect <= |
- kInnerShapeType_InfoMask >> kInnerShapeType_InfoBit); |
- |
-/** |
- * Additional parameters required by some instances (e.g. round rect radii, perspective column, |
- * local matrix). These are accessed via texel buffer. |
- */ |
-struct ParamsTexel { |
- float fX, fY, fZ, fW; |
-}; |
- |
-GR_STATIC_ASSERT(0 == offsetof(ParamsTexel, fX)); |
-GR_STATIC_ASSERT(4 * 4 == sizeof(ParamsTexel)); |
- |
-/** |
- * Tracks all information needed in order to draw a batch of instances. This struct also serves |
- * as an all-in-one shader key for the batch. |
- */ |
-struct BatchInfo { |
- BatchInfo() : fData(0) {} |
- |
- bool isSimpleRects() const { |
- return !((fShapeTypes & ~kRect_ShapeFlag) | fInnerShapeTypes); |
- } |
- |
- bool canJoin(BatchInfo that) const { |
- if (fAntialiasMode != that.fAntialiasMode) { |
- return false; |
- } |
- if (SkToBool(fInnerShapeTypes) != SkToBool(that.fInnerShapeTypes)) { |
- // GrInstanceProcessor can't currently combine draws with and without inner shapes. |
- return false; |
- } |
- if (fCannotDiscard != that.fCannotDiscard) { |
- // For stencil draws, the use of discard can be a requirement. |
- return false; |
- } |
- return true; |
- } |
- |
- void join(BatchInfo that) { |
- SkASSERT(this->canJoin(that)); |
- fData |= that.fData; |
- } |
- |
- union { |
- struct { |
- AntialiasMode fAntialiasMode; |
- uint8_t fShapeTypes; |
- uint8_t fInnerShapeTypes; |
- bool fHasPerspective : 1; |
- bool fHasLocalMatrix : 1; |
- bool fHasParams : 1; |
- bool fNonSquare : 1; |
- bool fUsesLocalCoords : 1; |
- bool fCannotTweakAlphaForCoverage : 1; |
- bool fCannotDiscard : 1; |
- }; |
- uint32_t fData; |
- }; |
-}; |
- |
-// This is required since all the data must fit into 32 bits of a shader key. |
-GR_STATIC_ASSERT(sizeof(uint32_t) == sizeof(BatchInfo)); |
-GR_STATIC_ASSERT(kNumShapeTypes <= 8); |
- |
-template<typename T> struct TRange { |
- bool operator ==(const TRange& that) const { |
- return fStart == that.fStart && fCount == that.fCount; |
- } |
- bool operator !=(const TRange& that) const { return !(*this == that); } |
- |
- bool isEmpty() const { return fCount <= 0; } |
- T end() { return fStart + fCount; } |
- |
- T fStart; |
- T fCount; |
-}; |
- |
-typedef TRange<int16_t> IndexRange; |
-typedef TRange<int> InstanceRange; |
- |
-} |
- |
-#endif |