summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-05-30 20:42:42 -0300
committerGravatar ameerj2021-07-22 21:51:34 -0400
commitc44b16124fcfb64b9482d639ae55670005eb6307 (patch)
treea45df115eed9a21da68bc2b946acc670fd2a79d6 /src
parentopengl: Declare fragment outputs even if they are not used (diff)
downloadyuzu-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.cpp37
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
64vk::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
65Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params) 86Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params)
@@ -68,21 +89,7 @@ Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params)
68Buffer::Buffer(BufferCacheRuntime& runtime, VideoCore::RasterizerInterface& rasterizer_, 89Buffer::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());