util.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include "video_core/renderer_vulkan/vk_scheduler.h"
  5. #include "video_core/vulkan_common/vulkan_memory_allocator.h"
  6. #include "video_core/vulkan_common/vulkan_wrapper.h"
  7. namespace Vulkan {
  8. #define ARRAY_TO_SPAN(a) std::span(a, (sizeof(a) / sizeof(a[0])))
  9. vk::Buffer CreateWrappedBuffer(MemoryAllocator& allocator, VkDeviceSize size, MemoryUsage usage);
  10. vk::Image CreateWrappedImage(MemoryAllocator& allocator, VkExtent2D dimensions, VkFormat format);
  11. void TransitionImageLayout(vk::CommandBuffer& cmdbuf, VkImage image, VkImageLayout target_layout,
  12. VkImageLayout source_layout = VK_IMAGE_LAYOUT_GENERAL);
  13. void UploadImage(const Device& device, MemoryAllocator& allocator, Scheduler& scheduler,
  14. vk::Image& image, VkExtent2D dimensions, VkFormat format,
  15. std::span<const u8> initial_contents = {});
  16. void DownloadColorImage(vk::CommandBuffer& cmdbuf, VkImage image, VkBuffer buffer,
  17. VkExtent3D extent);
  18. void ClearColorImage(vk::CommandBuffer& cmdbuf, VkImage image);
  19. vk::ImageView CreateWrappedImageView(const Device& device, vk::Image& image, VkFormat format);
  20. vk::RenderPass CreateWrappedRenderPass(const Device& device, VkFormat format,
  21. VkImageLayout initial_layout = VK_IMAGE_LAYOUT_GENERAL);
  22. vk::Framebuffer CreateWrappedFramebuffer(const Device& device, vk::RenderPass& render_pass,
  23. vk::ImageView& dest_image, VkExtent2D extent);
  24. vk::Sampler CreateWrappedSampler(const Device& device, VkFilter filter = VK_FILTER_LINEAR);
  25. vk::ShaderModule CreateWrappedShaderModule(const Device& device, std::span<const u32> code);
  26. vk::DescriptorPool CreateWrappedDescriptorPool(const Device& device, size_t max_descriptors,
  27. size_t max_sets,
  28. std::initializer_list<VkDescriptorType> types = {
  29. VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER});
  30. vk::DescriptorSetLayout CreateWrappedDescriptorSetLayout(
  31. const Device& device, std::initializer_list<VkDescriptorType> types);
  32. vk::DescriptorSets CreateWrappedDescriptorSets(vk::DescriptorPool& pool,
  33. vk::Span<VkDescriptorSetLayout> layouts);
  34. vk::PipelineLayout CreateWrappedPipelineLayout(const Device& device,
  35. vk::DescriptorSetLayout& layout);
  36. vk::Pipeline CreateWrappedPipeline(const Device& device, vk::RenderPass& renderpass,
  37. vk::PipelineLayout& layout,
  38. std::tuple<vk::ShaderModule&, vk::ShaderModule&> shaders,
  39. bool enable_blending = false);
  40. VkWriteDescriptorSet CreateWriteDescriptorSet(std::vector<VkDescriptorImageInfo>& images,
  41. VkSampler sampler, VkImageView view,
  42. VkDescriptorSet set, u32 binding);
  43. vk::Sampler CreateBilinearSampler(const Device& device);
  44. vk::Sampler CreateNearestNeighborSampler(const Device& device);
  45. void BeginRenderPass(vk::CommandBuffer& cmdbuf, VkRenderPass render_pass, VkFramebuffer framebuffer,
  46. VkExtent2D extent);
  47. } // namespace Vulkan