1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2023 Google LLC
3*c8dee2aaSAndroid Build Coastguard Worker *
4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker */
7*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/vk/GrVkContextThreadSafeProxy.h"
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/GpuTypes.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrTypes.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/vk/GrVkCaps.h"
13*c8dee2aaSAndroid Build Coastguard Worker
14*c8dee2aaSAndroid Build Coastguard Worker class GrCaps;
15*c8dee2aaSAndroid Build Coastguard Worker struct GrContextOptions;
16*c8dee2aaSAndroid Build Coastguard Worker
GrVkContextThreadSafeProxy(const GrContextOptions & opts)17*c8dee2aaSAndroid Build Coastguard Worker GrVkContextThreadSafeProxy::GrVkContextThreadSafeProxy(const GrContextOptions& opts)
18*c8dee2aaSAndroid Build Coastguard Worker : GrContextThreadSafeProxy(GrBackendApi::kVulkan, opts) {}
19*c8dee2aaSAndroid Build Coastguard Worker
isValidCharacterizationForVulkan(sk_sp<const GrCaps> caps,bool isTextureable,skgpu::Mipmapped isMipmapped,skgpu::Protected isProtected,bool vkRTSupportsInputAttachment,bool forVulkanSecondaryCommandBuffer)20*c8dee2aaSAndroid Build Coastguard Worker bool GrVkContextThreadSafeProxy::isValidCharacterizationForVulkan(
21*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const GrCaps> caps,
22*c8dee2aaSAndroid Build Coastguard Worker bool isTextureable,
23*c8dee2aaSAndroid Build Coastguard Worker skgpu::Mipmapped isMipmapped,
24*c8dee2aaSAndroid Build Coastguard Worker skgpu::Protected isProtected,
25*c8dee2aaSAndroid Build Coastguard Worker bool vkRTSupportsInputAttachment,
26*c8dee2aaSAndroid Build Coastguard Worker bool forVulkanSecondaryCommandBuffer) {
27*c8dee2aaSAndroid Build Coastguard Worker if (forVulkanSecondaryCommandBuffer &&
28*c8dee2aaSAndroid Build Coastguard Worker (isTextureable || isMipmapped == skgpu::Mipmapped::kYes || vkRTSupportsInputAttachment)) {
29*c8dee2aaSAndroid Build Coastguard Worker return false;
30*c8dee2aaSAndroid Build Coastguard Worker }
31*c8dee2aaSAndroid Build Coastguard Worker
32*c8dee2aaSAndroid Build Coastguard Worker const GrVkCaps* vkCaps = (const GrVkCaps*)caps.get();
33*c8dee2aaSAndroid Build Coastguard Worker
34*c8dee2aaSAndroid Build Coastguard Worker // The protection status of the characterization and the context need to match
35*c8dee2aaSAndroid Build Coastguard Worker return isProtected == GrProtected(vkCaps->supportsProtectedContent());
36*c8dee2aaSAndroid Build Coastguard Worker }
37