Browse Source
Merge pull request #7077 from FernandoS27/face-down
A series of fixes to queries and indexed samplers.
pull/15/merge
Ameer J
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
8 additions and
6 deletions
-
src/shader_recompiler/ir_opt/texture_pass.cpp
-
src/video_core/query_cache.h
-
src/video_core/renderer_vulkan/vk_query_cache.cpp
|
|
@ -492,7 +492,8 @@ void TexturePass(Environment& env, IR::Program& program) { |
|
|
const auto insert_point{IR::Block::InstructionList::s_iterator_to(*inst)}; |
|
|
const auto insert_point{IR::Block::InstructionList::s_iterator_to(*inst)}; |
|
|
IR::IREmitter ir{*texture_inst.block, insert_point}; |
|
|
IR::IREmitter ir{*texture_inst.block, insert_point}; |
|
|
const IR::U32 shift{ir.Imm32(std::countr_zero(DESCRIPTOR_SIZE))}; |
|
|
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 { |
|
|
} else { |
|
|
inst->SetArg(0, IR::Value{}); |
|
|
inst->SetArg(0, IR::Value{}); |
|
|
} |
|
|
} |
|
|
|
|
|
@ -258,9 +258,9 @@ private: |
|
|
|
|
|
|
|
|
void AsyncFlushQuery(VAddr addr) { |
|
|
void AsyncFlushQuery(VAddr addr) { |
|
|
if (!uncommitted_flushes) { |
|
|
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; |
|
|
static constexpr std::uintptr_t PAGE_SIZE = 4096; |
|
|
@ -276,8 +276,8 @@ private: |
|
|
|
|
|
|
|
|
std::array<CounterStream, VideoCore::NumQueryTypes> streams; |
|
|
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> |
|
|
template <class QueryCache, class HostCounter> |
|
|
|
|
|
@ -117,7 +117,8 @@ u64 HostCounter::BlockingQuery() const { |
|
|
cache.GetScheduler().Wait(tick); |
|
|
cache.GetScheduler().Wait(tick); |
|
|
u64 data; |
|
|
u64 data; |
|
|
const VkResult query_result = cache.GetDevice().GetLogical().GetQueryResults( |
|
|
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) { |
|
|
switch (query_result) { |
|
|
case VK_SUCCESS: |
|
|
case VK_SUCCESS: |
|
|
|