mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-09 00:11:24 +12:00
vk: Reimplement occlusion result reading
- Implement partial result reads
This commit is contained in:
parent
51e0eaaddc
commit
fe3c290d03
1 changed files with 22 additions and 8 deletions
|
@ -2944,25 +2944,39 @@ public:
|
||||||
bool check_query_status(u32 index)
|
bool check_query_status(u32 index)
|
||||||
{
|
{
|
||||||
u32 result[2] = {0, 0};
|
u32 result[2] = {0, 0};
|
||||||
switch (VkResult status = vkGetQueryPoolResults(*owner, query_pool, index, 1, 8, result, 8, VK_QUERY_RESULT_WITH_AVAILABILITY_BIT))
|
switch (const auto error = vkGetQueryPoolResults(*owner, query_pool, index, 1, 8, result, 8, VK_QUERY_RESULT_PARTIAL_BIT | VK_QUERY_RESULT_WITH_AVAILABILITY_BIT))
|
||||||
{
|
{
|
||||||
case VK_SUCCESS:
|
case VK_SUCCESS:
|
||||||
break;
|
return (result[0] || result[1]);
|
||||||
case VK_NOT_READY:
|
case VK_NOT_READY:
|
||||||
return false;
|
return false;
|
||||||
default:
|
default:
|
||||||
vk::die_with_error(HERE, status);
|
die_with_error(HERE, error);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result[1] != 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 get_query_result(u32 index)
|
u32 get_query_result(u32 index)
|
||||||
{
|
{
|
||||||
u32 result = 0;
|
u32 result[2] = { 0, 0 };
|
||||||
CHECK_RESULT(vkGetQueryPoolResults(*owner, query_pool, index, 1, 4, &result, 4, VK_QUERY_RESULT_WAIT_BIT));
|
|
||||||
|
|
||||||
return result == 0u? 0u: 1u;
|
do
|
||||||
|
{
|
||||||
|
switch (const auto error = vkGetQueryPoolResults(*owner, query_pool, index, 1, 8, result, 8, VK_QUERY_RESULT_PARTIAL_BIT | VK_QUERY_RESULT_WITH_AVAILABILITY_BIT))
|
||||||
|
{
|
||||||
|
case VK_SUCCESS:
|
||||||
|
if (result[0]) return 1u;
|
||||||
|
if (result[1]) return 0u; // Partial result can return SUCCESS when unavailable
|
||||||
|
continue;
|
||||||
|
case VK_NOT_READY:
|
||||||
|
if (result[0]) return 1u; // Partial result can return NOT_READY when unavailable
|
||||||
|
continue;
|
||||||
|
default:
|
||||||
|
die_with_error(HERE, error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_query(vk::command_buffer &cmd, u32 index)
|
void reset_query(vk::command_buffer &cmd, u32 index)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue