diff options
author | 2016-05-11 05:21:56 -0700 | |
---|---|---|
committer | 2016-05-11 05:21:56 -0700 | |
commit | e19aecdd13d83b2235faf3e2601100a2fd980b7b (patch) | |
tree | 75f24881e08d8c287b53bc3d055c68b3406ae8bf /src/gpu/vk/GrVkPipeline.cpp | |
parent | 3e11da7fa9b7ab26df6d6197c3f6a71d0826c97e (diff) |
Revert of Separate user and raw stencil settings (patchset #8 id:140001 of https://codereview.chromium.org/1962243002/ )
Reason for revert:
This seems to be breaking nanobench on the Windows bots with:
Caught exception 3221225477 EXCEPTION_ACCESS_VIOLATION
GrDrawTarget::stencilPath +c7
GrStencilAndCoverPathRenderer::onDrawPath +fd
GrDrawContext::internalDrawPath +509
GrDrawContext::drawPath +223
GrBlurUtils::drawPathWithMaskFilter +250
SkGpuDevice::drawPath +2ea
SkCanvas::onDrawPath +2e3
SkRecordDraw +2e6
SkBigPicture::playback +e5
SkCanvas::onDrawPicture +12c
SkCanvas::drawPicture +145
SkRecordDraw +2e6
SkBigPicture::playback +e5
SkCanvas::onDrawPicture +12c
SkCanvas::drawPicture +145
SkRecordDraw +261
SkBigPicture::playback +e5
SkCanvas::onDrawPicture +12c
SkCanvas::drawPicture +145
SkMultiPictureDraw::draw +bf
SKPBench::drawMPDPicture +1e0
SKPBench::onDraw +34
Benchmark::draw +32
time +92
setup_gpu_bench +6e
nanobench_main +77b
Original issue's description:
> 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
TBR=bsalomon@google.com,cdalton@nvidia.com
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review-Url: https://codereview.chromium.org/1969693003
Diffstat (limited to 'src/gpu/vk/GrVkPipeline.cpp')
-rw-r--r-- | src/gpu/vk/GrVkPipeline.cpp | 114 |
1 files changed, 55 insertions, 59 deletions
diff --git a/src/gpu/vk/GrVkPipeline.cpp b/src/gpu/vk/GrVkPipeline.cpp index 8227e12cb1..2a9c6e2dd4 100644 --- a/src/gpu/vk/GrVkPipeline.cpp +++ b/src/gpu/vk/GrVkPipeline.cpp @@ -100,51 +100,51 @@ static void setup_input_assembly_state(GrPrimitiveType primitiveType, VkStencilOp stencil_op_to_vk_stencil_op(GrStencilOp op) { static const VkStencilOp gTable[] = { - VK_STENCIL_OP_KEEP, // kKeep - VK_STENCIL_OP_ZERO, // kZero - VK_STENCIL_OP_REPLACE, // kReplace - VK_STENCIL_OP_INVERT, // kInvert - VK_STENCIL_OP_INCREMENT_AND_WRAP, // kIncWrap - VK_STENCIL_OP_DECREMENT_AND_WRAP, // kDecWrap - VK_STENCIL_OP_INCREMENT_AND_CLAMP, // kIncClamp - VK_STENCIL_OP_DECREMENT_AND_CLAMP, // kDecClamp + VK_STENCIL_OP_KEEP, // kKeep_StencilOp + VK_STENCIL_OP_REPLACE, // kReplace_StencilOp + VK_STENCIL_OP_INCREMENT_AND_WRAP, // kIncWrap_StencilOp + VK_STENCIL_OP_INCREMENT_AND_CLAMP, // kIncClamp_StencilOp + VK_STENCIL_OP_DECREMENT_AND_WRAP, // kDecWrap_StencilOp + VK_STENCIL_OP_DECREMENT_AND_CLAMP, // kDecClamp_StencilOp + VK_STENCIL_OP_ZERO, // kZero_StencilOp + VK_STENCIL_OP_INVERT, // kInvert_StencilOp }; - GR_STATIC_ASSERT(SK_ARRAY_COUNT(gTable) == kGrStencilOpCount); - GR_STATIC_ASSERT(0 == (int)GrStencilOp::kKeep); - GR_STATIC_ASSERT(1 == (int)GrStencilOp::kZero); - GR_STATIC_ASSERT(2 == (int)GrStencilOp::kReplace); - GR_STATIC_ASSERT(3 == (int)GrStencilOp::kInvert); - GR_STATIC_ASSERT(4 == (int)GrStencilOp::kIncWrap); - GR_STATIC_ASSERT(5 == (int)GrStencilOp::kDecWrap); - GR_STATIC_ASSERT(6 == (int)GrStencilOp::kIncClamp); - GR_STATIC_ASSERT(7 == (int)GrStencilOp::kDecClamp); - SkASSERT(op < (GrStencilOp)kGrStencilOpCount); - return gTable[(int)op]; + GR_STATIC_ASSERT(SK_ARRAY_COUNT(gTable) == kStencilOpCnt); + GR_STATIC_ASSERT(0 == kKeep_StencilOp); + GR_STATIC_ASSERT(1 == kReplace_StencilOp); + GR_STATIC_ASSERT(2 == kIncWrap_StencilOp); + GR_STATIC_ASSERT(3 == kIncClamp_StencilOp); + GR_STATIC_ASSERT(4 == kDecWrap_StencilOp); + GR_STATIC_ASSERT(5 == kDecClamp_StencilOp); + GR_STATIC_ASSERT(6 == kZero_StencilOp); + GR_STATIC_ASSERT(7 == kInvert_StencilOp); + SkASSERT((unsigned)op < kStencilOpCnt); + return gTable[op]; } -VkCompareOp stencil_func_to_vk_compare_op(GrStencilTest test) { +VkCompareOp stencil_func_to_vk_compare_op(GrStencilFunc basicFunc) { static const VkCompareOp gTable[] = { - VK_COMPARE_OP_ALWAYS, // kAlways - VK_COMPARE_OP_NEVER, // kNever - VK_COMPARE_OP_GREATER, // kGreater - VK_COMPARE_OP_GREATER_OR_EQUAL, // kGEqual - VK_COMPARE_OP_LESS, // kLess - VK_COMPARE_OP_LESS_OR_EQUAL, // kLEqual - VK_COMPARE_OP_EQUAL, // kEqual - VK_COMPARE_OP_NOT_EQUAL, // kNotEqual + VK_COMPARE_OP_ALWAYS, // kAlways_StencilFunc + VK_COMPARE_OP_NEVER, // kNever_StencilFunc + VK_COMPARE_OP_GREATER, // kGreater_StencilFunc + VK_COMPARE_OP_GREATER_OR_EQUAL, // kGEqual_StencilFunc + VK_COMPARE_OP_LESS, // kLess_StencilFunc + VK_COMPARE_OP_LESS_OR_EQUAL, // kLEqual_StencilFunc, + VK_COMPARE_OP_EQUAL, // kEqual_StencilFunc, + VK_COMPARE_OP_NOT_EQUAL, // kNotEqual_StencilFunc, }; - GR_STATIC_ASSERT(SK_ARRAY_COUNT(gTable) == kGrStencilTestCount); - GR_STATIC_ASSERT(0 == (int)GrStencilTest::kAlways); - GR_STATIC_ASSERT(1 == (int)GrStencilTest::kNever); - GR_STATIC_ASSERT(2 == (int)GrStencilTest::kGreater); - GR_STATIC_ASSERT(3 == (int)GrStencilTest::kGEqual); - GR_STATIC_ASSERT(4 == (int)GrStencilTest::kLess); - GR_STATIC_ASSERT(5 == (int)GrStencilTest::kLEqual); - GR_STATIC_ASSERT(6 == (int)GrStencilTest::kEqual); - GR_STATIC_ASSERT(7 == (int)GrStencilTest::kNotEqual); - SkASSERT(test < (GrStencilTest)kGrStencilTestCount); - - return gTable[(int)test]; + GR_STATIC_ASSERT(SK_ARRAY_COUNT(gTable) == kBasicStencilFuncCnt); + GR_STATIC_ASSERT(0 == kAlways_StencilFunc); + GR_STATIC_ASSERT(1 == kNever_StencilFunc); + GR_STATIC_ASSERT(2 == kGreater_StencilFunc); + GR_STATIC_ASSERT(3 == kGEqual_StencilFunc); + GR_STATIC_ASSERT(4 == kLess_StencilFunc); + GR_STATIC_ASSERT(5 == kLEqual_StencilFunc); + GR_STATIC_ASSERT(6 == kEqual_StencilFunc); + GR_STATIC_ASSERT(7 == kNotEqual_StencilFunc); + SkASSERT((unsigned)basicFunc < kBasicStencilFuncCnt); + + return gTable[basicFunc]; } void setup_depth_stencil_state(const GrVkGpu* gpu, @@ -162,28 +162,24 @@ void setup_depth_stencil_state(const GrVkGpu* gpu, stencilInfo->stencilTestEnable = !stencilSettings.isDisabled(); if (!stencilSettings.isDisabled()) { // Set front face - const GrStencilSettings::Face& front = stencilSettings.front(); - stencilInfo->front.failOp = stencil_op_to_vk_stencil_op(front.fFailOp); - stencilInfo->front.passOp = stencil_op_to_vk_stencil_op(front.fPassOp); + GrStencilSettings::Face face = GrStencilSettings::kFront_Face; + stencilInfo->front.failOp = stencil_op_to_vk_stencil_op(stencilSettings.failOp(face)); + stencilInfo->front.passOp = stencil_op_to_vk_stencil_op(stencilSettings.passOp(face)); stencilInfo->front.depthFailOp = stencilInfo->front.failOp; - stencilInfo->front.compareOp = stencil_func_to_vk_compare_op(front.fTest); - stencilInfo->front.compareMask = front.fTestMask; - stencilInfo->front.writeMask = front.fWriteMask; - stencilInfo->front.reference = front.fRef; + stencilInfo->front.compareOp = stencil_func_to_vk_compare_op(stencilSettings.func(face)); + stencilInfo->front.compareMask = stencilSettings.funcMask(face); + stencilInfo->front.writeMask = stencilSettings.writeMask(face); + stencilInfo->front.reference = stencilSettings.funcRef(face); // Set back face - if (!stencilSettings.isTwoSided()) { - stencilInfo->back = stencilInfo->front; - } else { - const GrStencilSettings::Face& back = stencilSettings.back(); - stencilInfo->back.failOp = stencil_op_to_vk_stencil_op(back.fFailOp); - stencilInfo->back.passOp = stencil_op_to_vk_stencil_op(back.fPassOp); - stencilInfo->back.depthFailOp = stencilInfo->front.failOp; - stencilInfo->back.compareOp = stencil_func_to_vk_compare_op(back.fTest); - stencilInfo->back.compareMask = back.fTestMask; - stencilInfo->back.writeMask = back.fWriteMask; - stencilInfo->back.reference = back.fRef; - } + face = GrStencilSettings::kBack_Face; + stencilInfo->back.failOp = stencil_op_to_vk_stencil_op(stencilSettings.failOp(face)); + stencilInfo->back.passOp = stencil_op_to_vk_stencil_op(stencilSettings.passOp(face)); + stencilInfo->back.depthFailOp = stencilInfo->front.failOp; + stencilInfo->back.compareOp = stencil_func_to_vk_compare_op(stencilSettings.func(face)); + stencilInfo->back.compareMask = stencilSettings.funcMask(face); + stencilInfo->back.writeMask = stencilSettings.writeMask(face); + stencilInfo->back.reference = stencilSettings.funcRef(face); } stencilInfo->minDepthBounds = 0.0f; stencilInfo->maxDepthBounds = 1.0f; |