blob: 49b392c52b53201db3167c5ce4ec6b2aee790597 [file] [log] [blame]
/*
* Copyright 2018 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrVkTypesPriv_DEFINED
#define GrVkTypesPriv_DEFINED
#include "include/core/SkRefCnt.h"
#include "include/gpu/vk/GrVkTypes.h"
class GrVkImageLayout;
// This struct is to used to store the the actual information about the vulkan backend image on the
// GrBackendTexture and GrBackendRenderTarget. When a client calls getVkImageInfo on a
// GrBackendTexture/RenderTarget, we use the GrVkBackendSurfaceInfo to create a snapshot
// GrVkImgeInfo object. Internally, this uses a ref count GrVkImageLayout object to track the
// current VkImageLayout which can be shared with an internal GrVkImage so that layout updates can
// be seen by all users of the image.
struct GrVkBackendSurfaceInfo {
GrVkBackendSurfaceInfo(GrVkImageInfo info, GrVkImageLayout* layout)
: fImageInfo(info), fLayout(layout) {}
void cleanup();
GrVkBackendSurfaceInfo& operator=(const GrVkBackendSurfaceInfo&) = delete;
// Assigns the passed in GrVkBackendSurfaceInfo to this object. if isValid is true we will also
// attempt to unref the old fLayout on this object.
void assign(const GrVkBackendSurfaceInfo&, bool isValid);
void setImageLayout(VkImageLayout layout);
sk_sp<GrVkImageLayout> getGrVkImageLayout() const;
GrVkImageInfo snapImageInfo() const;
bool isProtected() const { return fImageInfo.fProtected == GrProtected::kYes; }
#if GR_TEST_UTILS
bool operator==(const GrVkBackendSurfaceInfo& that) const;
#endif
private:
GrVkImageInfo fImageInfo;
GrVkImageLayout* fLayout;
};
#endif