blob: b03f25528b84d9919b49780cc6b12a8242177be6 [file] [log] [blame]
Hal Canaryb6c5e5b2017-10-09 16:13:02 -04001/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "tests/Test.h"
Hal Canaryb6c5e5b2017-10-09 16:13:02 -04009
10using sk_gpu_test::GrContextFactory;
11using sk_gpu_test::GLTestContext;
12using sk_gpu_test::ContextInfo;
13
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040014namespace skiatest {
15
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040016bool IsGLContextType(sk_gpu_test::GrContextFactory::ContextType type) {
Greg Danielbdf12ad2018-10-12 09:31:11 -040017 return GrBackendApi::kOpenGL == GrContextFactory::ContextTypeBackend(type);
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040018}
19bool IsVulkanContextType(sk_gpu_test::GrContextFactory::ContextType type) {
Greg Danielbdf12ad2018-10-12 09:31:11 -040020 return GrBackendApi::kVulkan == GrContextFactory::ContextTypeBackend(type);
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040021}
Timothy Liang760dbc42018-07-17 13:28:20 -040022bool IsMetalContextType(sk_gpu_test::GrContextFactory::ContextType type) {
Greg Danielbdf12ad2018-10-12 09:31:11 -040023 return GrBackendApi::kMetal == GrContextFactory::ContextTypeBackend(type);
Timothy Liang760dbc42018-07-17 13:28:20 -040024}
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040025bool IsRenderingGLContextType(sk_gpu_test::GrContextFactory::ContextType type) {
26 return IsGLContextType(type) && GrContextFactory::IsRenderingContext(type);
27}
Brian Osman7c597742019-03-26 11:10:11 -040028bool IsMockContextType(sk_gpu_test::GrContextFactory::ContextType type) {
29 return type == GrContextFactory::kMock_ContextType;
30}
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040031
32void RunWithGPUTestContexts(GrContextTestFn* test, GrContextTypeFilterFn* contextTypeFilter,
Brian Salomondcfca432017-11-15 15:48:03 -050033 Reporter* reporter, const GrContextOptions& options) {
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040034#if defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_WIN) || defined(SK_BUILD_FOR_MAC)
35 static constexpr auto kNativeGLType = GrContextFactory::kGL_ContextType;
36#else
37 static constexpr auto kNativeGLType = GrContextFactory::kGLES_ContextType;
38#endif
39
40 for (int typeInt = 0; typeInt < GrContextFactory::kContextTypeCnt; ++typeInt) {
41 GrContextFactory::ContextType contextType = (GrContextFactory::ContextType) typeInt;
42 // Use "native" instead of explicitly trying OpenGL and OpenGL ES. Do not use GLES on
43 // desktop since tests do not account for not fixing http://skbug.com/2809
44 if (contextType == GrContextFactory::kGL_ContextType ||
45 contextType == GrContextFactory::kGLES_ContextType) {
46 if (contextType != kNativeGLType) {
47 continue;
48 }
49 }
Brian Salomondcfca432017-11-15 15:48:03 -050050 // We destroy the factory and its associated contexts after each test. This is due to the
51 // fact that the command buffer sits on top of the native GL windowing (cgl, wgl, ...) but
52 // also tracks which of its contexts is current above that API and gets tripped up if the
53 // native windowing API is used directly outside of the command buffer code.
54 GrContextFactory factory(options);
Chris Daltonb3c97452019-06-25 20:07:56 -060055 ContextInfo ctxInfo = factory.getContextInfo(contextType);
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040056 if (contextTypeFilter && !(*contextTypeFilter)(contextType)) {
57 continue;
58 }
59
60 ReporterContext ctx(reporter, SkString(GrContextFactory::ContextTypeName(contextType)));
61 if (ctxInfo.grContext()) {
62 (*test)(reporter, ctxInfo);
63 ctxInfo.grContext()->flush();
64 }
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040065 }
Hal Canaryb6c5e5b2017-10-09 16:13:02 -040066}
67} // namespace skiatest