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 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrVkBackendSurface_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrVkBackendSurface_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAPI.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/gpu/vk/SkiaVulkan.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker #include <string_view> 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker class GrBackendFormat; 17*c8dee2aaSAndroid Build Coastguard Worker class GrBackendTexture; 18*c8dee2aaSAndroid Build Coastguard Worker class GrBackendRenderTarget; 19*c8dee2aaSAndroid Build Coastguard Worker struct GrVkImageInfo; 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu { 22*c8dee2aaSAndroid Build Coastguard Worker struct VulkanYcbcrConversionInfo; 23*c8dee2aaSAndroid Build Coastguard Worker } 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker namespace GrBackendFormats { 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker SK_API GrBackendFormat MakeVk(VkFormat format, bool willUseDRMFormatModifiers = false); 28*c8dee2aaSAndroid Build Coastguard Worker SK_API GrBackendFormat MakeVk(const skgpu::VulkanYcbcrConversionInfo& ycbcrInfo, 29*c8dee2aaSAndroid Build Coastguard Worker bool willUseDRMFormatModifiers = false); 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker SK_API bool AsVkFormat(const GrBackendFormat&, VkFormat*); 32*c8dee2aaSAndroid Build Coastguard Worker SK_API const skgpu::VulkanYcbcrConversionInfo* GetVkYcbcrConversionInfo(const GrBackendFormat&); 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker } // namespace GrBackendFormats 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker namespace GrBackendTextures { 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker SK_API GrBackendTexture MakeVk(int width, 40*c8dee2aaSAndroid Build Coastguard Worker int height, 41*c8dee2aaSAndroid Build Coastguard Worker const GrVkImageInfo&, 42*c8dee2aaSAndroid Build Coastguard Worker std::string_view label = {}); 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker // If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed 45*c8dee2aaSAndroid Build Coastguard Worker // in pointer and returns true. This snapshot will set the fImageLayout to the current layout 46*c8dee2aaSAndroid Build Coastguard Worker // state. Otherwise returns false if the backend API is not Vulkan. 47*c8dee2aaSAndroid Build Coastguard Worker SK_API bool GetVkImageInfo(const GrBackendTexture&, GrVkImageInfo*); 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker // Anytime the client changes the VkImageLayout of the VkImage captured by this 50*c8dee2aaSAndroid Build Coastguard Worker // GrBackendTexture, they must call this function to notify Skia of the changed layout. 51*c8dee2aaSAndroid Build Coastguard Worker SK_API void SetVkImageLayout(GrBackendTexture*, VkImageLayout); 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker } // namespace GrBackendTextures 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker namespace GrBackendRenderTargets { 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker SK_API GrBackendRenderTarget MakeVk(int width, int height, const GrVkImageInfo&); 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker // If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed 61*c8dee2aaSAndroid Build Coastguard Worker // in pointer and returns true. This snapshot will set the fImageLayout to the current layout 62*c8dee2aaSAndroid Build Coastguard Worker // state. Otherwise returns false if the backend API is not Vulkan. 63*c8dee2aaSAndroid Build Coastguard Worker SK_API bool GetVkImageInfo(const GrBackendRenderTarget&, GrVkImageInfo*); 64*c8dee2aaSAndroid Build Coastguard Worker 65*c8dee2aaSAndroid Build Coastguard Worker // Anytime the client changes the VkImageLayout of the VkImage captured by this 66*c8dee2aaSAndroid Build Coastguard Worker // GrBackendRenderTarget, they must call this function to notify Skia of the changed layout. 67*c8dee2aaSAndroid Build Coastguard Worker SK_API void SetVkImageLayout(GrBackendRenderTarget*, VkImageLayout); 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker } // namespace GrBackendRenderTargets 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker #endif 72