diff options
| author | 2021-08-01 02:26:02 -0300 | |
|---|---|---|
| committer | 2021-11-16 22:11:29 +0100 | |
| commit | fc9bb3c3fed4721b06bda46deea3770e5285b104 (patch) | |
| tree | c1e3efd2e418e9df2d9ab72ef7261366f5202468 /src/video_core | |
| parent | texture_cache: Add getter to query if image view is rescaled (diff) | |
| download | yuzu-fc9bb3c3fed4721b06bda46deea3770e5285b104.tar.gz yuzu-fc9bb3c3fed4721b06bda46deea3770e5285b104.tar.xz yuzu-fc9bb3c3fed4721b06bda46deea3770e5285b104.zip | |
shader: Properly blacklist and scale image loads
Diffstat (limited to 'src/video_core')
4 files changed, 12 insertions, 8 deletions
diff --git a/src/video_core/renderer_opengl/gl_compute_pipeline.cpp b/src/video_core/renderer_opengl/gl_compute_pipeline.cpp index 02853b078..60c65047b 100644 --- a/src/video_core/renderer_opengl/gl_compute_pipeline.cpp +++ b/src/video_core/renderer_opengl/gl_compute_pipeline.cpp | |||
| @@ -139,7 +139,7 @@ void ComputePipeline::Configure() { | |||
| 139 | } | 139 | } |
| 140 | } | 140 | } |
| 141 | for (const auto& desc : info.image_descriptors) { | 141 | for (const auto& desc : info.image_descriptors) { |
| 142 | add_image(desc, true); | 142 | add_image(desc, desc.is_written); |
| 143 | } | 143 | } |
| 144 | texture_cache.FillComputeImageViews(std::span(views.data(), views.size())); | 144 | texture_cache.FillComputeImageViews(std::span(views.data(), views.size())); |
| 145 | 145 | ||
diff --git a/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp b/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp index c3d549a6e..11559d6ce 100644 --- a/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp +++ b/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp | |||
| @@ -362,7 +362,7 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) { | |||
| 362 | } | 362 | } |
| 363 | if constexpr (Spec::has_images) { | 363 | if constexpr (Spec::has_images) { |
| 364 | for (const auto& desc : info.image_descriptors) { | 364 | for (const auto& desc : info.image_descriptors) { |
| 365 | add_image(desc, true); | 365 | add_image(desc, desc.is_written); |
| 366 | } | 366 | } |
| 367 | } | 367 | } |
| 368 | }}; | 368 | }}; |
diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp index f89b84c6e..6dc52e399 100644 --- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp | |||
| @@ -159,7 +159,7 @@ void ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute, | |||
| 159 | } | 159 | } |
| 160 | } | 160 | } |
| 161 | for (const auto& desc : info.image_descriptors) { | 161 | for (const auto& desc : info.image_descriptors) { |
| 162 | add_image(desc, true); | 162 | add_image(desc, desc.is_written); |
| 163 | } | 163 | } |
| 164 | texture_cache.FillComputeImageViews(std::span(views.data(), views.size())); | 164 | texture_cache.FillComputeImageViews(std::span(views.data(), views.size())); |
| 165 | 165 | ||
diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 4efb5d735..c29bab678 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp | |||
| @@ -322,20 +322,24 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) { | |||
| 322 | } | 322 | } |
| 323 | return TexturePair(gpu_memory.Read<u32>(addr), via_header_index); | 323 | return TexturePair(gpu_memory.Read<u32>(addr), via_header_index); |
| 324 | }}; | 324 | }}; |
| 325 | const auto add_image{[&](const auto& desc) { | 325 | const auto add_image{[&](const auto& desc, bool blacklist) LAMBDA_FORCEINLINE { |
| 326 | for (u32 index = 0; index < desc.count; ++index) { | 326 | for (u32 index = 0; index < desc.count; ++index) { |
| 327 | const auto handle{read_handle(desc, index)}; | 327 | const auto handle{read_handle(desc, index)}; |
| 328 | views[view_index++] = {handle.first}; | 328 | views[view_index++] = { |
| 329 | .index = handle.first, | ||
| 330 | .blacklist = blacklist, | ||
| 331 | .id = {}, | ||
| 332 | }; | ||
| 329 | } | 333 | } |
| 330 | }}; | 334 | }}; |
| 331 | if constexpr (Spec::has_texture_buffers) { | 335 | if constexpr (Spec::has_texture_buffers) { |
| 332 | for (const auto& desc : info.texture_buffer_descriptors) { | 336 | for (const auto& desc : info.texture_buffer_descriptors) { |
| 333 | add_image(desc); | 337 | add_image(desc, false); |
| 334 | } | 338 | } |
| 335 | } | 339 | } |
| 336 | if constexpr (Spec::has_image_buffers) { | 340 | if constexpr (Spec::has_image_buffers) { |
| 337 | for (const auto& desc : info.image_buffer_descriptors) { | 341 | for (const auto& desc : info.image_buffer_descriptors) { |
| 338 | add_image(desc); | 342 | add_image(desc, false); |
| 339 | } | 343 | } |
| 340 | } | 344 | } |
| 341 | for (const auto& desc : info.texture_descriptors) { | 345 | for (const auto& desc : info.texture_descriptors) { |
| @@ -349,7 +353,7 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) { | |||
| 349 | } | 353 | } |
| 350 | if constexpr (Spec::has_images) { | 354 | if constexpr (Spec::has_images) { |
| 351 | for (const auto& desc : info.image_descriptors) { | 355 | for (const auto& desc : info.image_descriptors) { |
| 352 | add_image(desc); | 356 | add_image(desc, desc.is_written); |
| 353 | } | 357 | } |
| 354 | } | 358 | } |
| 355 | }}; | 359 | }}; |