/* * 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 "GrTypes.h" #include "vk/GrVkDefines.h" /** * KHR_debug */ /*typedef void (GR_GL_FUNCTION_TYPE* GrVkDEBUGPROC)(GrVkenum source, GrVkenum type, GrVkuint id, GrVkenum severity, GrVksizei length, const GrVkchar* message, const void* userParam);*/ /////////////////////////////////////////////////////////////////////////////// /** * Types for interacting with Vulkan resources created externally to Skia. GrBackendObjects for * Vulkan textures are really const GrVkImageInfo* */ struct GrVkAlloc { VkDeviceMemory fMemory; // can be VK_NULL_HANDLE iff Tex is an RT and uses borrow semantics VkDeviceSize fOffset; VkDeviceSize fSize; // this can be indeterminate iff Tex uses borrow semantics uint32_t fFlags; enum Flag { kNoncoherent_Flag = 0x1, // memory must be flushed to device after mapping }; }; struct GrVkImageInfo { /** * If the image's format is sRGB (GrVkFormatIsSRGB returns true), then the image must have * been created with VkImageCreateFlags containing VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT. */ VkImage fImage; GrVkAlloc fAlloc; VkImageTiling fImageTiling; VkImageLayout fImageLayout; VkFormat fFormat; uint32_t fLevelCount; // This gives a way for a client to update the layout of the Image if they change the layout // while we're still holding onto the wrapped texture. They will first need to get a handle // to our internal GrVkImageInfo by calling getTextureHandle on a GrVkTexture. void updateImageLayout(VkImageLayout layout) { fImageLayout = layout; } }; GR_STATIC_ASSERT(sizeof(GrBackendObject) >= sizeof(const GrVkImageInfo*)); #endif