1 /* 2 * Copyright 2015 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 GrVkUniformBuffer_DEFINED 9 #define GrVkUniformBuffer_DEFINED 10 11 #include "include/gpu/vk/GrVkTypes.h" 12 #include "src/gpu/vk/GrVkBuffer.h" 13 14 class GrVkGpu; 15 16 class GrVkUniformBuffer : public GrVkBuffer { 17 18 public: 19 static GrVkUniformBuffer* Create(GrVkGpu* gpu, size_t size); 20 static const GrVkResource* CreateResource(GrVkGpu* gpu, size_t size); 21 static const size_t kStandardSize = 256; 22 map(GrVkGpu * gpu)23 void* map(GrVkGpu* gpu) { 24 return this->vkMap(gpu); 25 } unmap(GrVkGpu * gpu)26 void unmap(GrVkGpu* gpu) { 27 this->vkUnmap(gpu); 28 } 29 // The output variable createdNewBuffer must be set to true if a new VkBuffer is created in 30 // order to upload the data updateData(GrVkGpu * gpu,const void * src,size_t srcSizeInBytes,bool * createdNewBuffer)31 bool updateData(GrVkGpu* gpu, const void* src, size_t srcSizeInBytes, 32 bool* createdNewBuffer) { 33 return this->vkUpdateData(gpu, src, srcSizeInBytes, createdNewBuffer); 34 } release(const GrVkGpu * gpu)35 void release(const GrVkGpu* gpu) { this->vkRelease(gpu); } 36 37 private: 38 class Resource : public GrVkBuffer::Resource { 39 public: Resource(VkBuffer buf,const GrVkAlloc & alloc)40 Resource(VkBuffer buf, const GrVkAlloc& alloc) 41 : INHERITED(buf, alloc, kUniform_Type) {} 42 43 void onRecycle(GrVkGpu* gpu) const override; 44 45 typedef GrVkBuffer::Resource INHERITED; 46 }; 47 48 const GrVkBuffer::Resource* createResource(GrVkGpu* gpu, 49 const GrVkBuffer::Desc& descriptor) override; 50 GrVkUniformBuffer(GrVkGpu * gpu,const GrVkBuffer::Desc & desc,const GrVkUniformBuffer::Resource * resource)51 GrVkUniformBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc, 52 const GrVkUniformBuffer::Resource* resource) 53 : INHERITED(desc, resource) {} 54 55 typedef GrVkBuffer INHERITED; 56 }; 57 58 #endif 59