mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 09:10:36 +00:00
Revert "vulkan: remove views from the memory objects."
This reverts commit 1ea817298ee4d5ef9b00f888f8ebe16a888b1150.
This commit is contained in:
parent
3c2710dc0f
commit
1c2aae08c5
4 changed files with 114 additions and 0 deletions
|
@ -56,6 +56,26 @@ _create_info_from_args (VkBufferCreateInfo * info, gsize size,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GST_VK_BUFFER_VIEW_CREATE_INFO_INIT GST_VK_STRUCT_7
|
||||||
|
#define GST_VK_BUFFER_VIEW_CREATE_INFO(info, pNext, flags, buffer, format, offset, range) \
|
||||||
|
G_STMT_START { \
|
||||||
|
VkBufferViewCreateInfo tmp = GST_VK_BUFFER_VIEW_CREATE_INFO_INIT (VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO, pNext, flags, buffer, format, offset, range); \
|
||||||
|
(info) = tmp; \
|
||||||
|
} G_STMT_END
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_create_view_from_args (VkBufferViewCreateInfo * info, VkBuffer buffer,
|
||||||
|
VkFormat format, gsize offset, gsize range)
|
||||||
|
{
|
||||||
|
/* FIXME: validate these */
|
||||||
|
g_assert (format != VK_FORMAT_UNDEFINED);
|
||||||
|
|
||||||
|
GST_VK_BUFFER_VIEW_CREATE_INFO (*info, NULL, 0, buffer, format, offset,
|
||||||
|
range);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_vk_buffer_mem_init (GstVulkanBufferMemory * mem, GstAllocator * allocator,
|
_vk_buffer_mem_init (GstVulkanBufferMemory * mem, GstAllocator * allocator,
|
||||||
GstMemory * parent, GstVulkanDevice * device, VkBufferUsageFlags usage,
|
GstMemory * parent, GstVulkanDevice * device, VkBufferUsageFlags usage,
|
||||||
|
@ -131,6 +151,22 @@ _vk_buffer_mem_new_alloc (GstAllocator * allocator, GstMemory * parent,
|
||||||
if (gst_vulkan_error_to_g_error (err, &error, "vkBindBufferMemory") < 0)
|
if (gst_vulkan_error_to_g_error (err, &error, "vkBindBufferMemory") < 0)
|
||||||
goto vk_error;
|
goto vk_error;
|
||||||
|
|
||||||
|
if (usage & (VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)) {
|
||||||
|
VkBufferViewCreateInfo view_info;
|
||||||
|
|
||||||
|
_create_view_from_args (&view_info, mem->buffer, format, 0,
|
||||||
|
mem->requirements.size);
|
||||||
|
err = vkCreateBufferView (device->device, &view_info, NULL, &mem->view);
|
||||||
|
if (gst_vulkan_error_to_g_error (err, &error, "vkCreateBufferView") < 0)
|
||||||
|
goto vk_error;
|
||||||
|
}
|
||||||
|
|
||||||
return mem;
|
return mem;
|
||||||
|
|
||||||
vk_error:
|
vk_error:
|
||||||
|
@ -156,6 +192,8 @@ _vk_buffer_mem_new_wrapped (GstAllocator * allocator, GstMemory * parent,
|
||||||
{
|
{
|
||||||
GstVulkanBufferMemory *mem = g_new0 (GstVulkanBufferMemory, 1);
|
GstVulkanBufferMemory *mem = g_new0 (GstVulkanBufferMemory, 1);
|
||||||
GstAllocationParams params = { 0, };
|
GstAllocationParams params = { 0, };
|
||||||
|
GError *error = NULL;
|
||||||
|
VkResult err;
|
||||||
|
|
||||||
mem->buffer = buffer;
|
mem->buffer = buffer;
|
||||||
|
|
||||||
|
@ -168,7 +206,39 @@ _vk_buffer_mem_new_wrapped (GstAllocator * allocator, GstMemory * parent,
|
||||||
mem->requirements.size, user_data, notify);
|
mem->requirements.size, user_data, notify);
|
||||||
mem->wrapped = TRUE;
|
mem->wrapped = TRUE;
|
||||||
|
|
||||||
|
/* XXX: we don't actually if the buffer has a vkDeviceMemory bound so
|
||||||
|
* this may fail */
|
||||||
|
if (usage & (VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
|
||||||
|
VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)) {
|
||||||
|
VkBufferViewCreateInfo view_info;
|
||||||
|
|
||||||
|
_create_view_from_args (&view_info, mem->buffer, format, 0,
|
||||||
|
mem->requirements.size);
|
||||||
|
err = vkCreateBufferView (device->device, &view_info, NULL, &mem->view);
|
||||||
|
if (gst_vulkan_error_to_g_error (err, &error, "vkCreateBufferView") < 0)
|
||||||
|
goto vk_error;
|
||||||
|
}
|
||||||
|
|
||||||
return mem;
|
return mem;
|
||||||
|
|
||||||
|
vk_error:
|
||||||
|
{
|
||||||
|
GST_CAT_ERROR (GST_CAT_VULKAN_BUFFER_MEMORY,
|
||||||
|
"Failed to allocate buffer memory %s", error->message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
error:
|
||||||
|
{
|
||||||
|
gst_memory_unref ((GstMemory *) mem);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gpointer
|
static gpointer
|
||||||
|
@ -246,6 +316,9 @@ _vk_buffer_mem_free (GstAllocator * allocator, GstMemory * memory)
|
||||||
if (mem->buffer && !mem->wrapped)
|
if (mem->buffer && !mem->wrapped)
|
||||||
vkDestroyBuffer (mem->device->device, mem->buffer, NULL);
|
vkDestroyBuffer (mem->device->device, mem->buffer, NULL);
|
||||||
|
|
||||||
|
if (mem->view)
|
||||||
|
vkDestroyBufferView (mem->device->device, mem->view, NULL);
|
||||||
|
|
||||||
if (mem->vk_mem)
|
if (mem->vk_mem)
|
||||||
gst_memory_unref ((GstMemory *) mem->vk_mem);
|
gst_memory_unref ((GstMemory *) mem->vk_mem);
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ struct _GstVulkanBufferMemory
|
||||||
GstVulkanDevice * device;
|
GstVulkanDevice * device;
|
||||||
|
|
||||||
VkBuffer buffer;
|
VkBuffer buffer;
|
||||||
|
VkBufferView view;
|
||||||
GstVulkanMemory *vk_mem;
|
GstVulkanMemory *vk_mem;
|
||||||
|
|
||||||
VkMemoryRequirements requirements;
|
VkMemoryRequirements requirements;
|
||||||
|
|
|
@ -101,6 +101,22 @@ gst_vulkan_format_from_video_format (GstVideoFormat v_format, guint plane)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_view_create_info (VkImage image, VkFormat format, VkImageViewCreateInfo * info)
|
||||||
|
{
|
||||||
|
info->sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||||
|
info->pNext = NULL;
|
||||||
|
info->image = image;
|
||||||
|
info->format = format;
|
||||||
|
info->viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||||
|
info->flags = 0;
|
||||||
|
|
||||||
|
GST_VK_COMPONENT_MAPPING (info->components, VK_COMPONENT_SWIZZLE_R,
|
||||||
|
VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A);
|
||||||
|
GST_VK_IMAGE_SUBRESOURCE_RANGE (info->subresourceRange,
|
||||||
|
VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_create_info_from_args (VkImageCreateInfo * info, VkFormat format, gsize width,
|
_create_info_from_args (VkImageCreateInfo * info, VkFormat format, gsize width,
|
||||||
gsize height, VkImageTiling tiling, VkImageUsageFlags usage)
|
gsize height, VkImageTiling tiling, VkImageUsageFlags usage)
|
||||||
|
@ -167,6 +183,7 @@ _vk_image_mem_new_alloc (GstAllocator * allocator, GstMemory * parent,
|
||||||
{
|
{
|
||||||
GstVulkanImageMemory *mem = NULL;
|
GstVulkanImageMemory *mem = NULL;
|
||||||
GstAllocationParams params = { 0, };
|
GstAllocationParams params = { 0, };
|
||||||
|
VkImageViewCreateInfo view_info;
|
||||||
VkImageCreateInfo image_info;
|
VkImageCreateInfo image_info;
|
||||||
VkPhysicalDevice gpu;
|
VkPhysicalDevice gpu;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
@ -213,6 +230,14 @@ _vk_image_mem_new_alloc (GstAllocator * allocator, GstMemory * parent,
|
||||||
if (gst_vulkan_error_to_g_error (err, &error, "vkBindImageMemory") < 0)
|
if (gst_vulkan_error_to_g_error (err, &error, "vkBindImageMemory") < 0)
|
||||||
goto vk_error;
|
goto vk_error;
|
||||||
|
|
||||||
|
if (usage & (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT |
|
||||||
|
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
|
||||||
|
_view_create_info (mem->image, format, &view_info);
|
||||||
|
err = vkCreateImageView (device->device, &view_info, NULL, &mem->view);
|
||||||
|
if (gst_vulkan_error_to_g_error (err, &error, "vkCreateImageView") < 0)
|
||||||
|
goto vk_error;
|
||||||
|
}
|
||||||
|
|
||||||
return mem;
|
return mem;
|
||||||
|
|
||||||
vk_error:
|
vk_error:
|
||||||
|
@ -239,6 +264,7 @@ _vk_image_mem_new_wrapped (GstAllocator * allocator, GstMemory * parent,
|
||||||
{
|
{
|
||||||
GstVulkanImageMemory *mem = g_new0 (GstVulkanImageMemory, 1);
|
GstVulkanImageMemory *mem = g_new0 (GstVulkanImageMemory, 1);
|
||||||
GstAllocationParams params = { 0, };
|
GstAllocationParams params = { 0, };
|
||||||
|
VkImageViewCreateInfo view_info;
|
||||||
VkPhysicalDevice gpu;
|
VkPhysicalDevice gpu;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
VkResult err;
|
VkResult err;
|
||||||
|
@ -267,6 +293,16 @@ _vk_image_mem_new_wrapped (GstAllocator * allocator, GstMemory * parent,
|
||||||
"vkGetPhysicalDeviceImageFormatProperties") < 0)
|
"vkGetPhysicalDeviceImageFormatProperties") < 0)
|
||||||
goto vk_error;
|
goto vk_error;
|
||||||
|
|
||||||
|
/* XXX: we don't actually if the image has a vkDeviceMemory bound so
|
||||||
|
* this may fail */
|
||||||
|
if (usage & (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT |
|
||||||
|
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
|
||||||
|
_view_create_info (mem->image, format, &view_info);
|
||||||
|
err = vkCreateImageView (device->device, &view_info, NULL, &mem->view);
|
||||||
|
if (gst_vulkan_error_to_g_error (err, &error, "vkCreateImageView") < 0)
|
||||||
|
goto vk_error;
|
||||||
|
}
|
||||||
|
|
||||||
return mem;
|
return mem;
|
||||||
|
|
||||||
vk_error:
|
vk_error:
|
||||||
|
@ -359,6 +395,9 @@ _vk_image_mem_free (GstAllocator * allocator, GstMemory * memory)
|
||||||
if (mem->image && !mem->wrapped)
|
if (mem->image && !mem->wrapped)
|
||||||
vkDestroyImage (mem->device->device, mem->image, NULL);
|
vkDestroyImage (mem->device->device, mem->image, NULL);
|
||||||
|
|
||||||
|
if (mem->view)
|
||||||
|
vkDestroyImageView (mem->device->device, mem->view, NULL);
|
||||||
|
|
||||||
if (mem->vk_mem)
|
if (mem->vk_mem)
|
||||||
gst_memory_unref ((GstMemory *) mem->vk_mem);
|
gst_memory_unref ((GstMemory *) mem->vk_mem);
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@ struct _GstVulkanImageMemory
|
||||||
|
|
||||||
VkImage image;
|
VkImage image;
|
||||||
VkImageLayout image_layout;
|
VkImageLayout image_layout;
|
||||||
|
VkImageView view;
|
||||||
GstVulkanMemory *vk_mem;
|
GstVulkanMemory *vk_mem;
|
||||||
|
|
||||||
VkImageCreateInfo create_info;
|
VkImageCreateInfo create_info;
|
||||||
|
|
Loading…
Reference in a new issue