| Index: src/gpu/vk/GrVkBuffer.h
|
| diff --git a/src/gpu/vk/GrVkBuffer.h b/src/gpu/vk/GrVkBuffer.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7dac3a1149a38d3fb1dd5e896609b4e7cbdcefdf
|
| --- /dev/null
|
| +++ b/src/gpu/vk/GrVkBuffer.h
|
| @@ -0,0 +1,92 @@
|
| +/*
|
| + * 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 GrVkBuffer_DEFINED
|
| +#define GrVkBuffer_DEFINED
|
| +
|
| +#include "vk/GrVkInterface.h"
|
| +#include "GrVkResource.h"
|
| +
|
| +class GrVkGpu;
|
| +
|
| +/**
|
| + * This class serves as the base of GrVk*Buffer classes. It was written to avoid code
|
| + * duplication in those classes.
|
| + */
|
| +class GrVkBuffer : public SkNoncopyable {
|
| +public:
|
| + ~GrVkBuffer() {
|
| + // either release or abandon should have been called by the owner of this object.
|
| + SkASSERT(!fResource);
|
| + }
|
| +
|
| + VkBuffer buffer() const { return fResource->fBuffer; }
|
| + VkDeviceMemory alloc() const { return fResource->fAlloc; }
|
| + const GrVkResource* resource() const { return fResource; }
|
| + size_t size() const { return fDesc.fSizeInBytes; }
|
| +
|
| + void addMemoryBarrier(const GrVkGpu* gpu,
|
| + VkAccessFlags srcAccessMask,
|
| + VkAccessFlags dstAccessMask,
|
| + VkPipelineStageFlags srcStageMask,
|
| + VkPipelineStageFlags dstStageMask,
|
| + bool byRegion) const;
|
| +
|
| + enum Type {
|
| + kVertex_Type,
|
| + kIndex_Type,
|
| + kUniform_Type,
|
| + kCopyRead_Type,
|
| + kCopyWrite_Type,
|
| + };
|
| +
|
| +protected:
|
| + struct Desc {
|
| + size_t fSizeInBytes;
|
| + Type fType; // vertex buffer, index buffer, etc.
|
| + bool fDynamic;
|
| + };
|
| +
|
| + class Resource : public GrVkResource {
|
| + public:
|
| + Resource(VkBuffer buf, VkDeviceMemory alloc) : INHERITED(), fBuffer(buf), fAlloc(alloc) {}
|
| +
|
| + VkBuffer fBuffer;
|
| + VkDeviceMemory fAlloc;
|
| + private:
|
| + void freeGPUData(const GrVkGpu* gpu) const;
|
| +
|
| + typedef GrVkResource INHERITED;
|
| + };
|
| +
|
| + // convenience routine for raw buffer creation
|
| + static const Resource* Create(const GrVkGpu* gpu,
|
| + const Desc& descriptor);
|
| +
|
| + GrVkBuffer(const Desc& desc, const GrVkBuffer::Resource* resource)
|
| + : fDesc(desc), fResource(resource), fMapPtr(nullptr) {
|
| + }
|
| +
|
| + void* vkMap(const GrVkGpu* gpu);
|
| + void vkUnmap(const GrVkGpu* gpu);
|
| + bool vkUpdateData(const GrVkGpu* gpu, const void* src, size_t srcSizeInBytes);
|
| +
|
| + void vkAbandon();
|
| + void vkRelease(const GrVkGpu* gpu);
|
| +
|
| +private:
|
| + void validate() const;
|
| + bool vkIsMapped() const;
|
| +
|
| + Desc fDesc;
|
| + const Resource* fResource;
|
| + void* fMapPtr;
|
| +
|
| + typedef SkRefCnt INHERITED;
|
| +};
|
| +
|
| +#endif
|
|
|