aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xREADME.md2
-rwxr-xr-xsrc/video_core/renderer_vulkan/vk_buffer_cache.cpp4
-rwxr-xr-xsrc/video_core/renderer_vulkan/vk_buffer_cache.h6
-rwxr-xr-xsrc/video_core/renderer_vulkan/vk_update_descriptor.cpp10
-rwxr-xr-xsrc/video_core/renderer_vulkan/vk_update_descriptor.h28
5 files changed, 25 insertions, 25 deletions
diff --git a/README.md b/README.md
index 619d9cda9..724b82658 100755
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
1yuzu emulator early access 1yuzu emulator early access
2============= 2=============
3 3
4This is the source code for early-access 1463. 4This is the source code for early-access 1464.
5 5
6## Legal Notice 6## Legal Notice
7 7
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
index 848eedd66..668633e7b 100755
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
@@ -201,10 +201,6 @@ void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, VkBuffer buffer,
201 }); 201 });
202} 202}
203 203
204void BufferCacheRuntime::BindBuffer(VkBuffer buffer, u32 offset, u32 size) {
205 update_descriptor_queue.AddBuffer(buffer, offset, size);
206}
207
208void BufferCacheRuntime::ReserveQuadArrayLUT(u32 num_indices, bool wait_for_idle) { 204void BufferCacheRuntime::ReserveQuadArrayLUT(u32 num_indices, bool wait_for_idle) {
209 if (num_indices <= current_num_indices) { 205 if (num_indices <= current_num_indices) {
210 return; 206 return;
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h
index 041e6515c..982e92191 100755
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.h
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h
@@ -8,6 +8,7 @@
8#include "video_core/engines/maxwell_3d.h" 8#include "video_core/engines/maxwell_3d.h"
9#include "video_core/renderer_vulkan/vk_compute_pass.h" 9#include "video_core/renderer_vulkan/vk_compute_pass.h"
10#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h" 10#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h"
11#include "video_core/renderer_vulkan/vk_update_descriptor.h"
11#include "video_core/vulkan_common/vulkan_memory_allocator.h" 12#include "video_core/vulkan_common/vulkan_memory_allocator.h"
12#include "video_core/vulkan_common/vulkan_wrapper.h" 13#include "video_core/vulkan_common/vulkan_wrapper.h"
13 14
@@ -16,7 +17,6 @@ namespace Vulkan {
16class Device; 17class Device;
17class VKDescriptorPool; 18class VKDescriptorPool;
18class VKScheduler; 19class VKScheduler;
19class VKUpdateDescriptorQueue;
20 20
21class BufferCacheRuntime; 21class BufferCacheRuntime;
22 22
@@ -86,7 +86,9 @@ public:
86 } 86 }
87 87
88private: 88private:
89 void BindBuffer(VkBuffer buffer, u32 offset, u32 size); 89 void BindBuffer(VkBuffer buffer, u32 offset, u32 size) {
90 update_descriptor_queue.AddBuffer(buffer, offset, size);
91 }
90 92
91 void ReserveQuadArrayLUT(u32 num_indices, bool wait_for_idle); 93 void ReserveQuadArrayLUT(u32 num_indices, bool wait_for_idle);
92 94
diff --git a/src/video_core/renderer_vulkan/vk_update_descriptor.cpp b/src/video_core/renderer_vulkan/vk_update_descriptor.cpp
index f99273c6a..dc45fdcb1 100755
--- a/src/video_core/renderer_vulkan/vk_update_descriptor.cpp
+++ b/src/video_core/renderer_vulkan/vk_update_descriptor.cpp
@@ -20,20 +20,20 @@ VKUpdateDescriptorQueue::VKUpdateDescriptorQueue(const Device& device_, VKSchedu
20VKUpdateDescriptorQueue::~VKUpdateDescriptorQueue() = default; 20VKUpdateDescriptorQueue::~VKUpdateDescriptorQueue() = default;
21 21
22void VKUpdateDescriptorQueue::TickFrame() { 22void VKUpdateDescriptorQueue::TickFrame() {
23 payload.clear(); 23 payload_cursor = payload.data();
24} 24}
25 25
26void VKUpdateDescriptorQueue::Acquire() { 26void VKUpdateDescriptorQueue::Acquire() {
27 // Minimum number of entries required. 27 // Minimum number of entries required.
28 // This is the maximum number of entries a single draw call migth use. 28 // This is the maximum number of entries a single draw call migth use.
29 static constexpr std::size_t MIN_ENTRIES = 0x400; 29 static constexpr size_t MIN_ENTRIES = 0x400;
30 30
31 if (payload.size() + MIN_ENTRIES >= payload.max_size()) { 31 if (std::distance(payload.data(), payload_cursor) + MIN_ENTRIES >= payload.max_size()) {
32 LOG_WARNING(Render_Vulkan, "Payload overflow, waiting for worker thread"); 32 LOG_WARNING(Render_Vulkan, "Payload overflow, waiting for worker thread");
33 scheduler.WaitWorker(); 33 scheduler.WaitWorker();
34 payload.clear(); 34 payload_cursor = payload.data();
35 } 35 }
36 upload_start = &*payload.end(); 36 upload_start = payload_cursor;
37} 37}
38 38
39void VKUpdateDescriptorQueue::Send(VkDescriptorUpdateTemplateKHR update_template, 39void VKUpdateDescriptorQueue::Send(VkDescriptorUpdateTemplateKHR update_template,
diff --git a/src/video_core/renderer_vulkan/vk_update_descriptor.h b/src/video_core/renderer_vulkan/vk_update_descriptor.h
index e214f7195..d35e77c44 100755
--- a/src/video_core/renderer_vulkan/vk_update_descriptor.h
+++ b/src/video_core/renderer_vulkan/vk_update_descriptor.h
@@ -4,8 +4,7 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <variant> 7#include <array>
8#include <boost/container/static_vector.hpp>
9 8
10#include "common/common_types.h" 9#include "common/common_types.h"
11#include "video_core/vulkan_common/vulkan_wrapper.h" 10#include "video_core/vulkan_common/vulkan_wrapper.h"
@@ -16,13 +15,15 @@ class Device;
16class VKScheduler; 15class VKScheduler;
17 16
18struct DescriptorUpdateEntry { 17struct DescriptorUpdateEntry {
19 DescriptorUpdateEntry(VkDescriptorImageInfo image_) : image{image_} {} 18 struct Empty {};
20 19
20 DescriptorUpdateEntry() = default;
21 DescriptorUpdateEntry(VkDescriptorImageInfo image_) : image{image_} {}
21 DescriptorUpdateEntry(VkDescriptorBufferInfo buffer_) : buffer{buffer_} {} 22 DescriptorUpdateEntry(VkDescriptorBufferInfo buffer_) : buffer{buffer_} {}
22
23 DescriptorUpdateEntry(VkBufferView texel_buffer_) : texel_buffer{texel_buffer_} {} 23 DescriptorUpdateEntry(VkBufferView texel_buffer_) : texel_buffer{texel_buffer_} {}
24 24
25 union { 25 union {
26 Empty empty{};
26 VkDescriptorImageInfo image; 27 VkDescriptorImageInfo image;
27 VkDescriptorBufferInfo buffer; 28 VkDescriptorBufferInfo buffer;
28 VkBufferView texel_buffer; 29 VkBufferView texel_buffer;
@@ -41,39 +42,40 @@ public:
41 void Send(VkDescriptorUpdateTemplateKHR update_template, VkDescriptorSet set); 42 void Send(VkDescriptorUpdateTemplateKHR update_template, VkDescriptorSet set);
42 43
43 void AddSampledImage(VkImageView image_view, VkSampler sampler) { 44 void AddSampledImage(VkImageView image_view, VkSampler sampler) {
44 payload.emplace_back(VkDescriptorImageInfo{ 45 *(payload_cursor++) = VkDescriptorImageInfo{
45 .sampler = sampler, 46 .sampler = sampler,
46 .imageView = image_view, 47 .imageView = image_view,
47 .imageLayout = VK_IMAGE_LAYOUT_GENERAL, 48 .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
48 }); 49 };
49 } 50 }
50 51
51 void AddImage(VkImageView image_view) { 52 void AddImage(VkImageView image_view) {
52 payload.emplace_back(VkDescriptorImageInfo{ 53 *(payload_cursor++) = VkDescriptorImageInfo{
53 .sampler = VK_NULL_HANDLE, 54 .sampler = VK_NULL_HANDLE,
54 .imageView = image_view, 55 .imageView = image_view,
55 .imageLayout = VK_IMAGE_LAYOUT_GENERAL, 56 .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
56 }); 57 };
57 } 58 }
58 59
59 void AddBuffer(VkBuffer buffer, u64 offset, size_t size) { 60 void AddBuffer(VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size) {
60 payload.emplace_back(VkDescriptorBufferInfo{ 61 *(payload_cursor++) = VkDescriptorBufferInfo{
61 .buffer = buffer, 62 .buffer = buffer,
62 .offset = offset, 63 .offset = offset,
63 .range = size, 64 .range = size,
64 }); 65 };
65 } 66 }
66 67
67 void AddTexelBuffer(VkBufferView texel_buffer) { 68 void AddTexelBuffer(VkBufferView texel_buffer) {
68 payload.emplace_back(texel_buffer); 69 *(payload_cursor++) = texel_buffer;
69 } 70 }
70 71
71private: 72private:
72 const Device& device; 73 const Device& device;
73 VKScheduler& scheduler; 74 VKScheduler& scheduler;
74 75
76 DescriptorUpdateEntry* payload_cursor = nullptr;
75 const DescriptorUpdateEntry* upload_start = nullptr; 77 const DescriptorUpdateEntry* upload_start = nullptr;
76 boost::container::static_vector<DescriptorUpdateEntry, 0x10000> payload; 78 std::array<DescriptorUpdateEntry, 0x10000> payload;
77}; 79};
78 80
79} // namespace Vulkan 81} // namespace Vulkan