• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2018 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrVkTypesPriv_DEFINED
9 #define GrVkTypesPriv_DEFINED
10 
11 #include "include/core/SkRefCnt.h"
12 #include "include/gpu/vk/GrVkTypes.h"
13 
14 class GrVkImageLayout;
15 
16 // This struct is to used to store the the actual information about the vulkan backend image on the
17 // GrBackendTexture and GrBackendRenderTarget. When a client calls getVkImageInfo on a
18 // GrBackendTexture/RenderTarget, we use the GrVkBackendSurfaceInfo to create a snapshot
19 // GrVkImgeInfo object. Internally, this uses a ref count GrVkImageLayout object to track the
20 // current VkImageLayout which can be shared with an internal GrVkImage so that layout updates can
21 // be seen by all users of the image.
22 struct GrVkBackendSurfaceInfo {
GrVkBackendSurfaceInfoGrVkBackendSurfaceInfo23     GrVkBackendSurfaceInfo(GrVkImageInfo info, GrVkImageLayout* layout)
24             : fImageInfo(info), fLayout(layout) {}
25 
26     void cleanup();
27 
28     GrVkBackendSurfaceInfo& operator=(const GrVkBackendSurfaceInfo&) = delete;
29 
30     // Assigns the passed in GrVkBackendSurfaceInfo to this object. if isValid is true we will also
31     // attempt to unref the old fLayout on this object.
32     void assign(const GrVkBackendSurfaceInfo&, bool isValid);
33 
34     void setImageLayout(VkImageLayout layout);
35 
36     sk_sp<GrVkImageLayout> getGrVkImageLayout() const;
37 
38     GrVkImageInfo snapImageInfo() const;
39 
isProtectedGrVkBackendSurfaceInfo40     bool isProtected() const { return fImageInfo.fProtected == GrProtected::kYes; }
41 #if GR_TEST_UTILS
42     bool operator==(const GrVkBackendSurfaceInfo& that) const;
43 #endif
44 
45 private:
46     GrVkImageInfo    fImageInfo;
47     GrVkImageLayout* fLayout;
48 };
49 
50 #endif
51