| Index: src/gpu/vk/GrVkBuffer.cpp
|
| diff --git a/src/gpu/vk/GrVkBuffer.cpp b/src/gpu/vk/GrVkBuffer.cpp
|
| deleted file mode 100644
|
| index 049fe414f3b6c3e0814a33b9ca0fc73372b1ab74..0000000000000000000000000000000000000000
|
| --- a/src/gpu/vk/GrVkBuffer.cpp
|
| +++ /dev/null
|
| @@ -1,177 +0,0 @@
|
| -/*
|
| - * Copyright 2015 Google Inc.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#include "GrVkBuffer.h"
|
| -#include "GrVkGpu.h"
|
| -#include "GrVkMemory.h"
|
| -#include "GrVkUtil.h"
|
| -
|
| -#define VK_CALL(GPU, X) GR_VK_CALL(GPU->vkInterface(), X)
|
| -
|
| -#ifdef SK_DEBUG
|
| -#define VALIDATE() this->validate()
|
| -#else
|
| -#define VALIDATE() do {} while(false)
|
| -#endif
|
| -
|
| -const GrVkBuffer::Resource* GrVkBuffer::Create(const GrVkGpu* gpu, const Desc& desc) {
|
| - VkBuffer buffer;
|
| - VkDeviceMemory alloc;
|
| -
|
| - // create the buffer object
|
| - VkBufferCreateInfo bufInfo;
|
| - memset(&bufInfo, 0, sizeof(VkBufferCreateInfo));
|
| - bufInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
|
| - bufInfo.flags = 0;
|
| - bufInfo.size = desc.fSizeInBytes;
|
| - switch (desc.fType) {
|
| - case kVertex_Type:
|
| - bufInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
|
| - break;
|
| - case kIndex_Type:
|
| - bufInfo.usage = VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
|
| - break;
|
| - case kUniform_Type:
|
| - bufInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT;
|
| - break;
|
| - case kCopyRead_Type:
|
| - bufInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
|
| - break;
|
| - case kCopyWrite_Type:
|
| - bufInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
|
| - break;
|
| -
|
| - }
|
| - bufInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
| - bufInfo.queueFamilyIndexCount = 0;
|
| - bufInfo.pQueueFamilyIndices = nullptr;
|
| -
|
| - VkResult err;
|
| - err = VK_CALL(gpu, CreateBuffer(gpu->device(), &bufInfo, nullptr, &buffer));
|
| - if (err) {
|
| - return nullptr;
|
| - }
|
| -
|
| - VkMemoryPropertyFlags requiredMemProps = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
|
| - VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
|
| -
|
| - if (!GrVkMemory::AllocAndBindBufferMemory(gpu,
|
| - buffer,
|
| - requiredMemProps,
|
| - &alloc)) {
|
| - VK_CALL(gpu, DestroyBuffer(gpu->device(), buffer, nullptr));
|
| - return nullptr;
|
| - }
|
| -
|
| - const GrVkBuffer::Resource* resource = new GrVkBuffer::Resource(buffer, alloc);
|
| - if (!resource) {
|
| - VK_CALL(gpu, DestroyBuffer(gpu->device(), buffer, nullptr));
|
| - VK_CALL(gpu, FreeMemory(gpu->device(), alloc, nullptr));
|
| - return nullptr;
|
| - }
|
| -
|
| - return resource;
|
| -}
|
| -
|
| -
|
| -void GrVkBuffer::addMemoryBarrier(const GrVkGpu* gpu,
|
| - VkAccessFlags srcAccessMask,
|
| - VkAccessFlags dstAccesMask,
|
| - VkPipelineStageFlags srcStageMask,
|
| - VkPipelineStageFlags dstStageMask,
|
| - bool byRegion) const {
|
| - VkBufferMemoryBarrier bufferMemoryBarrier = {
|
| - VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // sType
|
| - NULL, // pNext
|
| - srcAccessMask, // srcAccessMask
|
| - dstAccesMask, // dstAccessMask
|
| - VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex
|
| - VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex
|
| - this->buffer(), // buffer
|
| - 0, // offset
|
| - fDesc.fSizeInBytes, // size
|
| - };
|
| -
|
| - // TODO: restrict to area of buffer we're interested in
|
| - gpu->addBufferMemoryBarrier(srcStageMask, dstStageMask, byRegion, &bufferMemoryBarrier);
|
| -}
|
| -
|
| -void GrVkBuffer::Resource::freeGPUData(const GrVkGpu* gpu) const {
|
| - SkASSERT(fBuffer);
|
| - SkASSERT(fAlloc);
|
| - VK_CALL(gpu, DestroyBuffer(gpu->device(), fBuffer, nullptr));
|
| - VK_CALL(gpu, FreeMemory(gpu->device(), fAlloc, nullptr));
|
| -}
|
| -
|
| -void GrVkBuffer::vkRelease(const GrVkGpu* gpu) {
|
| - VALIDATE();
|
| - fResource->unref(gpu);
|
| - fResource = nullptr;
|
| - fMapPtr = nullptr;
|
| - VALIDATE();
|
| -}
|
| -
|
| -void GrVkBuffer::vkAbandon() {
|
| - fResource->unrefAndAbandon();
|
| - fMapPtr = nullptr;
|
| - VALIDATE();
|
| -}
|
| -
|
| -void* GrVkBuffer::vkMap(const GrVkGpu* gpu) {
|
| - VALIDATE();
|
| - SkASSERT(!this->vkIsMapped());
|
| -
|
| - VkResult err = VK_CALL(gpu, MapMemory(gpu->device(), alloc(), 0, VK_WHOLE_SIZE, 0, &fMapPtr));
|
| - if (err) {
|
| - fMapPtr = nullptr;
|
| - }
|
| -
|
| - VALIDATE();
|
| - return fMapPtr;
|
| -}
|
| -
|
| -void GrVkBuffer::vkUnmap(const GrVkGpu* gpu) {
|
| - VALIDATE();
|
| - SkASSERT(this->vkIsMapped());
|
| -
|
| - VK_CALL(gpu, UnmapMemory(gpu->device(), alloc()));
|
| -
|
| - fMapPtr = nullptr;
|
| -}
|
| -
|
| -bool GrVkBuffer::vkIsMapped() const {
|
| - VALIDATE();
|
| - return SkToBool(fMapPtr);
|
| -}
|
| -
|
| -bool GrVkBuffer::vkUpdateData(const GrVkGpu* gpu, const void* src, size_t srcSizeInBytes) {
|
| - SkASSERT(!this->vkIsMapped());
|
| - VALIDATE();
|
| - if (srcSizeInBytes > fDesc.fSizeInBytes) {
|
| - return false;
|
| - }
|
| -
|
| - void* mapPtr;
|
| - VkResult err = VK_CALL(gpu, MapMemory(gpu->device(), alloc(), 0, srcSizeInBytes, 0, &mapPtr));
|
| -
|
| - if (VK_SUCCESS != err) {
|
| - return false;
|
| - }
|
| -
|
| - memcpy(mapPtr, src, srcSizeInBytes);
|
| -
|
| - VK_CALL(gpu, UnmapMemory(gpu->device(), alloc()));
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void GrVkBuffer::validate() const {
|
| - SkASSERT(!fResource || kVertex_Type == fDesc.fType || kIndex_Type == fDesc.fType
|
| - || kCopyRead_Type == fDesc.fType || kCopyWrite_Type == fDesc.fType
|
| - || kUniform_Type == fDesc.fType);
|
| -}
|
| -
|
|
|