diff --git a/src/vulkan/runtime/meson.build b/src/vulkan/runtime/meson.build index e6544902de6..056ad39bbb6 100644 --- a/src/vulkan/runtime/meson.build +++ b/src/vulkan/runtime/meson.build @@ -82,6 +82,8 @@ vulkan_runtime_files = files( 'vk_physical_device.h', 'vk_pipeline_layout.c', 'vk_pipeline_layout.h', + 'vk_query_pool.c', + 'vk_query_pool.h', 'vk_queue.c', 'vk_queue.h', 'vk_render_pass.c', diff --git a/src/vulkan/runtime/vk_query_pool.c b/src/vulkan/runtime/vk_query_pool.c new file mode 100644 index 00000000000..4a4b73a5627 --- /dev/null +++ b/src/vulkan/runtime/vk_query_pool.c @@ -0,0 +1,55 @@ +/* + * Copyright © 2022 Collabora, Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "vk_query_pool.h" + +void * +vk_query_pool_create(struct vk_device *device, + const VkQueryPoolCreateInfo *pCreateInfo, + const VkAllocationCallbacks *alloc, + size_t size) +{ + struct vk_query_pool *query_pool; + + assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO); + + query_pool = vk_object_zalloc(device, alloc, size, + VK_OBJECT_TYPE_QUERY_POOL); + if (query_pool == NULL) + return NULL; + + query_pool->query_type = pCreateInfo->queryType; + query_pool->query_count = pCreateInfo->queryCount; + if (pCreateInfo->queryType == VK_QUERY_TYPE_PIPELINE_STATISTICS) + query_pool->pipeline_statistics = pCreateInfo->pipelineStatistics; + + return query_pool; +} + +void +vk_query_pool_destroy(struct vk_device *device, + const VkAllocationCallbacks *alloc, + struct vk_query_pool *query_pool) +{ + vk_object_free(device, alloc, query_pool); +} diff --git a/src/vulkan/runtime/vk_query_pool.h b/src/vulkan/runtime/vk_query_pool.h new file mode 100644 index 00000000000..57714141ec8 --- /dev/null +++ b/src/vulkan/runtime/vk_query_pool.h @@ -0,0 +1,60 @@ +/* + * Copyright © 2022 Collabora, Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +#ifndef VK_QUERY_POOL_H +#define VK_QUERY_POOL_H + +#include "vk_object.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct vk_query_pool { + struct vk_object_base base; + + /** VkQueryPoolCreateInfo::queryType */ + VkQueryType query_type; + + /** VkQueryPoolCreateInfo::queryCount */ + uint32_t query_count; + + /** VkQueryPoolCreateInfo::pipelineStatistics + * + * If query_type != VK_QUERY_TYPE_PIPELINE_STATISTICS, this will be zero. + */ + VkQueryPipelineStatisticFlags pipeline_statistics; +}; + +void *vk_query_pool_create(struct vk_device *device, + const VkQueryPoolCreateInfo *pCreateInfo, + const VkAllocationCallbacks *alloc, + size_t size); +void vk_query_pool_destroy(struct vk_device *device, + const VkAllocationCallbacks *alloc, + struct vk_query_pool *query_pool); + +#ifdef __cplusplus +} +#endif + +#endif /* VK_QUERY_POOL_H */