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 "GrVkBuffer.h" 12 #include "vk/GrVkTypes.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 23 void* map(GrVkGpu* gpu) { 24 return this->vkMap(gpu); 25 } 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 31 bool updateData(GrVkGpu* gpu, const void* src, size_t srcSizeInBytes, 32 bool* createdNewBuffer) { 33 return this->vkUpdateData(gpu, src, srcSizeInBytes, createdNewBuffer); 34 } 35 void release(const GrVkGpu* gpu) { this->vkRelease(gpu); } 36 void abandon() { this->vkAbandon(); } 37 38 private: 39 class Resource : public GrVkBuffer::Resource { 40 public: 41 Resource(VkBuffer buf, const GrVkAlloc& alloc) 42 : INHERITED(buf, alloc, kUniform_Type) {} 43 44 void onRecycle(GrVkGpu* gpu) const override; 45 46 typedef GrVkBuffer::Resource INHERITED; 47 }; 48 49 const GrVkBuffer::Resource* createResource(GrVkGpu* gpu, 50 const GrVkBuffer::Desc& descriptor) override; 51 52 GrVkUniformBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc, 53 const GrVkUniformBuffer::Resource* resource) 54 : INHERITED(desc, resource) {} 55 56 typedef GrVkBuffer INHERITED; 57 }; 58 59 #endif 60