Use half floats for non-normalized color in GrTextureOp
Bug: skia:
Change-Id: Ie681369ef4b1d3d43c326da684afde9ce6d08486
Reviewed-on: https://skia-review.googlesource.com/c/171726
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/ops/GrQuadPerEdgeAA.h b/src/gpu/ops/GrQuadPerEdgeAA.h
index 578e431..e8b96a0 100644
--- a/src/gpu/ops/GrQuadPerEdgeAA.h
+++ b/src/gpu/ops/GrQuadPerEdgeAA.h
@@ -22,6 +22,8 @@
namespace GrQuadPerEdgeAA {
enum class Domain : bool { kNo = false, kYes = true };
+ enum class ColorType { kNone, kByte, kHalf, kLast = kHalf };
+ static const int kColorTypeCount = static_cast<int>(ColorType::kLast) + 1;
// Specifies the vertex configuration for an op that renders per-edge AA quads. The vertex
// order (when enabled) is device position, color, local position, domain, aa edge equations.
@@ -29,19 +31,20 @@
// GPAttributes maintains. If hasLocalCoords is false, then the local quad type can be ignored.
struct VertexSpec {
public:
- VertexSpec(GrQuadType deviceQuadType, bool hasColor, GrQuadType localQuadType,
+ VertexSpec(GrQuadType deviceQuadType, ColorType colorType, GrQuadType localQuadType,
bool hasLocalCoords, Domain domain, GrAAType aa)
: fDeviceQuadType(static_cast<unsigned>(deviceQuadType))
, fLocalQuadType(static_cast<unsigned>(localQuadType))
, fHasLocalCoords(hasLocalCoords)
- , fHasColor(hasColor)
+ , fColorType(static_cast<unsigned>(colorType))
, fHasDomain(static_cast<unsigned>(domain))
, fUsesCoverageAA(aa == GrAAType::kCoverage) { }
GrQuadType deviceQuadType() const { return static_cast<GrQuadType>(fDeviceQuadType); }
GrQuadType localQuadType() const { return static_cast<GrQuadType>(fLocalQuadType); }
bool hasLocalCoords() const { return fHasLocalCoords; }
- bool hasVertexColors() const { return fHasColor; }
+ ColorType colorType() const { return static_cast<ColorType>(fColorType); }
+ bool hasVertexColors() const { return ColorType::kNone != this->colorType(); }
bool hasDomain() const { return fHasDomain; }
bool usesCoverageAA() const { return fUsesCoverageAA; }
@@ -52,11 +55,12 @@
private:
static_assert(kGrQuadTypeCount <= 4, "GrQuadType doesn't fit in 2 bits");
+ static_assert(kColorTypeCount <= 4, "Color doesn't fit in 2 bits");
unsigned fDeviceQuadType: 2;
unsigned fLocalQuadType: 2;
unsigned fHasLocalCoords: 1;
- unsigned fHasColor: 1;
+ unsigned fColorType : 2;
unsigned fHasDomain: 1;
unsigned fUsesCoverageAA: 1;
};
@@ -107,9 +111,7 @@
// variables the emitted code must declare, so that the calling GP can ensure there's no
// naming conflicts with their own code.
- void emitColor(GrGLSLPrimitiveProcessor::EmitArgs& args,
- GrGLSLColorSpaceXformHelper* colorSpaceXformHelper,
- const char* colorVarName) const;
+ void emitColor(GrGLSLPrimitiveProcessor::EmitArgs& args, const char* colorVarName) const;
// localCoordName will be declared as a float2, with any domain applied after any
// perspective division is performed.
@@ -141,7 +143,7 @@
// Returns the advanced pointer in vertices.
// TODO4F: Switch GrColor to GrVertexColor
void* Tessellate(void* vertices, const VertexSpec& spec, const GrPerspQuad& deviceQuad,
- const GrColor& color, const GrPerspQuad& localQuad, const SkRect& domain,
+ const SkPMColor4f& color, const GrPerspQuad& localQuad, const SkRect& domain,
GrQuadAAFlags aa);
} // namespace GrQuadPerEdgeAA