1fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth 2fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth/* 3fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth * Copyright 2016 Google Inc. 4fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth * 5fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth * Use of this source code is governed by a BSD-style license that can be 6fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth * found in the LICENSE file. 7fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth */ 8fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth 9fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth#ifndef GrVkTypes_DEFINED 10fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth#define GrVkTypes_DEFINED 11fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth 122c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman#include "GrExternalTextureData.h" 131e305ba0d6a4237020d36234e9e286d3b0489401jvanverth#include "GrTypes.h" 14e50f3e75392d7be8ae89df8f55b1700100c34ad7jvanverth#include "vk/GrVkDefines.h" 15fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth 16fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth/** 17fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth * KHR_debug 18fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth */ 19fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth/*typedef void (GR_GL_FUNCTION_TYPE* GrVkDEBUGPROC)(GrVkenum source, 20fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth GrVkenum type, 21fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth GrVkuint id, 22fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth GrVkenum severity, 23fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth GrVksizei length, 24fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth const GrVkchar* message, 25fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth const void* userParam);*/ 26fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth 27fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth 28fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth 29fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth/////////////////////////////////////////////////////////////////////////////// 30fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth/** 31ab527a5bbfb1eae4f99a1435d349a44d00477d82egdaniel * Types for interacting with Vulkan resources created externally to Skia. GrBackendObjects for 32b2df0c2702329be6380a943d548e7377a51d8565egdaniel * Vulkan textures are really const GrVkImageInfo* 33fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth */ 341e305ba0d6a4237020d36234e9e286d3b0489401jvanverthstruct GrVkAlloc { 351e305ba0d6a4237020d36234e9e286d3b0489401jvanverth VkDeviceMemory fMemory; // can be VK_NULL_HANDLE iff Tex is an RT and uses borrow semantics 361e305ba0d6a4237020d36234e9e286d3b0489401jvanverth VkDeviceSize fOffset; 376b6ffc4ab6ecee9f46425a5467ef0fbebbb8c9cdjvanverth VkDeviceSize fSize; // this can be indeterminate iff Tex uses borrow semantics 389d54afc38b171c01a03b34e773d154fcf83d97dcjvanverth uint32_t fFlags; 399d54afc38b171c01a03b34e773d154fcf83d97dcjvanverth 409d54afc38b171c01a03b34e773d154fcf83d97dcjvanverth enum Flag { 419d54afc38b171c01a03b34e773d154fcf83d97dcjvanverth kNoncoherent_Flag = 0x1, // memory must be flushed to device after mapping 429d54afc38b171c01a03b34e773d154fcf83d97dcjvanverth }; 431e305ba0d6a4237020d36234e9e286d3b0489401jvanverth}; 441e305ba0d6a4237020d36234e9e286d3b0489401jvanverth 45b2df0c2702329be6380a943d548e7377a51d8565egdanielstruct GrVkImageInfo { 467888f780d85ced5c572f0227c16b88ed59bcffe5brianosman /** 477888f780d85ced5c572f0227c16b88ed59bcffe5brianosman * If the image's format is sRGB (GrVkFormatIsSRGB returns true), then the image must have 487888f780d85ced5c572f0227c16b88ed59bcffe5brianosman * been created with VkImageCreateFlags containing VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT. 497888f780d85ced5c572f0227c16b88ed59bcffe5brianosman */ 50fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth VkImage fImage; 511e305ba0d6a4237020d36234e9e286d3b0489401jvanverth GrVkAlloc fAlloc; 52fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth VkImageTiling fImageTiling; 53fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth VkImageLayout fImageLayout; 5458a8d9214a70e0f6c81c88a8b0b563c06bf0f70eegdaniel VkFormat fFormat; 552af0f1b014b9aabb6119bf66fac20e4cd3a8279bjvanverth uint32_t fLevelCount; 56b2df0c2702329be6380a943d548e7377a51d8565egdaniel 57b2df0c2702329be6380a943d548e7377a51d8565egdaniel // This gives a way for a client to update the layout of the Image if they change the layout 58b2df0c2702329be6380a943d548e7377a51d8565egdaniel // while we're still holding onto the wrapped texture. They will first need to get a handle 59b2df0c2702329be6380a943d548e7377a51d8565egdaniel // to our internal GrVkImageInfo by calling getTextureHandle on a GrVkTexture. 60b2df0c2702329be6380a943d548e7377a51d8565egdaniel void updateImageLayout(VkImageLayout layout) { fImageLayout = layout; } 61fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth}; 62fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth 632c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osmanclass GrVkExternalTextureData : public GrExternalTextureData { 642c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osmanpublic: 65fe3b51636d4216c4ea6cb74ed0964c1d315ca487Brian Osman GrVkExternalTextureData(const GrVkImageInfo& info) : fInfo(info) {} 662c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman GrBackend getBackend() const override { return kVulkan_GrBackend; } 672c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman 682c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osmanprotected: 692c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman GrBackendObject getBackendObject() const override { 702c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman return reinterpret_cast<GrBackendObject>(&fInfo); 712c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman } 72fe3b51636d4216c4ea6cb74ed0964c1d315ca487Brian Osman void attachToContext(GrContext*) override { 73fe3b51636d4216c4ea6cb74ed0964c1d315ca487Brian Osman // TODO: Implement this 74fe3b51636d4216c4ea6cb74ed0964c1d315ca487Brian Osman } 752c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman 762c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman GrVkImageInfo fInfo; 772c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman 782c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman typedef GrExternalTextureData INHERITED; 792c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman}; 802c2bc11aea4dfcd7ee2f5859838a2aa0a56939e0Brian Osman 81b2df0c2702329be6380a943d548e7377a51d8565egdanielGR_STATIC_ASSERT(sizeof(GrBackendObject) >= sizeof(const GrVkImageInfo*)); 82fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth 83fd359caf0cbdefd759d1c788d72faba3f65a6386jvanverth#endif 84