Add a new non-AA rect op that does not inherit from GrLegacyMeshDrawOp.
authorBrian Salomon <bsalomon@google.com>
Wed, 3 May 2017 18:00:51 +0000 (14:00 -0400)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Wed, 3 May 2017 20:50:40 +0000 (20:50 +0000)
commitff574e0eb79b83c2e797dec8f1661378876202d8
treefe12d664ddbc0c7e84d284e11e9d25ac66230d37
parentbc4c96bc65ab6ee0acc62d5d8a6613156991ac6c
Add a new non-AA rect op that does not inherit from GrLegacyMeshDrawOp.

This uses a new helper class, GrSimpleMeshDrawOpHelper, which it uses to fullfill the GrMeshDrawOp contract and to construct its GrPipline when flushed. The helper is intended to be used such that the op only stores a GrProcessorSet if it is constructed with a "nontrivial" GrPaint. "Trivial" currently means no fragment processors and src-over blending. The helper allows the op subclass to specify whether it supports stenciling via a template parameter. The helper class is initially intended to be used for ops that don't have per-vertex colors and construct a single GrPipeline at flush time, though perhaps this can be relaxed in future changes.

On the microbenchmark "rotated_rects_bw_same_transparent_srcover" this produces a 18-20% reduction in time on my Z840 running Linux and 33% on my 2010 MacPro.

Bug: skia:
Change-Id: I9f655827a70bee585b0b0e1255371ffd995a0b80
Reviewed-on: https://skia-review.googlesource.com/14604
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
12 files changed:
gn/gpu.gni
src/gpu/GrOpFlushState.h
src/gpu/GrPaint.cpp
src/gpu/GrPaint.h
src/gpu/GrPipeline.h
src/gpu/GrProcessorSet.cpp
src/gpu/GrProcessorSet.h
src/gpu/GrRenderTargetContext.cpp
src/gpu/ops/GrMeshDrawOp.cpp
src/gpu/ops/GrNewNonAAFillRectOp.cpp [new file with mode: 0644]
src/gpu/ops/GrNewNonAAFillRectOp.h [new file with mode: 0644]
src/gpu/ops/GrSimpleMeshDrawOpHelper.h [new file with mode: 0644]