Matthew Waters
a7a70ca7b6
vulkan/fullscreenquad: add get_queue()
...
Allows bindings to not poke at the instance struct.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6987 >
2024-06-03 00:06:18 +10:00
Matthew Waters
5e182c911c
vulkan/fullscreenquad: mark set_info GstVideoInfo as const
...
It's not modified by the function.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6987 >
2024-06-03 00:06:18 +10:00
Matthew Waters
346df4cb3f
vulkan: support not having glslc available for building vulkan plugin
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6980 >
2024-06-01 12:41:49 +00:00
Stéphane Cerveau
7bbf5fd801
vkutils: do not forget to clear context in case of error
...
The context is leaking in case of a failing instance open.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6975 >
2024-05-31 14:44:09 +00:00
Stéphane Cerveau
c3f3fd7351
vkerror: free the error string after usage
...
g_set_error already used the var string, can clear it now.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6975 >
2024-05-31 14:44:09 +00:00
Víctor Manuel Jáquez Leal
e913b4870a
vkformat: try UNORM format first and decouple them from colorimetry
...
From the spec (chapter 34, v1.3.283):
````
UNORM: the components are unsigned normalized values in the range [0, 1]
SRGB: the R, G and B components are unsigned normalized value that represent
values using sRGB nonlinear encoding, while the A component (if one
exists) is a regular unsigned normalized value
```
The difference is the storage encoding, the first one is aimed for image
transfers, while the second is for shaders, mostly in the swapchain stage in the
pipeline, and it's done automatically if needed [1].
As far as I have checked, other frameworks (FFmpeg, GTK+), when import or export
images from/to Vulkan, use exclusively UNORM formats, while SRGB formats are
ignored.
My conclusion is that Vulkan formats are related on how bits are stored in
memory rather their transfer functions (colorimetry).
This patch does two interrelated changes:
1. It swaps certain color format maps to try first, in both
gst_vulkan_format_from_video_info() and gst_vulkan_format_from_video_info_2(),
the UNORM formats, when comparing its usage, and later check for SRGB.
2. It removes the code that check for colorimetry in
gst_vulkan_format_from_video_info_2(), since it not storage related.
1. https://community.khronos.org/t/noob-difference-between-unorm-and-srgb/106132/7
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6797 >
2024-05-23 17:41:30 +00:00
Stéphane Cerveau
73c64e8182
tests: add vulkan H.265 encode
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6676 >
2024-05-03 19:40:17 +00:00
Stéphane Cerveau
5320514076
tests: add Vulkan H.264 encode
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6676 >
2024-05-03 19:40:16 +00:00
Víctor Manuel Jáquez Leal
1b1593568f
vkencoder: add gstvkencoder helper object
...
Add a gstvkencoder class to support Vulkan encoder such as H26X
formats.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6676 >
2024-05-03 19:40:16 +00:00
Stéphane Cerveau
ddb9b9d9ca
vkdecoder: change dstmask in decoder frame barrier
...
Use of VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT instead of
specific VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
Fix for VUID-vkCmdPipelineBarrier2-srcStageMask-03849
pDependencyInfo->pImageMemoryBarriers[0].srcStageMask
(VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR) is not compatible with
the queue family properties
(VK_QUEUE_GRAPHICS_BIT|VK_QUEUE_COMPUTE_BIT|VK_QUEUE_TRANSFER_BIT|
VK_QUEUE_SPARSE_BINDING_BIT|VK_QUEUE_PROTECTED_BIT) of this
command buffer. The Vulkan spec states: The srcStageMask member
of any element of the pMemoryBarriers, pBufferMemoryBarriers, or
pImageMemoryBarriers members of pDependencyInfo must only
include pipeline stages valid for the queue family that was
used to create the command pool that commandBuffer was allocated
from (
https://www.khronos.org/registry/vulkan/specs/1.3-extensions/
html/vkspec.html#VUID-vkCmdPipelineBarrier2-srcStageMask-03849)
The frame barrier should use a compatible srcStageMask for all
the queues.
Remove reset_pipeline_stage_mask as it is redundant
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6780 >
2024-05-02 18:07:25 +00:00
Víctor Manuel Jáquez Leal
1f080391ed
vulkan: replace gst_vulkan_queue_create_decoder() with gst_vulkan_decoder_new_from_queue()
...
The purpose of this refactor is to hide decoding code from public API.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6723 >
2024-04-26 16:24:22 +00:00
Víctor Manuel Jáquez Leal
18c32272bd
vulkan: conceal unused decoder symbols
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6723 >
2024-04-26 16:24:22 +00:00
Víctor Manuel Jáquez Leal
668b395a38
vulkan: conceal decoder from public API
...
Since we don't want to expose video decoding API outside of GStreamer, the
header is removed from installation and both source files are renamed as
-private.
The header must remain in gst-libs because is referred by GstVulkanQueue,
which's the decoder factory.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6723 >
2024-04-26 16:24:22 +00:00
Víctor Manuel Jáquez Leal
d2c8593b2e
vkswapper: choose color space according with format
...
The swapper surfaces contains the color space for each supported format. Instead
of hard coding the color space, it returns the value associated with the
negotiated vulkan format.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6725 >
2024-04-24 13:53:18 +00:00
Chris Spencer
c6a3b2ab85
vkbufferpool: correct usage flags type
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6514 >
2024-04-03 09:36:44 +00:00
Víctor Manuel Jáquez Leal
b18483a563
vulkan: sink references at instantiation
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6398 >
2024-04-03 08:48:25 +00:00
Chris Spencer
1032d58187
vkmemory: invalidate non-coherent memory when mapping for read
...
Mapping non-coherent memory does not implicitly invalidate the host caches.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6310 >
2024-03-11 01:55:44 +00:00
Chris Spencer
9412565221
vulkan/operation: use timeline semaphore fallback if sync2 not supported
...
gst_vulkan_operation_add_dependency_frame does not fall back to the
timeline semaphore implementation if VK_KHR_synchronization2 is compiled
in, but not supported by the driver.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6309 >
2024-03-11 00:58:40 +00:00
Chris Spencer
7701e9ffeb
vulkan/operation: add missing unlock
...
gst_vulkan_operation_add_dependency_frame does not release its lock if
support for VK_KHR_timeline_semaphore/VK_KHR_synchronization2 is compiled
in, but not supported by the driver.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6309 >
2024-03-11 00:58:40 +00:00
Víctor Manuel Jáquez Leal
2011dec249
vulkan/decoder: fix documentation generation
...
GstVulkanDecoderParameters is an union, not a struct, and that isn't handled by
hotdoc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089 >
2024-02-10 17:17:23 +00:00
Víctor Manuel Jáquez Leal
f0c5a853a6
vulkan/decoder: don't initialize function table once
...
Since it has to be associated with the device and it gets destroyed when the
decoder is freed.
Now it's created when the decoder starts and it's flagged.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089 >
2024-02-10 17:17:23 +00:00
Víctor Manuel Jáquez Leal
c760c72f7a
vkformat: fetch correctly feature flags2
...
Feature flags2 are fetch through VkFormatProperties3KHR and needs more guards
checking.
Moved out all the feature flags fetching to another function for clarity.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6014 >
2024-01-30 12:57:41 +00:00
Víctor Manuel Jáquez Leal
c24b47ecee
vkformat: use VK_KHR_get_physical_device_properties2 to guard
...
and VK_KHR_format_feature_flags2 rather than a meaningless version handling.
Also the patch brings back the usage of features2 for video extensions, use KHR
version to support the guarded symbols.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6014 >
2024-01-30 12:57:41 +00:00
Víctor Manuel Jáquez Leal
394aaa6a59
vulkan: early return if gst_buffer_pool_set_config() fails
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6013 >
2024-01-30 11:58:04 +00:00
Nicolas Dufresne
0b38cb2320
vulkan: Fix clang compiler warning
...
clang does not like the array index assignment without the `=` sign in
it. This is a gnu extension I believe, and adding the sign is proper.
This fixes the following two warnings:
```
../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideo-private.c:32:40:
warning: use of GNU 'missing =' extension in designator [-Wgnu-designator]
[GST_VK_VIDEO_EXTENSION_DECODE_H264] {
^
=
../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideo-private.c:36:40:
warning: use of GNU 'missing =' extension in designator [-Wgnu-designator]
[GST_VK_VIDEO_EXTENSION_DECODE_H265] {
^
=
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5996 >
2024-01-26 16:42:30 +00:00
Stéphane Cerveau
dd6fca1d02
vulkan video: add GST_VK_VIDEO_EXTENSIONS enum
...
To avoid using mysterious value, use an enum to
show the valid value in _vk_codec_extensions
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5922 >
2024-01-24 17:00:47 +00:00
Matthew Waters
f50b43c83b
vulkan/format: also get features in the fallback case
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5576 >
2024-01-24 13:54:41 +00:00
Matthew Waters
634fc913a6
vulkan/format: don't assign an uneeded boolean
...
We don't actually need the basics_primary/secondary boolean. The
returned format is decided by the requested usage with fallbacks as
necessary.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5576 >
2024-01-24 13:54:41 +00:00
Matthew Waters
420548a6c6
vulkan/format: there is no current need to use the 64-bit feature flags
...
All of our feature flags are currently covered by the first
VkFormatFeatureFlag enum so far.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5576 >
2024-01-24 13:54:41 +00:00
Matthew Waters
080b25cbfe
vulkan/format: correct fallback features in from_video_info_2
...
The features were not actually used and were written into a boolean
value.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5576 >
2024-01-24 13:54:41 +00:00
Chris Spencer
2388932767
vkmemory: don't map memory more than once
...
vkMapMemory may not be called on a memory object that is already
host-mapped. If the gstreamer memory object is mapped more than once then
reuse the existing Vulkan mapping.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5917 >
2024-01-16 17:44:48 +01:00
Chris Spencer
865227b750
vkimagebufferpool: allow specifying initial image layout
...
The pool currently defaults to performing a layout transition to
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, with some special exceptions for
video usages. This may not be a legal transition depending on the usage.
Provide an API to explicitly control the initial image layout.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5881 >
2024-01-13 05:54:00 +00:00
Scott Moreau
f0d15f335d
gst-launch: accept option to set program name
...
The option --prog-name="PROGRAM-NAME" can be passed to set the program name.
The program name is used by gtk and gstreamer to set the class or app-id.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5263 >
2024-01-12 17:11:11 +00:00
Stéphane Cerveau
476c7efcb7
vulkan: decoder: create union for profile usage
...
As a profile can include a VkVideoDecodeUsageInfoKHR
or VkVideoEncodeUsageInfoKHR, use union to separate the both.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5701 >
2024-01-10 17:15:12 +00:00
Stéphane Cerveau
15b719d7f6
vkbufferpool: add support for video encoded buffers
...
Add support for non video raw buffers to allocate memory
such as in encoded content scenario.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5645 >
2023-11-21 19:16:37 +00:00
Stéphane Cerveau
c6a5437e0d
vkbufferpool: allow to set allocation params
...
Add the possibility to change the vulkan usage and mem properties from
external source.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5645 >
2023-11-21 19:16:37 +00:00
Stéphane Cerveau
159f24c07f
vulkan: use gst_vulkan_device_select_queue
...
Use gst_vulkan_device_select_queue api to retrieve a valid queue
in vkupload, vkdownload, vkimagebufferpool, and vkvideofilter
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5656 >
2023-11-21 13:51:21 +00:00
Stéphane Cerveau
74c6298eb7
vkdevice: select queue with expected flags
...
Allow to select a queue with the given flags
such as compute bit etc from a given device.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5656 >
2023-11-21 13:51:21 +00:00
Víctor Manuel Jáquez Leal
5bece78ca2
vkqueue: add decoder factory
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:20 +00:00
Víctor Manuel Jáquez Leal
4f475732bd
vkdecoder: add gstvkdecoder helper object
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:20 +00:00
Víctor Manuel Jáquez Leal
8ee3ec105c
vkvideo-private: video structures and session handle
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:20 +00:00
Stéphane Cerveau
96daac8ac7
vkvideoutils: add GstVulkanVideoOperation enum
...
To differentiate a video/x-h264 caps use with a decoder or an encoder
and get the correct video profile, the API expects an enum
GstVulkanVideoOperation to handle this difference.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:20 +00:00
Víctor Manuel Jáquez Leal
8ee0f04d8d
vkvideoutils: add dec postfix to profiles
...
So it the future don't collide with encoding profiles.
Original-patch-by: Stéphane Cerveau <scerveau@igalia.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:20 +00:00
Víctor Manuel Jáquez Leal
bf7a01f3fd
vkvideoutils: add video capabilities structure
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:19 +00:00
Víctor Manuel Jáquez Leal
8023e3c19a
vkvideoutils: add gst_vulkan_video_profile_is_equal()
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:19 +00:00
Víctor Manuel Jáquez Leal
13d78652b7
vkvideoutils: add gst_vulkan_video_profile_is_valid()
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:19 +00:00
Víctor Manuel Jáquez Leal
f896e2a347
vkvideoutils: add VkVideoDecodeUsageInfoKHR in profile
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:19 +00:00
Víctor Manuel Jáquez Leal
fd1b1332b7
vkvideoutils: if unknown codec nullify pNext
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:19 +00:00
Víctor Manuel Jáquez Leal
d5036e4429
vkvideoutils: mark as private members of profile structure
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:19 +00:00
Víctor Manuel Jáquez Leal
e3054056ff
vkimagebufferpool: set image's number of layers
...
Handle the image's number of layers as configuration so it can be set by the
user, still isn't exposed as function since it's very niche.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:19 +00:00
Stéphane Cerveau
d52d50570e
vkmemory: avoid the property flag check
...
During the video session memory allocation, the property flags can
be different from the expected ones, so do not expect all the
property flags and test it with G_MAXUINT32
It's failing with driver 525.47.26 and NVidia HW NVIDIA GeForce
RTX 3050 and 2060
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850 >
2023-11-20 13:32:19 +00:00
Víctor Manuel Jáquez Leal
43ce583460
vulkan/operation: wait for pending objects at reset
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5591 >
2023-11-10 16:36:44 +01:00
Víctor Manuel Jáquez Leal
0296c8a53a
vulkan/operation: get query only if a operation is submitted
...
To avoid a validation error if get query is performed before.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5591 >
2023-11-10 16:36:44 +01:00
Víctor Manuel Jáquez Leal
3464710bf0
vulkan/operation: remove stored fences at the end
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5591 >
2023-11-10 16:36:44 +01:00
Víctor Manuel Jáquez Leal
405ae91ed7
vulkan/operation: don't fail if extension isn't available
...
gst_vulkan_operation_add_dependency_frame() is a noop if the required extensions
aren't available.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5591 >
2023-11-10 16:36:44 +01:00
Matthew Waters
d20d94cc48
vkformat: also use the correct srgb vs unorm when using older
...
gst_video_info_from_video_info()
Fixes sRGB colorspace chosen by GstVulkanSwapper and therefore used for
display.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5316 >
2023-10-27 09:13:18 +00:00
Víctor Manuel Jáquez Leal
a2f875251f
vkimagebufferpool: use GstVulkanOperation
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5079 >
2023-10-26 07:26:23 +00:00
Víctor Manuel Jáquez Leal
265f1274dc
vkoperation: synchronization helper object
...
An operation is an arbitrary amount of work to be executed on the host, a
device, or an external entity such as a presentation engine.
The purpose of this object is to help on the operation's synchronization
through declaring explicit execution dependencies, and memory dependencies
between two sets of operations defined by the command’s two synchronization
scopes.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5079 >
2023-10-26 07:26:22 +00:00
Víctor Manuel Jáquez Leal
c83c508c5e
vulkan: add a timeline semaphore per image
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5079 >
2023-10-26 07:26:22 +00:00
Víctor Manuel Jáquez Leal
964aec54b4
vkbarrier: Use guint64 for VkFlags and VkFlags2
...
While VkPipelineStageFlags is an enum (arguably backed as uint32 in 32bit
platforms), VkPipelineStageFlags2 is a redefinition of guint64; likewise for
VkAccessFlags and VkAccessFlags2.
This patch types both members in GstVulkanBarrierMemoryInfo as guint64 for
compatibility, so it could be used with or without synchronization2 vulkan
extension.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5079 >
2023-10-26 07:26:22 +00:00
Víctor Manuel Jáquez Leal
8809ce5648
vkmemory: unref queue in barriers
...
Queue might be assigned for queue transfers, so we need to unref it if the
memory has been assigned to a specific queue.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5079 >
2023-10-26 07:26:22 +00:00
Víctor Manuel Jáquez Leal
5acd6c23b8
vkdevice: use macro VK_KHR_synchronization2 as guard
...
Instead of (defined(VK_VERSION_1_3) || (defined(VK_VERSION_1_2) && VK_HEADER_VERSION >= 170))
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5079 >
2023-10-26 07:26:22 +00:00
Matthew Waters
48ab457d79
vulkan/physical-device: don't assume that queue_family_ops is filled
...
On old enough vulkan (< 1.2), we will never retrieve the family operations and
will perform a NULL pointer dereference when dumping the queue family op
properties.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5547 >
2023-10-25 16:38:06 +11:00
Jordan Petridis
9f3b8c9366
vkwindow_xcb: Make the visible private field a guint
...
This field is used to store gbooleans (which are ints) but if it's
a :1 bit depth assigning ints to it changes it's value as the only
valid values are -1 and 0.
Make it a guint instead so the cast would be correct.
```
../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/xcb/gstvkwindow_xcb.c:151:25: error:
implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1
[-Werror,-Wsingle-bit-bitfield-constant-conversion]
window_xcb->visible = TRUE;
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5432 >
2023-10-23 10:43:52 +05:30
Víctor Manuel Jáquez Leal
b7ded81f7b
vkbufferimagepool: short circuit usage for decoding
...
NVIDIA & RADV drivers don't report decoding features for color format. Setting
requested usage to zero to short circuit validation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5288 >
2023-09-08 18:11:55 +02:00
Matthew Waters
9d79852890
vkformat: assume that unknown rgb transfer is sRGB
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5288 >
2023-09-08 16:09:33 +00:00
Matthew Waters
b82a402bf1
vkformat: also check configured usage flags
...
This does also mean that if the primary format fails this check, we need
to try the secondary format before returning an error
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2957
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5288 >
2023-09-08 16:09:33 +00:00
Matthew Waters
4d3b03e8e8
vkformat: invert srgb and multiplane && planes > 1 checks
...
The primary format for RGB includes sRGB transfer but was not actually
being used.
The !(no_multiplane && planes > 1) check for YUV resulted in those
formats never being used.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5288 >
2023-09-08 16:09:33 +00:00
Matthew Waters
8a9d630e3b
vkformat: FORMAT_FEATURE_COLOR_ATTACHMENT also includes INPUT_ATTACHMENT
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5288 >
2023-09-08 16:09:33 +00:00
Matthew Waters
6c534655d4
vkformat: reorder RGBA formats before RGBx formats
...
Fixes gst_vulkan_format_to_video_format to use the RGBA formats instead
of RGBx formats.
Fixes vulkansink exposing a RGBx/BGRx format instead of the more
relevant RGBA/BGRA formats
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5288 >
2023-09-08 16:09:33 +00:00
Stéphane Cerveau
c98f5c2bf4
vkvideoutils: fix memory leak in structure's string
...
Retrieve a const char* from structure for "chromat-format" and
avoid extra mem copy.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4904 >
2023-06-22 04:42:58 +00:00
Stéphane Cerveau
fc0ee45fb5
vkdevice: fix beta extensions symbol
...
Missing 's' to VK_ENABLE_BETA_EXTENSIONS
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4904 >
2023-06-22 04:42:58 +00:00
Stéphane Cerveau
c1149d60c1
vkphysicaldevice: fix leak with queue_family_query_props
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4904 >
2023-06-22 04:42:58 +00:00
Stéphane Cerveau
6920166af4
vulkan: fix C2099 error with VS2019
...
As VK_FORMAT_FEATURE_2_xxx are defined as static const variable, the
vscoce C compiler prevents the initialization of the vk_usage_map
structure with error "C2099: initializer is not a constant".
Init the structure separately.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4904 >
2023-06-22 04:42:58 +00:00
Víctor Manuel Jáquez Leal
06d793033d
vulkan/format: use basic features (v1) as fallback
...
if vkGetPhysicalDeviceFormatProperties2 isn't available.
This approach assumes that, for basic features flags symbols,
VkFormatFeatureFlagBits and VkFormatFeatureFlagBits2 are binary equivalent.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4746 >
2023-06-01 13:58:47 +00:00
Matthew Waters
0a74a967e3
vulkan/format: don't rely on vulkan header version for function availability
...
e.g. android will have update vulkan.h headers but old platforms will
not contain the function and will result in a link error.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4746 >
2023-06-01 13:58:47 +00:00
Víctor Manuel Jáquez Leal
8b75e5fb57
vkvideoutils: fix code-style
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4716 >
2023-05-26 10:08:27 +02:00
Víctor Manuel Jáquez Leal
365454790a
vkphysicaldevice: fetch queue family query result support
...
And merged in a single structure the queue family operations report.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4716 >
2023-05-26 10:08:27 +02:00
Víctor Manuel Jáquez Leal
e2a40c58bf
vkimagebufferpool: chain the correct structure
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4716 >
2023-05-26 09:45:07 +02:00
Víctor Manuel Jáquez Leal
e9414b9582
vkvideoutils: fix bug for chroma string comparison
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4716 >
2023-05-26 09:45:07 +02:00
Víctor Manuel Jáquez Leal
8670a023f1
vkimagebufferpool: prepare new allocated buffers
...
This means change initial memory undefined layout and access to the ones
required for their usage.
This is only used if VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME is available.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:30 +00:00
Víctor Manuel Jáquez Leal
e177080bec
vulkan: number of memories in buffer rather than number of planes
...
New vulkan formats don't match the number of planes with the number of memories
attached to the buffer. This patch changes the pattern of using planes for
traverse the memories with the number of attached memories.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
565fe3291e
vkutils: add gst_vulkan_get_or_create_image_view_with_info()
...
It's a generalization of the original gst_vulkan_get_or_create_image_view().
The reason for passing the whole VkImageViewCreateInfo structure rather than
just the missing fields, is because VkImageSubresourceRange and
VkComponentMapping can be different and those are most of VkImageViewCreateInfo.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
bb29b4dfec
vkdevice: enable device optional extensions
...
Enable before-hand what the user might use.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
d7bbcffe14
vkformat: add VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
b1321f78d3
vkswapper: use gst_vulkan_format_to_video_format()
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
d84926b60f
vkformat: add gst_vulkan_format_to_video_format()
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
ce7256e0d3
vulkan: use gst_vulkan_format_get_aspect()
...
In order to use it, without depending in a previous calling of
_create_info_from_args(), VkFormat as input parameter to
gst_vulkan_image_memory_init() was added.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
b8e908131d
vkformat: add gst_vulkan_format_get_aspect()
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
26d00ba0cc
vkimagebufferpool: fail if image cannot be allocated
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
d91c17264c
vkimagebufferpool: gst_vulkan_image_buffer_pool_config_set_decode_caps()
...
This is going to be used when the pool is used by a video decoder for
VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, since the frame allocation needs the
VkVideoProfileInfoKHR, and for that here GstCaps is used to wire it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
07271fc648
vkvideoutils: add gst_vulkan_video_profile_{to/from}_caps()
...
Add this new source file with utils for video profile mapping with GstCaps.
These method is used to pass this information along GStreamer.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
c7c5dedd7f
vkimagebufferpool: use gst_vulkan_image_memory_alloc_with_image_info()
...
As the pool will be only used for images with usage
VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR only one layer has to be allocated.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
83e73a2f59
vulkan: find memory type index with requirements
...
The specification says:
VUID-vkAllocateMemory-pAllocateInfo-01713
must pAllocateInfo->allocationSize be less than or equal to
VkPhysicalDeviceMemoryProperties::memoryHeaps[memindex].size where memindex =
VkPhysicalDeviceMemoryProperties::memoryTypes[pAllocateInfo->memoryTypeIndex].heapIndex
as returned by vkGetPhysicalDeviceMemoryProperties for the VkPhysicalDevice that
device was created from.
Though this can be catch by the validation layer, the requested frame size
depends on the use case so it's better to check this restriction by our code.
This patch also makes use of this new function to find memory type index,
and removes the unused function to find memory type index, which, as GstVulkan is
considered unstable, we can do it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
4dd0fd6797
vkimagebufferpool: use gst_vulkan_format_from_video_info_2()
...
To get the number of images and its Vulkan formats for the GStreamer format.
Also it gets the basic image usage by default if it's not defined. It fails if the
video format is not supported.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
35dbd9f92c
vkformat: add gst_vulkan_format_from_video_info_2()
...
The purpose of this function is to get more info about the mapped Vulkan format
from the GStreamer format, since they can be multiple Vulkan formats for one
GStreamer format.
Also a Vulkan format may have certain usage and aspects that must be verified.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
14dd6aac16
vkformat: move gst_vulkan_format_from_video_info()
...
Moved gst_vulkan_format_from_video_info() from gstvkimagememory to gstvkformat
in order to centralize the video format operations in a single source file.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
b1c166b53c
vkimagebufferpool: pass usage and memory properties
...
Pass, in config structure, usage and memory properties, assigning proper
defaults if they aren't set. This parameters are used in image memory
allocation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
7b62c26139
vkdevice: add gst_vulkan_device_queue_family_indices()
...
This method will return a GArray with all the queue family indices created by
the device when it's opened. This array will be used by VkImageCreateInfo to
allocate a new Vulkan image.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00
Víctor Manuel Jáquez Leal
ea2bd1882f
vkdevice: add programming parameters verification
...
To `gst_vulkan_device_foreach_queue()`.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4351 >
2023-05-19 04:26:29 +00:00