// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "vulkan_image.h" #include "flutter/vulkan/procs/vulkan_proc_table.h" #include "vulkan_command_buffer.h" namespace vulkan { VulkanImage::VulkanImage(VulkanHandle image) : handle_(std::move(image)), layout_(VK_IMAGE_LAYOUT_UNDEFINED), access_flags_(0), valid_(false) { if (!handle_) { return; } valid_ = true; } VulkanImage::~VulkanImage() = default; bool VulkanImage::IsValid() const { return valid_; } bool VulkanImage::InsertImageMemoryBarrier( const VulkanCommandBuffer& command_buffer, VkPipelineStageFlagBits src_pipline_bits, VkPipelineStageFlagBits dest_pipline_bits, VkAccessFlags dest_access_flags, VkImageLayout dest_layout) { const VkImageMemoryBarrier image_memory_barrier = { .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, .pNext = nullptr, .srcAccessMask = access_flags_, .dstAccessMask = dest_access_flags, .oldLayout = layout_, .newLayout = dest_layout, .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .image = handle_, .subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}, }; bool success = command_buffer.InsertPipelineBarrier( src_pipline_bits, // src_stage_flags dest_pipline_bits, // dest_stage_flags 0, // dependency_flags 0, // memory_barrier_count nullptr, // memory_barriers 0, // buffer_memory_barrier_count nullptr, // buffer_memory_barriers 1, // image_memory_barrier_count &image_memory_barrier // image_memory_barriers ); if (success) { access_flags_ = dest_access_flags; layout_ = dest_layout; } return success; } } // namespace vulkan