diff options
author | Ameer J <52414509+ameerj@users.noreply.github.com> | 2021-10-17 03:41:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-17 03:41:54 +0200 |
commit | 3791c7ca82aafa8e007074dcc2059ff4ba4de22d (patch) | |
tree | b70ed6e2d0f75589532a0e6c197b970bf328e20a | |
parent | Merge pull request #7127 from FernandoS27/i-saw-a-wabbit (diff) | |
parent | Shader Compiler: avoid overflowed indices on indixed samplers. (diff) | |
download | yuzu-3791c7ca82aafa8e007074dcc2059ff4ba4de22d.tar yuzu-3791c7ca82aafa8e007074dcc2059ff4ba4de22d.tar.gz yuzu-3791c7ca82aafa8e007074dcc2059ff4ba4de22d.tar.bz2 yuzu-3791c7ca82aafa8e007074dcc2059ff4ba4de22d.tar.lz yuzu-3791c7ca82aafa8e007074dcc2059ff4ba4de22d.tar.xz yuzu-3791c7ca82aafa8e007074dcc2059ff4ba4de22d.tar.zst yuzu-3791c7ca82aafa8e007074dcc2059ff4ba4de22d.zip |
Diffstat (limited to '')
-rw-r--r-- | src/shader_recompiler/ir_opt/texture_pass.cpp | 3 | ||||
-rw-r--r-- | src/video_core/query_cache.h | 8 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_query_cache.cpp | 3 |
3 files changed, 8 insertions, 6 deletions
diff --git a/src/shader_recompiler/ir_opt/texture_pass.cpp b/src/shader_recompiler/ir_opt/texture_pass.cpp index 44ad10d43..225c238fb 100644 --- a/src/shader_recompiler/ir_opt/texture_pass.cpp +++ b/src/shader_recompiler/ir_opt/texture_pass.cpp @@ -492,7 +492,8 @@ void TexturePass(Environment& env, IR::Program& program) { const auto insert_point{IR::Block::InstructionList::s_iterator_to(*inst)}; IR::IREmitter ir{*texture_inst.block, insert_point}; const IR::U32 shift{ir.Imm32(std::countr_zero(DESCRIPTOR_SIZE))}; - inst->SetArg(0, ir.ShiftRightArithmetic(cbuf.dynamic_offset, shift)); + inst->SetArg(0, ir.SMin(ir.ShiftRightArithmetic(cbuf.dynamic_offset, shift), + ir.Imm32(DESCRIPTOR_SIZE - 1))); } else { inst->SetArg(0, IR::Value{}); } diff --git a/src/video_core/query_cache.h b/src/video_core/query_cache.h index 73231061a..392f82eb7 100644 --- a/src/video_core/query_cache.h +++ b/src/video_core/query_cache.h @@ -258,9 +258,9 @@ private: void AsyncFlushQuery(VAddr addr) { if (!uncommitted_flushes) { - uncommitted_flushes = std::make_shared<std::unordered_set<VAddr>>(); + uncommitted_flushes = std::make_shared<std::vector<VAddr>>(); } - uncommitted_flushes->insert(addr); + uncommitted_flushes->push_back(addr); } static constexpr std::uintptr_t PAGE_SIZE = 4096; @@ -276,8 +276,8 @@ private: std::array<CounterStream, VideoCore::NumQueryTypes> streams; - std::shared_ptr<std::unordered_set<VAddr>> uncommitted_flushes{}; - std::list<std::shared_ptr<std::unordered_set<VAddr>>> committed_flushes; + std::shared_ptr<std::vector<VAddr>> uncommitted_flushes{}; + std::list<std::shared_ptr<std::vector<VAddr>>> committed_flushes; }; template <class QueryCache, class HostCounter> diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp index c9cb32d71..259cba156 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp @@ -117,7 +117,8 @@ u64 HostCounter::BlockingQuery() const { cache.GetScheduler().Wait(tick); u64 data; const VkResult query_result = cache.GetDevice().GetLogical().GetQueryResults( - query.first, query.second, 1, sizeof(data), &data, sizeof(data), VK_QUERY_RESULT_64_BIT); + query.first, query.second, 1, sizeof(data), &data, sizeof(data), + VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT); switch (query_result) { case VK_SUCCESS: |