@@ -54,21 +54,21 @@ RendererVulkan::RendererVulkan(Core::System& system, Pica::PicaCore& pica_,
54
54
Frontend::EmuWindow& window, Frontend::EmuWindow* secondary_window)
55
55
: RendererBase{system , window, secondary_window}, memory{system .Memory ()}, pica{pica_},
56
56
instance{system .TelemetrySession (), window, Settings::values.physical_device .GetValue ()},
57
- scheduler{instance}, render_manager{instance, scheduler}, pool{ instance} ,
58
- main_window{window, instance, scheduler},
57
+ scheduler{instance}, render_manager{instance, scheduler}, main_window{window, instance,
58
+ scheduler},
59
59
vertex_buffer{instance, scheduler, vk::BufferUsageFlagBits::eVertexBuffer,
60
60
VERTEX_BUFFER_SIZE},
61
- rasterizer{memory,
62
- pica,
63
- system .CustomTexManager (),
64
- *this ,
65
- render_window,
66
- instance,
67
- scheduler,
68
- pool ,
69
- render_manager ,
70
- main_window.ImageCount ()},
71
- present_set_provider {instance, pool , PRESENT_BINDINGS} {
61
+ update_queue{instance}, rasterizer{memory,
62
+ pica,
63
+ system .CustomTexManager (),
64
+ *this ,
65
+ render_window,
66
+ instance,
67
+ scheduler,
68
+ render_manager ,
69
+ update_queue ,
70
+ main_window.ImageCount ()},
71
+ present_heap {instance, scheduler. GetMasterSemaphore () , PRESENT_BINDINGS, 32 } {
72
72
CompileShaders ();
73
73
BuildLayouts ();
74
74
BuildPipelines ();
@@ -127,16 +127,14 @@ void RendererVulkan::PrepareRendertarget() {
127
127
128
128
void RendererVulkan::PrepareDraw (Frame* frame, const Layout::FramebufferLayout& layout) {
129
129
const auto sampler = present_samplers[!Settings::values.filter_mode .GetValue ()];
130
- std::transform (screen_infos.begin (), screen_infos.end (), present_textures.begin (),
131
- [&](auto & info) {
132
- return DescriptorData{vk::DescriptorImageInfo{sampler, info.image_view ,
133
- vk::ImageLayout::eGeneral}};
134
- });
135
-
136
- const auto descriptor_set = present_set_provider.Acquire (present_textures);
130
+ const auto present_set = present_heap.Commit ();
131
+ for (u32 index = 0 ; index < screen_infos.size (); index ++) {
132
+ update_queue.AddImageSampler (present_set, 0 , index , screen_infos[index ].image_view ,
133
+ sampler);
134
+ }
137
135
138
136
render_manager.EndRendering ();
139
- scheduler.Record ([this , layout, frame, descriptor_set , renderpass = main_window.Renderpass (),
137
+ scheduler.Record ([this , layout, frame, present_set , renderpass = main_window.Renderpass (),
140
138
index = current_pipeline](vk::CommandBuffer cmdbuf) {
141
139
const vk::Viewport viewport = {
142
140
.x = 0 .0f ,
@@ -171,7 +169,7 @@ void RendererVulkan::PrepareDraw(Frame* frame, const Layout::FramebufferLayout&
171
169
172
170
cmdbuf.beginRenderPass (renderpass_begin_info, vk::SubpassContents::eInline);
173
171
cmdbuf.bindPipeline (vk::PipelineBindPoint::eGraphics, present_pipelines[index ]);
174
- cmdbuf.bindDescriptorSets (vk::PipelineBindPoint::eGraphics, layout, 0 , descriptor_set , {});
172
+ cmdbuf.bindDescriptorSets (vk::PipelineBindPoint::eGraphics, layout, 0 , present_set , {});
175
173
});
176
174
}
177
175
@@ -258,7 +256,7 @@ void RendererVulkan::BuildLayouts() {
258
256
.size = sizeof (PresentUniformData),
259
257
};
260
258
261
- const auto descriptor_set_layout = present_set_provider .Layout ();
259
+ const auto descriptor_set_layout = present_heap .Layout ();
262
260
const vk::PipelineLayoutCreateInfo layout_info = {
263
261
.setLayoutCount = 1 ,
264
262
.pSetLayouts = &descriptor_set_layout,
0 commit comments