summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-07-26 03:34:12 +0200
committerFernando Sahmkow <fsahmkow27@gmail.com>2021-11-16 22:11:28 +0100
commitd2388dd0d0d36a230b58efbdd17f8366c79555b5 (patch)
tree02f74469732f55fc109dd45a71339a6d26c0dfae /src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
parentvk_texture_cache: Properly scale blit source images (diff)
downloadyuzu-d2388dd0d0d36a230b58efbdd17f8366c79555b5.tar
yuzu-d2388dd0d0d36a230b58efbdd17f8366c79555b5.tar.gz
yuzu-d2388dd0d0d36a230b58efbdd17f8366c79555b5.tar.bz2
yuzu-d2388dd0d0d36a230b58efbdd17f8366c79555b5.tar.lz
yuzu-d2388dd0d0d36a230b58efbdd17f8366c79555b5.tar.xz
yuzu-d2388dd0d0d36a230b58efbdd17f8366c79555b5.tar.zst
yuzu-d2388dd0d0d36a230b58efbdd17f8366c79555b5.zip
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_compute_pipeline.cpp')
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pipeline.cpp30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
index 44faf626a..bda75788c 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
+++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
@@ -180,9 +180,11 @@ void ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute,
buffer_cache.UpdateComputeBuffers();
buffer_cache.BindHostComputeBuffers();
+ RescalingPushConstant rescaling(num_textures);
const VkSampler* samplers_it{samplers.data()};
const ImageId* views_it{image_view_ids.data()};
- PushImageDescriptors(info, samplers_it, views_it, texture_cache, update_descriptor_queue);
+ PushImageDescriptors(info, samplers_it, views_it, texture_cache, update_descriptor_queue,
+ rescaling);
if (!is_built.load(std::memory_order::relaxed)) {
// Wait for the pipeline to be built
@@ -192,17 +194,21 @@ void ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute,
});
}
const void* const descriptor_data{update_descriptor_queue.UpdateData()};
- scheduler.Record([this, descriptor_data](vk::CommandBuffer cmdbuf) {
- cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
- if (!descriptor_set_layout) {
- return;
- }
- const VkDescriptorSet descriptor_set{descriptor_allocator.Commit()};
- const vk::Device& dev{device.GetLogical()};
- dev.UpdateDescriptorSet(descriptor_set, *descriptor_update_template, descriptor_data);
- cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline_layout, 0,
- descriptor_set, nullptr);
- });
+ scheduler.Record(
+ [this, descriptor_data, rescaling_data = rescaling.Data()](vk::CommandBuffer cmdbuf) {
+ cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
+ if (!descriptor_set_layout) {
+ return;
+ }
+ if (num_textures > 0) {
+ cmdbuf.PushConstants(*pipeline_layout, VK_SHADER_STAGE_COMPUTE_BIT, rescaling_data);
+ }
+ const VkDescriptorSet descriptor_set{descriptor_allocator.Commit()};
+ const vk::Device& dev{device.GetLogical()};
+ dev.UpdateDescriptorSet(descriptor_set, *descriptor_update_template, descriptor_data);
+ cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline_layout, 0,
+ descriptor_set, nullptr);
+ });
}
} // namespace Vulkan