| Index: src/gpu/vk/GrVkMemory.cpp
|
| diff --git a/src/gpu/vk/GrVkMemory.cpp b/src/gpu/vk/GrVkMemory.cpp
|
| deleted file mode 100644
|
| index 276fd4b0a20e0f27d029cea2461b8ca1f6225abb..0000000000000000000000000000000000000000
|
| --- a/src/gpu/vk/GrVkMemory.cpp
|
| +++ /dev/null
|
| @@ -1,157 +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 "GrVkMemory.h"
|
| -
|
| -#include "GrVkGpu.h"
|
| -#include "GrVkUtil.h"
|
| -
|
| -static bool get_valid_memory_type_index(VkPhysicalDeviceMemoryProperties physDevMemProps,
|
| - uint32_t typeBits,
|
| - VkMemoryPropertyFlags requestedMemFlags,
|
| - uint32_t* typeIndex) {
|
| - uint32_t checkBit = 1;
|
| - for (uint32_t i = 0; i < 32; ++i) {
|
| - if (typeBits & checkBit) {
|
| - uint32_t supportedFlags = physDevMemProps.memoryTypes[i].propertyFlags &
|
| - requestedMemFlags;
|
| - if (supportedFlags == requestedMemFlags) {
|
| - *typeIndex = i;
|
| - return true;
|
| - }
|
| - }
|
| - checkBit <<= 1;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -static bool alloc_device_memory(const GrVkGpu* gpu,
|
| - VkMemoryRequirements* memReqs,
|
| - const VkMemoryPropertyFlags flags,
|
| - VkDeviceMemory* memory) {
|
| - uint32_t typeIndex;
|
| - if (!get_valid_memory_type_index(gpu->physicalDeviceMemoryProperties(),
|
| - memReqs->memoryTypeBits,
|
| - flags,
|
| - &typeIndex)) {
|
| - return false;
|
| - }
|
| -
|
| - VkMemoryAllocateInfo allocInfo = {
|
| - VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // sType
|
| - NULL, // pNext
|
| - memReqs->size, // allocationSize
|
| - typeIndex, // memoryTypeIndex
|
| - };
|
| -
|
| - VkResult err = GR_VK_CALL(gpu->vkInterface(), AllocateMemory(gpu->device(),
|
| - &allocInfo,
|
| - nullptr,
|
| - memory));
|
| - if (err) {
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool GrVkMemory::AllocAndBindBufferMemory(const GrVkGpu* gpu,
|
| - VkBuffer buffer,
|
| - const VkMemoryPropertyFlags flags,
|
| - VkDeviceMemory* memory) {
|
| - const GrVkInterface* interface = gpu->vkInterface();
|
| - VkDevice device = gpu->device();
|
| -
|
| - VkMemoryRequirements memReqs;
|
| - GR_VK_CALL(interface, GetBufferMemoryRequirements(device, buffer, &memReqs));
|
| -
|
| -
|
| - if (!alloc_device_memory(gpu, &memReqs, flags, memory)) {
|
| - return false;
|
| - }
|
| -
|
| - // Bind Memory to queue
|
| - VkResult err = GR_VK_CALL(interface, BindBufferMemory(device, buffer, *memory, 0));
|
| - if (err) {
|
| - GR_VK_CALL(interface, FreeMemory(device, *memory, nullptr));
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool GrVkMemory::AllocAndBindImageMemory(const GrVkGpu* gpu,
|
| - VkImage image,
|
| - const VkMemoryPropertyFlags flags,
|
| - VkDeviceMemory* memory) {
|
| - const GrVkInterface* interface = gpu->vkInterface();
|
| - VkDevice device = gpu->device();
|
| -
|
| - VkMemoryRequirements memReqs;
|
| - GR_VK_CALL(interface, GetImageMemoryRequirements(device, image, &memReqs));
|
| -
|
| - if (!alloc_device_memory(gpu, &memReqs, flags, memory)) {
|
| - return false;
|
| - }
|
| -
|
| - // Bind Memory to queue
|
| - VkResult err = GR_VK_CALL(interface, BindImageMemory(device, image, *memory, 0));
|
| - if (err) {
|
| - GR_VK_CALL(interface, FreeMemory(device, *memory, nullptr));
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -VkPipelineStageFlags GrVkMemory::LayoutToPipelineStageFlags(const VkImageLayout layout) {
|
| - if (VK_IMAGE_LAYOUT_GENERAL == layout) {
|
| - return VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
|
| - } else if (VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL == layout ||
|
| - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL == layout) {
|
| - return VK_PIPELINE_STAGE_TRANSFER_BIT;
|
| - } else if (VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL == layout ||
|
| - VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL == layout ||
|
| - VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL == layout ||
|
| - VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL == layout) {
|
| - return VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
|
| - } else if (VK_IMAGE_LAYOUT_PREINITIALIZED == layout) {
|
| - return VK_PIPELINE_STAGE_HOST_BIT;
|
| - }
|
| -
|
| - SkASSERT(VK_IMAGE_LAYOUT_UNDEFINED == layout);
|
| - return VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
|
| -}
|
| -
|
| -VkAccessFlags GrVkMemory::LayoutToSrcAccessMask(const VkImageLayout layout) {
|
| - // Currently we assume we will never being doing any explict shader writes (this doesn't include
|
| - // color attachment or depth/stencil writes). So we will ignore the
|
| - // VK_MEMORY_OUTPUT_SHADER_WRITE_BIT.
|
| -
|
| - // We can only directly access the host memory if we are in preinitialized or general layout,
|
| - // and the image is linear.
|
| - // TODO: Add check for linear here so we are not always adding host to general, and we should
|
| - // only be in preinitialized if we are linear
|
| - VkAccessFlags flags = 0;;
|
| - if (VK_IMAGE_LAYOUT_GENERAL == layout) {
|
| - flags = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
|
| - VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
|
| - VK_ACCESS_TRANSFER_WRITE_BIT |
|
| - VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_HOST_READ_BIT;
|
| - } else if (VK_IMAGE_LAYOUT_PREINITIALIZED == layout) {
|
| - flags = VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_HOST_READ_BIT;
|
| - } else if (VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL == layout) {
|
| - flags = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
| - } else if (VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL == layout) {
|
| - flags = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
|
| - } else if (VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL == layout) {
|
| - flags = VK_ACCESS_TRANSFER_WRITE_BIT;
|
| - } else if (VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL == layout) {
|
| - flags = VK_ACCESS_TRANSFER_READ_BIT;
|
| - } else if (VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL == layout) {
|
| - flags = VK_ACCESS_SHADER_READ_BIT;
|
| - }
|
| - return flags;
|
| -}
|
| -
|
|
|