| Index: src/gpu/vk/GrVkImage.h
|
| diff --git a/src/gpu/vk/GrVkImage.h b/src/gpu/vk/GrVkImage.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3467a61f2bb735a9ec5ae89dcf53376c8e344490
|
| --- /dev/null
|
| +++ b/src/gpu/vk/GrVkImage.h
|
| @@ -0,0 +1,108 @@
|
| +/*
|
| + * Copyright 2015 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef GrVkImage_DEFINED
|
| +#define GrVkImage_DEFINED
|
| +
|
| +#include "GrVkResource.h"
|
| +#include "SkTypes.h"
|
| +
|
| +#include "vulkan/vulkan.h"
|
| +
|
| +class GrVkGpu;
|
| +
|
| +class GrVkImage : SkNoncopyable {
|
| +public:
|
| + // unlike GrVkBuffer, this needs to be public so GrVkStencilAttachment can use it
|
| + class Resource : public GrVkResource {
|
| + public:
|
| + enum Flags {
|
| + kNo_Flags = 0,
|
| + kLinearTiling_Flag = 0x01
|
| + };
|
| +
|
| + VkImage fImage;
|
| + VkDeviceMemory fAlloc;
|
| + Flags fFlags;
|
| +
|
| + Resource() : INHERITED(), fImage(nullptr), fAlloc(nullptr), fFlags(kNo_Flags) {}
|
| +
|
| + Resource(VkImage image, VkDeviceMemory alloc, Flags flags)
|
| + : fImage(image), fAlloc(alloc), fFlags(flags) {}
|
| +
|
| + ~Resource() override {}
|
| + private:
|
| + void freeGPUData(const GrVkGpu* gpu) const override;
|
| +
|
| + typedef GrVkResource INHERITED;
|
| + };
|
| +
|
| +
|
| + GrVkImage(const Resource* imageResource) : fResource(imageResource) {
|
| + if (imageResource->fFlags & Resource::kLinearTiling_Flag) {
|
| + fCurrentLayout = VK_IMAGE_LAYOUT_PREINITIALIZED;
|
| + } else {
|
| + fCurrentLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
| + }
|
| + imageResource->ref();
|
| + }
|
| +
|
| + virtual ~GrVkImage();
|
| +
|
| + VkImage textureImage() const { return fResource->fImage; }
|
| + VkDeviceMemory textureMemory() const { return fResource->fAlloc; }
|
| + const Resource* resource() const { return fResource; }
|
| + bool isLinearTiled() const {
|
| + return SkToBool(fResource->fFlags & Resource::kLinearTiling_Flag);
|
| + }
|
| +
|
| + VkImageLayout currentLayout() const { return fCurrentLayout; }
|
| +
|
| + void setImageLayout(const GrVkGpu* gpu, VkImageLayout newLayout,
|
| + VkAccessFlags srcAccessMask,
|
| + VkAccessFlags dstAccessMask,
|
| + VkPipelineStageFlags srcStageMask,
|
| + VkPipelineStageFlags dstStageMask,
|
| + bool byRegion);
|
| +
|
| + struct ImageDesc {
|
| + VkImageType fImageType;
|
| + VkFormat fFormat;
|
| + uint32_t fWidth;
|
| + uint32_t fHeight;
|
| + uint32_t fLevels;
|
| + uint32_t fSamples;
|
| + VkImageTiling fImageTiling;
|
| + VkImageUsageFlags fUsageFlags;
|
| + VkFlags fMemProps;
|
| +
|
| + ImageDesc()
|
| + : fImageType(VK_IMAGE_TYPE_2D)
|
| + , fFormat(VK_FORMAT_UNDEFINED)
|
| + , fWidth(0)
|
| + , fHeight(0)
|
| + , fLevels(1)
|
| + , fSamples(1)
|
| + , fImageTiling(VK_IMAGE_TILING_OPTIMAL)
|
| + , fUsageFlags(0)
|
| + , fMemProps(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) {}
|
| + };
|
| +
|
| + static const Resource* CreateResource(const GrVkGpu* gpu, const ImageDesc& imageDesc);
|
| +
|
| +protected:
|
| +
|
| + void releaseImage(const GrVkGpu* gpu);
|
| + void abandonImage();
|
| +
|
| + const Resource* fResource;
|
| +
|
| + VkImageLayout fCurrentLayout;
|
| +
|
| +};
|
| +
|
| +#endif
|
|
|