1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2015 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "src/gpu/GrDrawOpTest.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include "include/core/SkTypes.h" 11cb93a386Sopenharmony_ci#include "include/private/GrContext_Base.h" 12cb93a386Sopenharmony_ci#include "include/utils/SkRandom.h" 13cb93a386Sopenharmony_ci#include "src/gpu/GrBaseContextPriv.h" 14cb93a386Sopenharmony_ci#include "src/gpu/GrCaps.h" 15cb93a386Sopenharmony_ci#include "src/gpu/GrUserStencilSettings.h" 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci#if GR_TEST_UTILS 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ciconst GrUserStencilSettings* GrGetRandomStencil(SkRandom* random, GrContext_Base* context) { 20cb93a386Sopenharmony_ci if (context->priv().caps()->avoidStencilBuffers()) { 21cb93a386Sopenharmony_ci return &GrUserStencilSettings::kUnused; 22cb93a386Sopenharmony_ci } 23cb93a386Sopenharmony_ci static constexpr GrUserStencilSettings kReads( 24cb93a386Sopenharmony_ci GrUserStencilSettings::StaticInit< 25cb93a386Sopenharmony_ci 0x8080, 26cb93a386Sopenharmony_ci GrUserStencilTest::kLess, 27cb93a386Sopenharmony_ci 0xffff, 28cb93a386Sopenharmony_ci GrUserStencilOp::kKeep, 29cb93a386Sopenharmony_ci GrUserStencilOp::kKeep, 30cb93a386Sopenharmony_ci 0xffff>() 31cb93a386Sopenharmony_ci ); 32cb93a386Sopenharmony_ci static constexpr GrUserStencilSettings kWrites( 33cb93a386Sopenharmony_ci GrUserStencilSettings::StaticInit< 34cb93a386Sopenharmony_ci 0xffff, 35cb93a386Sopenharmony_ci GrUserStencilTest::kAlways, 36cb93a386Sopenharmony_ci 0xffff, 37cb93a386Sopenharmony_ci GrUserStencilOp::kReplace, 38cb93a386Sopenharmony_ci GrUserStencilOp::kReplace, 39cb93a386Sopenharmony_ci 0xffff>() 40cb93a386Sopenharmony_ci ); 41cb93a386Sopenharmony_ci static constexpr GrUserStencilSettings kReadsAndWrites( 42cb93a386Sopenharmony_ci GrUserStencilSettings::StaticInit< 43cb93a386Sopenharmony_ci 0x8000, 44cb93a386Sopenharmony_ci GrUserStencilTest::kEqual, 45cb93a386Sopenharmony_ci 0x6000, 46cb93a386Sopenharmony_ci GrUserStencilOp::kIncWrap, 47cb93a386Sopenharmony_ci GrUserStencilOp::kInvert, 48cb93a386Sopenharmony_ci 0x77ff>() 49cb93a386Sopenharmony_ci ); 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ci static const GrUserStencilSettings* kStencilSettings[] = { 52cb93a386Sopenharmony_ci &GrUserStencilSettings::kUnused, 53cb93a386Sopenharmony_ci &kReads, 54cb93a386Sopenharmony_ci &kWrites, 55cb93a386Sopenharmony_ci &kReadsAndWrites, 56cb93a386Sopenharmony_ci }; 57cb93a386Sopenharmony_ci return kStencilSettings[random->nextULessThan(SK_ARRAY_COUNT(kStencilSettings))]; 58cb93a386Sopenharmony_ci} 59cb93a386Sopenharmony_ci 60cb93a386Sopenharmony_ci#endif 61