blob: d4e43ba198d898e78a1e33f599f467a2c489681c [file] [log] [blame]
/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrVkTypes_DEFINED
#define GrVkTypes_DEFINED
#include "include/gpu/GpuTypes.h"
#include "include/gpu/vk/VulkanTypes.h"
using GrVkBackendMemory = skgpu::VulkanBackendMemory;
using GrVkAlloc = skgpu::VulkanAlloc;
using GrVkYcbcrConversionInfo = skgpu::VulkanYcbcrConversionInfo;
/*
* When wrapping a GrBackendTexture or GrBackendRendenderTarget, the fCurrentQueueFamily should
* either be VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_EXTERNAL, or VK_QUEUE_FAMILY_FOREIGN_EXT. If
* fSharingMode is VK_SHARING_MODE_EXCLUSIVE then fCurrentQueueFamily can also be the graphics
* queue index passed into Skia.
*/
struct GrVkImageInfo {
VkImage fImage = VK_NULL_HANDLE;
skgpu::VulkanAlloc fAlloc;
VkImageTiling fImageTiling = VK_IMAGE_TILING_OPTIMAL;
VkImageLayout fImageLayout = VK_IMAGE_LAYOUT_UNDEFINED;
VkFormat fFormat = VK_FORMAT_UNDEFINED;
VkImageUsageFlags fImageUsageFlags = 0;
uint32_t fSampleCount = 1;
uint32_t fLevelCount = 0;
uint32_t fCurrentQueueFamily = VK_QUEUE_FAMILY_IGNORED;
skgpu::Protected fProtected = skgpu::Protected::kNo;
GrVkYcbcrConversionInfo fYcbcrConversionInfo;
VkSharingMode fSharingMode = VK_SHARING_MODE_EXCLUSIVE;
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
bool fPartOfSwapchainOrAndroidWindow = false;
#endif
bool operator==(const GrVkImageInfo& that) const {
bool equal = fImage == that.fImage && fAlloc == that.fAlloc &&
fImageTiling == that.fImageTiling &&
fImageLayout == that.fImageLayout &&
fFormat == that.fFormat &&
fImageUsageFlags == that.fImageUsageFlags &&
fSampleCount == that.fSampleCount &&
fLevelCount == that.fLevelCount &&
fCurrentQueueFamily == that.fCurrentQueueFamily &&
fProtected == that.fProtected &&
fYcbcrConversionInfo == that.fYcbcrConversionInfo &&
fSharingMode == that.fSharingMode;
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
equal = equal && (fPartOfSwapchainOrAndroidWindow == that.fPartOfSwapchainOrAndroidWindow);
#endif
return equal;
}
};
using GrVkGetProc = skgpu::VulkanGetProc;
/**
* This object is wrapped in a GrBackendDrawableInfo and passed in as an argument to
* drawBackendGpu() calls on an SkDrawable. The drawable will use this info to inject direct
* Vulkan calls into our stream of GPU draws.
*
* The SkDrawable is given a secondary VkCommandBuffer in which to record draws. The GPU backend
* will then execute that command buffer within a render pass it is using for its own draws. The
* drawable is also given the attachment of the color index, a compatible VkRenderPass, and the
* VkFormat of the color attachment so that it can make VkPipeline objects for the draws. The
* SkDrawable must not alter the state of the VkRenderpass or sub pass.
*
* Additionally, the SkDrawable may fill in the passed in fDrawBounds with the bounds of the draws
* that it submits to the command buffer. This will be used by the GPU backend for setting the
* bounds in vkCmdBeginRenderPass. If fDrawBounds is not updated, we will assume that the entire
* attachment may have been written to.
*
* The SkDrawable is always allowed to create its own command buffers and submit them to the queue
* to render offscreen textures which will be sampled in draws added to the passed in
* VkCommandBuffer. If this is done the SkDrawable is in charge of adding the required memory
* barriers to the queue for the sampled images since the Skia backend will not do this.
*/
struct GrVkDrawableInfo {
VkCommandBuffer fSecondaryCommandBuffer;
uint32_t fColorAttachmentIndex;
VkRenderPass fCompatibleRenderPass;
VkFormat fFormat;
VkRect2D* fDrawBounds;
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
bool fFromSwapchainOrAndroidWindow;
#endif
};
struct GrVkSurfaceInfo {
uint32_t fSampleCount = 1;
uint32_t fLevelCount = 0;
skgpu::Protected fProtected = skgpu::Protected::kNo;
VkImageTiling fImageTiling = VK_IMAGE_TILING_OPTIMAL;
VkFormat fFormat = VK_FORMAT_UNDEFINED;
VkImageUsageFlags fImageUsageFlags = 0;
GrVkYcbcrConversionInfo fYcbcrConversionInfo;
VkSharingMode fSharingMode = VK_SHARING_MODE_EXCLUSIVE;
};
#endif