Add VK_EXT_host_query_reset

This extension allows the host to reset query pools without the use of vkCmdResetQueryPool. Bug: b/169602655 Tests: dEQP-VK.query_pool.occlusion_query.* Change-Id: I20a121d30ff5c39dc9df0a803c3f054ff217e5dc Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/51309 Kokoro-Result: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarSean Risser <srisser@google.com> Commit-Queue: Sean Risser <srisser@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent 009667d5
......@@ -313,6 +313,7 @@ static const std::unordered_map<std::string, PFN_vkVoidFunction> deviceFunctionP
MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginRenderPass2),
MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndRenderPass2),
MAKE_VULKAN_DEVICE_ENTRY(vkCmdNextSubpass2),
MAKE_VULKAN_DEVICE_ENTRY(vkResetQueryPool),
};
static const std::vector<std::pair<const char *, std::unordered_map<std::string, PFN_vkVoidFunction>>> deviceExtensionFunctionPointers = {
......@@ -381,6 +382,12 @@ static const std::vector<std::pair<const char *, std::unordered_map<std::string,
{
MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetLineStippleEXT),
} },
// VK_EXT_host_query_reset
{
VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME,
{
MAKE_VULKAN_DEVICE_ENTRY(vkResetQueryPoolEXT),
} },
#ifndef __ANDROID__
// VK_KHR_swapchain
{
......
......@@ -183,6 +183,12 @@ static void getPhysicalDeviceProvokingVertexFeaturesEXT(T *features)
}
template<typename T>
static void getPhysicalDeviceHostQueryResetFeatures(T *features)
{
features->hostQueryReset = VK_TRUE;
}
template<typename T>
static void getPhysicalDeviceImageRobustnessFeaturesEXT(T *features)
{
features->robustImageAccess = VK_TRUE;
......@@ -287,7 +293,7 @@ static void getPhysicalDeviceVulkan12Features(T *features)
getPhysicalDeviceUniformBufferStandardLayoutFeatures(features);
getPhysicalDeviceShaderSubgroupExtendedTypesFeatures(features);
getPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR(features);
features->hostQueryReset = VK_FALSE;
getPhysicalDeviceHostQueryResetFeatures(features);
features->timelineSemaphore = VK_FALSE;
features->bufferDeviceAddress = VK_FALSE;
features->bufferDeviceAddressCaptureReplay = VK_FALSE;
......@@ -331,6 +337,9 @@ void PhysicalDevice::getFeatures2(VkPhysicalDeviceFeatures2 *features) const
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
getPhysicalDeviceShaderDrawParameterFeatures(reinterpret_cast<VkPhysicalDeviceShaderDrawParameterFeatures *>(curExtension));
break;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
getPhysicalDeviceHostQueryResetFeatures(reinterpret_cast<VkPhysicalDeviceHostQueryResetFeatures *>(curExtension));
break;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT:
getPhysicalDeviceImageRobustnessFeaturesEXT(reinterpret_cast<VkPhysicalDeviceImageRobustnessFeaturesEXT *>(curExtension));
break;
......
......@@ -209,4 +209,10 @@ VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR(VkCommandBuffer commandBuffer, c
{
vkCmdNextSubpass2(commandBuffer, pSubpassBegin, pSubpassEnd);
}
// VK_EXT_host_query_reset
VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount)
{
vkResetQueryPool(device, queryPool, firstQuery, queryCount);
}
}
......@@ -153,7 +153,7 @@ VkResult QueryPool::getResults(uint32_t firstQuery, uint32_t queryCount, size_t
const auto current = query.getData();
bool writeResult = true;
if(current.state == Query::ACTIVE)
if(current.state == Query::ACTIVE || (current.state == Query::UNAVAILABLE && !(flags & VK_QUERY_RESULT_WAIT_BIT)))
{
result = VK_NOT_READY;
writeResult = (flags & VK_QUERY_RESULT_PARTIAL_BIT); // Allow writing partial results
......
......@@ -403,6 +403,7 @@ static const VkExtensionProperties deviceExtensionProperties[] = {
{ VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME, VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION },
#endif // SWIFTSHADER_DEVICE_MEMORY_REPORT
// Vulkan 1.2 promoted extensions
{ VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION },
{ VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION },
{ VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME, VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION },
{ VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME, VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION },
......@@ -798,6 +799,14 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(VkPhysicalDevice physicalDevice, c
}
break;
#endif // SWIFTSHADER_DEVICE_MEMORY_REPORT
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
{
const VkPhysicalDeviceHostQueryResetFeatures *hostQueryResetFeatures = reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures *>(extensionCreateInfo);
// VK_EXT_host_query_reset is always enabled.
(void)hostQueryResetFeatures->hostQueryReset;
break;
}
default:
// "the [driver] must skip over, without processing (other than reading the sType and pNext members) any structures in the chain with sType values not defined by [supported extenions]"
LOG_TRAP("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType).c_str());
......@@ -2775,6 +2784,13 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase(VkCommandBuffer commandBuffer, uint
vk::Cast(commandBuffer)->dispatchBase(baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
}
VKAPI_ATTR void VKAPI_CALL vkResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount)
{
TRACE("(VkDevice device = %p, VkQueryPool queryPool = %p, uint32_t firstQuery = %d, uint32_t queryCount = %d)",
device, static_cast<void *>(queryPool), firstQuery, queryCount);
vk::Cast(queryPool)->reset(firstQuery, queryCount);
}
VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups(VkInstance instance, uint32_t *pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties *pPhysicalDeviceGroupProperties)
{
TRACE("(VkInstance instance = %p, uint32_t* pPhysicalDeviceGroupCount = %p, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties = %p)",
......
......@@ -229,3 +229,5 @@ EXPORTS
; VK_KHR_win32_surface
vkCreateWin32SurfaceKHR
vkGetPhysicalDeviceWin32PresentationSupportKHR
; VK_EXT_host_query_reset
vkResetQueryPool
......@@ -226,6 +226,8 @@ global:
vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
vkGetPhysicalDeviceSurfaceFormatsKHR;
vkGetPhysicalDeviceSurfacePresentModesKHR;
# VK_EXT_host_query_reset
vkResetQueryPool;
# Android HAL module info object
HMI;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment