aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2022-12-19 07:57:22 +0100
committerLynne <dev@lynne.ee>2023-05-29 00:41:46 +0200
commitd386988c39670aadb4fa9d22bc1e0f3be8373b5c (patch)
treeab4d7b81c490ca1e9053290b74dfaef9f7a79b41
parentbf69a641355771106b4836e0558d5c34e48870b9 (diff)
downloadffmpeg-d386988c39670aadb4fa9d22bc1e0f3be8373b5c.tar.gz
vulkan: use device properties 2 and add a convenience loader function
-rw-r--r--libavutil/vulkan.c18
-rw-r--r--libavutil/vulkan.h8
2 files changed, 24 insertions, 2 deletions
diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c
index faf5cd5508..8a583248d1 100644
--- a/libavutil/vulkan.c
+++ b/libavutil/vulkan.c
@@ -108,6 +108,22 @@ const char *ff_vk_ret2str(VkResult res)
#undef CASE
}
+void ff_vk_load_props(FFVulkanContext *s)
+{
+ FFVulkanFunctions *vk = &s->vkfn;
+
+ s->driver_props = (VkPhysicalDeviceDriverProperties) {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES,
+ };
+ s->props = (VkPhysicalDeviceProperties2) {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
+ .pNext = &s->driver_props,
+ };
+
+ vk->GetPhysicalDeviceProperties2(s->hwctx->phys_dev, &s->props);
+ vk->GetPhysicalDeviceMemoryProperties(s->hwctx->phys_dev, &s->mprops);
+}
+
void ff_vk_qf_fill(FFVulkanContext *s)
{
s->nb_qfs = 0;
@@ -189,7 +205,7 @@ int ff_vk_alloc_mem(FFVulkanContext *s, VkMemoryRequirements *req,
/* Align if we need to */
if ((req_flags != UINT32_MAX) && req_flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
- req->size = FFALIGN(req->size, s->props.limits.minMemoryMapAlignment);
+ req->size = FFALIGN(req->size, s->props.properties.limits.minMemoryMapAlignment);
alloc_info.allocationSize = req->size;
diff --git a/libavutil/vulkan.h b/libavutil/vulkan.h
index f2c4a79102..2cd2c1f8fa 100644
--- a/libavutil/vulkan.h
+++ b/libavutil/vulkan.h
@@ -197,7 +197,8 @@ typedef struct FFVulkanContext {
FFVulkanFunctions vkfn;
FFVulkanExtensions extensions;
- VkPhysicalDeviceProperties props;
+ VkPhysicalDeviceProperties2 props;
+ VkPhysicalDeviceDriverProperties driver_props;
VkPhysicalDeviceMemoryProperties mprops;
AVBufferRef *device_ref;
@@ -244,6 +245,11 @@ extern const VkComponentMapping ff_comp_identity_map;
const char *ff_vk_ret2str(VkResult res);
/**
+ * Loads props/mprops/driver_props
+ */
+void ff_vk_load_props(FFVulkanContext *s);
+
+/**
* Returns 1 if the image is any sort of supported RGB
*/
int ff_vk_mt_is_np_rgb(enum AVPixelFormat pix_fmt);