1b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel/* 2b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel * Copyright 2014 Google Inc. 3b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel * 4b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel * Use of this source code is governed by a BSD-style license that can be 5b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel * found in the LICENSE file. 6b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel */ 7b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel 8a811b1200cc0b5e3819c89f62def23ec203d4b5aBrian Salomon#include "GrProcessorAnalysis.h" 99513143efa734bef0c1a0c7f945022572dbc8518egdaniel#include "GrGeometryProcessor.h" 10895274391db8df7357334aec260edca2e1735626Brian Salomon#include "ops/GrDrawOp.h" 1174417824cd988f7d6114858e09720ba00416ce11joshualitt 12650ced07d9660e74eb34ddff79293583f7b70837Brian SalomonGrColorFragmentProcessorAnalysis::GrColorFragmentProcessorAnalysis( 13650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon const GrProcessorAnalysisColor& input, 14650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon const GrFragmentProcessor* const* processors, 15650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon int cnt) { 16650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon fCompatibleWithCoverageAsAlpha = true; 17650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon fIsOpaque = input.isOpaque(); 18650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon fUsesLocalCoords = false; 19650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon fProcessorsToEliminate = 0; 20650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon GrColor color; 21650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon if ((fKnowOutputColor = input.isConstant(&color))) { 22650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon fLastKnownOutputColor = GrColor4f::FromGrColor(color); 23650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon } 24ac856c97acc84dcb54d9cdb068ec8a02b8869647bsalomon for (int i = 0; i < cnt; ++i) { 25650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon if (fUsesLocalCoords && !fKnowOutputColor && !fCompatibleWithCoverageAsAlpha && 26650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon !fIsOpaque) { 27650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon break; 28b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel } 29eec6f7be5461e588210f383b8af18f324a2bdb46Brian Salomon const GrFragmentProcessor* fp = processors[i]; 30650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon if (fKnowOutputColor && 31c0b642ca48d58416409e555549434066f09692b7Brian Salomon fp->hasConstantOutputForConstantInput(fLastKnownOutputColor, &fLastKnownOutputColor)) { 32650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon ++fProcessorsToEliminate; 33eec6f7be5461e588210f383b8af18f324a2bdb46Brian Salomon fIsOpaque = fLastKnownOutputColor.isOpaque(); 34bfafcba05a54e1bc9c3074353a155d61119d095cBrian Salomon // We reset these since the caller is expected to not use the earlier fragment 35bfafcba05a54e1bc9c3074353a155d61119d095cBrian Salomon // processors. 36650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon fCompatibleWithCoverageAsAlpha = true; 37bfafcba05a54e1bc9c3074353a155d61119d095cBrian Salomon fUsesLocalCoords = false; 3828207df02b3dee83141520adf23df2c6aa087860Brian Salomon } else { 39650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon fKnowOutputColor = false; 4028207df02b3dee83141520adf23df2c6aa087860Brian Salomon if (fIsOpaque && !fp->preservesOpaqueInput()) { 4128207df02b3dee83141520adf23df2c6aa087860Brian Salomon fIsOpaque = false; 4228207df02b3dee83141520adf23df2c6aa087860Brian Salomon } 43650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon if (fCompatibleWithCoverageAsAlpha && !fp->compatibleWithCoverageAsAlpha()) { 44650ced07d9660e74eb34ddff79293583f7b70837Brian Salomon fCompatibleWithCoverageAsAlpha = false; 4528207df02b3dee83141520adf23df2c6aa087860Brian Salomon } 4628207df02b3dee83141520adf23df2c6aa087860Brian Salomon if (fp->usesLocalCoords()) { 4728207df02b3dee83141520adf23df2c6aa087860Brian Salomon fUsesLocalCoords = true; 4828207df02b3dee83141520adf23df2c6aa087860Brian Salomon } 49bfafcba05a54e1bc9c3074353a155d61119d095cBrian Salomon } 50b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel } 51b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel} 52