aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrPipelineBuilder.cpp
diff options
context:
space:
mode:
authorGravatar cdalton <cdalton@nvidia.com>2016-05-11 13:58:08 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-05-11 13:58:09 -0700
commit93a379bd4d6b30d86c270b879cf172d80172a72b (patch)
treeccf26fcf4d1fcba61a816f6c8fcdc8c57ddbda3b /src/gpu/GrPipelineBuilder.cpp
parentf8237781d28bad38522b3b351688a2f7ee5e0caa (diff)
Separate user and raw stencil settings
Adds a new GrUserStencilSettings class that describes in abstract terms how a draw will use the stencil (e.g. kAlwaysIfInClip, kSetClipBit, etc.). GrPipelineBuilder now only defines the GrUserStencilSettings. When the GrPipeline is finalized, the user stencil settings are then translated into concrete GrStencilSettings. At this point, GrClipMaskManager only needs to tell the GrAppliedClip whether or not there is a stencil clip. It does not need to modify stencil settings and GrPipelineBuilder does not need AutoRestoreStencil. This is one step of the stencil overhaul. In the future it will also allow us to clean up the special case handling for nvpr and the stateful fClipMode member of GrClipMaskManager. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1962243002 Committed: https://skia.googlesource.com/skia/+/12dbb3947e1aaf205b4fcf13b40e54e50650eb37 Review-Url: https://codereview.chromium.org/1962243002
Diffstat (limited to 'src/gpu/GrPipelineBuilder.cpp')
-rw-r--r--src/gpu/GrPipelineBuilder.cpp12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/gpu/GrPipelineBuilder.cpp b/src/gpu/GrPipelineBuilder.cpp
index 1fd568e366..4731cbbbe1 100644
--- a/src/gpu/GrPipelineBuilder.cpp
+++ b/src/gpu/GrPipelineBuilder.cpp
@@ -16,11 +16,14 @@
#include "effects/GrPorterDuffXferProcessor.h"
GrPipelineBuilder::GrPipelineBuilder()
- : fFlags(0x0), fDrawFace(kBoth_DrawFace) {
+ : fFlags(0x0),
+ fUserStencilSettings(&GrUserStencilSettings::kUnused),
+ fDrawFace(kBoth_DrawFace) {
SkDEBUGCODE(fBlockEffectRemovalCnt = 0;)
}
-GrPipelineBuilder::GrPipelineBuilder(const GrPaint& paint, GrRenderTarget* rt, const GrClip& clip) {
+GrPipelineBuilder::GrPipelineBuilder(const GrPaint& paint, GrRenderTarget* rt, const GrClip& clip)
+ : GrPipelineBuilder() {
SkDEBUGCODE(fBlockEffectRemovalCnt = 0;)
for (int i = 0; i < paint.numColorFragmentProcessors(); ++i) {
@@ -35,11 +38,6 @@ GrPipelineBuilder::GrPipelineBuilder(const GrPaint& paint, GrRenderTarget* rt, c
this->setRenderTarget(rt);
- // These have no equivalent in GrPaint, set them to defaults
- fDrawFace = kBoth_DrawFace;
- fStencilSettings.setDisabled();
- fFlags = 0;
-
fClip = clip;
this->setState(GrPipelineBuilder::kHWAntialias_Flag,