Home | History | Annotate | Download | only in vk
      1 
      2 /*
      3  * Copyright 2016 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 #ifndef GrVkTypes_DEFINED
     10 #define GrVkTypes_DEFINED
     11 
     12 #include "GrExternalTextureData.h"
     13 #include "GrTypes.h"
     14 #include "vk/GrVkDefines.h"
     15 
     16 /**
     17  * KHR_debug
     18  */
     19 /*typedef void (GR_GL_FUNCTION_TYPE* GrVkDEBUGPROC)(GrVkenum source,
     20                                                   GrVkenum type,
     21                                                   GrVkuint id,
     22                                                   GrVkenum severity,
     23                                                   GrVksizei length,
     24                                                   const GrVkchar* message,
     25                                                   const void* userParam);*/
     26 
     27 
     28 
     29 ///////////////////////////////////////////////////////////////////////////////
     30 /**
     31  * Types for interacting with Vulkan resources created externally to Skia. GrBackendObjects for
     32  * Vulkan textures are really const GrVkImageInfo*
     33  */
     34 struct GrVkAlloc {
     35     VkDeviceMemory fMemory;  // can be VK_NULL_HANDLE iff Tex is an RT and uses borrow semantics
     36     VkDeviceSize   fOffset;
     37     VkDeviceSize   fSize;    // this can be indeterminate iff Tex uses borrow semantics
     38     uint32_t       fFlags;
     39 
     40     enum Flag {
     41         kNoncoherent_Flag = 0x1,   // memory must be flushed to device after mapping
     42     };
     43 };
     44 
     45 struct GrVkImageInfo {
     46     /**
     47      * If the image's format is sRGB (GrVkFormatIsSRGB returns true), then the image must have
     48      * been created with VkImageCreateFlags containing VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT.
     49      */
     50     VkImage        fImage;
     51     GrVkAlloc      fAlloc;
     52     VkImageTiling  fImageTiling;
     53     VkImageLayout  fImageLayout;
     54     VkFormat       fFormat;
     55     uint32_t       fLevelCount;
     56 
     57     // This gives a way for a client to update the layout of the Image if they change the layout
     58     // while we're still holding onto the wrapped texture. They will first need to get a handle
     59     // to our internal GrVkImageInfo by calling getTextureHandle on a GrVkTexture.
     60     void updateImageLayout(VkImageLayout layout) { fImageLayout = layout; }
     61 };
     62 
     63 class GrVkExternalTextureData : public GrExternalTextureData {
     64 public:
     65     GrVkExternalTextureData(const GrVkImageInfo& info) : fInfo(info) {}
     66     GrBackend getBackend() const override { return kVulkan_GrBackend; }
     67 
     68 protected:
     69     GrBackendObject getBackendObject() const override {
     70         return reinterpret_cast<GrBackendObject>(&fInfo);
     71     }
     72     void attachToContext(GrContext*) override {
     73         // TODO: Implement this
     74     }
     75 
     76     GrVkImageInfo fInfo;
     77 
     78     typedef GrExternalTextureData INHERITED;
     79 };
     80 
     81 GR_STATIC_ASSERT(sizeof(GrBackendObject) >= sizeof(const GrVkImageInfo*));
     82 
     83 #endif
     84