Add test for first draw blend behavior in HWUI pipeline
Bug: 65077146 Test: BakedOpRendererTests Change-Id: Ia3139a01fe25344a19f2b947069bd686303b9fd5
This commit is contained in:
@@ -40,6 +40,14 @@ public:
|
||||
GLenum* outSrc, GLenum* outDst);
|
||||
void setFactors(GLenum src, GLenum dst);
|
||||
|
||||
bool getEnabled() {
|
||||
return mEnabled;
|
||||
}
|
||||
void getFactors(GLenum* src, GLenum* dst) {
|
||||
*src = mSrcMode;
|
||||
*dst = mDstMode;
|
||||
}
|
||||
|
||||
void dump();
|
||||
private:
|
||||
Blend();
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <BakedOpRenderer.h>
|
||||
#include <GlopBuilder.h>
|
||||
#include <tests/common/TestUtils.h>
|
||||
|
||||
using namespace android::uirenderer;
|
||||
@@ -53,3 +54,53 @@ RENDERTHREAD_OPENGL_PIPELINE_TEST(BakedOpRenderer, startRepaintLayer_clear) {
|
||||
renderer.endLayer();
|
||||
}
|
||||
}
|
||||
|
||||
static void drawFirstOp(RenderState& renderState, int color, SkBlendMode mode) {
|
||||
BakedOpRenderer renderer(Caches::getInstance(), renderState, true, false, sLightInfo);
|
||||
|
||||
renderer.startFrame(100, 100, Rect(100, 100));
|
||||
SkPaint paint;
|
||||
paint.setColor(color);
|
||||
paint.setBlendMode(mode);
|
||||
|
||||
Rect dest(0, 0, 100, 100);
|
||||
Glop glop;
|
||||
GlopBuilder(renderState, Caches::getInstance(), &glop)
|
||||
.setRoundRectClipState(nullptr)
|
||||
.setMeshUnitQuad()
|
||||
.setFillPaint(paint, 1.0f)
|
||||
.setTransform(Matrix4::identity(), TransformFlags::None)
|
||||
.setModelViewMapUnitToRectSnap(dest)
|
||||
.build();
|
||||
renderer.renderGlop(nullptr, nullptr, glop);
|
||||
renderer.endFrame(Rect(100, 100));
|
||||
}
|
||||
|
||||
static void verifyBlend(RenderState& renderState, GLenum expectedSrc, GLenum expectedDst) {
|
||||
EXPECT_TRUE(renderState.blend().getEnabled());
|
||||
GLenum src;
|
||||
GLenum dst;
|
||||
renderState.blend().getFactors(&src, &dst);
|
||||
EXPECT_EQ(expectedSrc, src);
|
||||
EXPECT_EQ(expectedDst, dst);
|
||||
}
|
||||
|
||||
static void verifyBlendDisabled(RenderState& renderState) {
|
||||
EXPECT_FALSE(renderState.blend().getEnabled());
|
||||
}
|
||||
|
||||
RENDERTHREAD_OPENGL_PIPELINE_TEST(BakedOpRenderer, firstDrawBlend_clear) {
|
||||
// initialize blend state to nonsense value
|
||||
renderThread.renderState().blend().setFactors(GL_ONE, GL_ONE);
|
||||
|
||||
drawFirstOp(renderThread.renderState(), 0xfeff0000, SkBlendMode::kClear);
|
||||
verifyBlend(renderThread.renderState(), GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
|
||||
RENDERTHREAD_OPENGL_PIPELINE_TEST(BakedOpRenderer, firstDrawBlend_srcover) {
|
||||
// initialize blend state to nonsense value
|
||||
renderThread.renderState().blend().setFactors(GL_ONE, GL_ONE);
|
||||
|
||||
drawFirstOp(renderThread.renderState(), 0xfeff0000, SkBlendMode::kSrcOver);
|
||||
verifyBlendDisabled(renderThread.renderState());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user