diff options
| author | 2021-05-30 20:42:42 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:34 -0400 | |
| commit | c44b16124fcfb64b9482d639ae55670005eb6307 (patch) | |
| tree | a45df115eed9a21da68bc2b946acc670fd2a79d6 /src | |
| parent | opengl: Declare fragment outputs even if they are not used (diff) | |
| download | yuzu-c44b16124fcfb64b9482d639ae55670005eb6307.tar.gz yuzu-c44b16124fcfb64b9482d639ae55670005eb6307.tar.xz yuzu-c44b16124fcfb64b9482d639ae55670005eb6307.zip | |
vk_buffer_cache: Add transform feedback usage to buffers
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_buffer_cache.cpp | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp index 568993c58..2da3de6de 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp | |||
| @@ -60,6 +60,27 @@ std::array<T, 6> MakeQuadIndices(u32 quad, u32 first) { | |||
| 60 | } | 60 | } |
| 61 | return indices; | 61 | return indices; |
| 62 | } | 62 | } |
| 63 | |||
| 64 | vk::Buffer CreateBuffer(const Device& device, u64 size) { | ||
| 65 | VkBufferUsageFlags flags = | ||
| 66 | VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | | ||
| 67 | VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT | | ||
| 68 | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | | ||
| 69 | VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; | ||
| 70 | if (device.IsExtTransformFeedbackSupported()) { | ||
| 71 | flags |= VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT; | ||
| 72 | } | ||
| 73 | return device.GetLogical().CreateBuffer({ | ||
| 74 | .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, | ||
| 75 | .pNext = nullptr, | ||
| 76 | .flags = 0, | ||
| 77 | .size = size, | ||
| 78 | .usage = flags, | ||
| 79 | .sharingMode = VK_SHARING_MODE_EXCLUSIVE, | ||
| 80 | .queueFamilyIndexCount = 0, | ||
| 81 | .pQueueFamilyIndices = nullptr, | ||
| 82 | }); | ||
| 83 | } | ||
| 63 | } // Anonymous namespace | 84 | } // Anonymous namespace |
| 64 | 85 | ||
| 65 | Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params) | 86 | Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params) |
| @@ -68,21 +89,7 @@ Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params) | |||
| 68 | Buffer::Buffer(BufferCacheRuntime& runtime, VideoCore::RasterizerInterface& rasterizer_, | 89 | Buffer::Buffer(BufferCacheRuntime& runtime, VideoCore::RasterizerInterface& rasterizer_, |
| 69 | VAddr cpu_addr_, u64 size_bytes_) | 90 | VAddr cpu_addr_, u64 size_bytes_) |
| 70 | : VideoCommon::BufferBase<VideoCore::RasterizerInterface>(rasterizer_, cpu_addr_, size_bytes_), | 91 | : VideoCommon::BufferBase<VideoCore::RasterizerInterface>(rasterizer_, cpu_addr_, size_bytes_), |
| 71 | device{&runtime.device}, | 92 | device{&runtime.device}, buffer{CreateBuffer(*device, SizeBytes())}, |
| 72 | buffer{device->GetLogical().CreateBuffer({ | ||
| 73 | .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, | ||
| 74 | .pNext = nullptr, | ||
| 75 | .flags = 0, | ||
| 76 | .size = SizeBytes(), | ||
| 77 | .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | | ||
| 78 | VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | | ||
| 79 | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | | ||
| 80 | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT | | ||
| 81 | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, | ||
| 82 | .sharingMode = VK_SHARING_MODE_EXCLUSIVE, | ||
| 83 | .queueFamilyIndexCount = 0, | ||
| 84 | .pQueueFamilyIndices = nullptr, | ||
| 85 | })}, | ||
| 86 | commit{runtime.memory_allocator.Commit(buffer, MemoryUsage::DeviceLocal)} { | 93 | commit{runtime.memory_allocator.Commit(buffer, MemoryUsage::DeviceLocal)} { |
| 87 | if (runtime.device.HasDebuggingToolAttached()) { | 94 | if (runtime.device.HasDebuggingToolAttached()) { |
| 88 | buffer.SetObjectNameEXT(fmt::format("Buffer 0x{:x}", CpuAddr()).c_str()); | 95 | buffer.SetObjectNameEXT(fmt::format("Buffer 0x{:x}", CpuAddr()).c_str()); |