void GrGLPathRendering::flushPathStencilSettings(const GrStencilSettings& stencilSettings) { if (fHWPathStencilSettings != stencilSettings) { // Just the func, ref, and mask is set here. The op and write mask are params to the call // that draws the path to the SB (glStencilFillPath) GrGLenum func = GrToGLStencilFunc(stencilSettings.func(GrStencilSettings::kFront_Face)); GL_CALL(PathStencilFunc(func, stencilSettings.funcRef(GrStencilSettings::kFront_Face), stencilSettings.funcMask(GrStencilSettings::kFront_Face))); fHWPathStencilSettings = stencilSettings; } }
void setup_depth_stencil_state(const GrVkGpu* gpu, const GrStencilSettings& stencilSettings, VkPipelineDepthStencilStateCreateInfo* stencilInfo) { memset(stencilInfo, 0, sizeof(VkPipelineDepthStencilStateCreateInfo)); stencilInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; stencilInfo->pNext = nullptr; stencilInfo->flags = 0; // set depth testing defaults stencilInfo->depthTestEnable = VK_FALSE; stencilInfo->depthWriteEnable = VK_FALSE; stencilInfo->depthCompareOp = VK_COMPARE_OP_ALWAYS; stencilInfo->depthBoundsTestEnable = VK_FALSE; stencilInfo->stencilTestEnable = !stencilSettings.isDisabled(); if (!stencilSettings.isDisabled()) { // Set front face 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(stencilSettings.func(face)); stencilInfo->front.compareMask = stencilSettings.funcMask(face); stencilInfo->front.writeMask = stencilSettings.writeMask(face); stencilInfo->front.reference = stencilSettings.funcRef(face); // Set back face 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; }