Matthew Waters
32b3387ae6
vulkan: implement proper descriptor set handling
...
The major functionality gain this provides is proper reference counting
for a descriptor set. Overall this allows us to create descriptor sets
when they are needed (or reused from a cache) without violating any of
vulkan's object synchronisation requirements.
As there are a fixed number of sets available in a pool, the number of
descriptors in elements is currently hardcoded to 32. This can be extended
in a future change to create pools on the fly if that limit is ever overrun.
2019-11-07 20:01:57 +00:00
Matthew Waters
1c89096b4f
vulkan/fence: add always-signalled fence type
...
Allows a cleaner control flow when there is no fence available for use
with the trash list. An always signalled fence type will always return
TRUE for gst_vulkan_fence_is_signalled.
2019-11-07 20:01:57 +00:00
Matthew Waters
66244e9342
vulkanviewconvert: fix typo of output image view name
2019-11-07 20:01:57 +00:00
Matthew Waters
7a1bb3001a
vulkan: use VK_NULL_HANDLE in more places
...
Fixes compiler warnings on 32-bit platforms assigning a void * to a
64-bit integer value.
2019-11-07 20:01:57 +00:00
Matthew Waters
475a2b0acd
vulkan/image: use the full video info for returning vulkan formats
...
We may need some colorspace information for returning sRGB vs no sRGB.
2019-11-07 20:01:57 +00:00
Yeongjin Jeong
56333073a9
vulkan: Fix build error when gstvulkan is not installed
...
The following build error occurs:
vkdeviceprovider.h:30:10: fatal error: gst/vulkan/vulkan.h: No such file or directory
#include <gst/vulkan/vulkan.h>
^~~~~~~~~~~~~~~~~~~~~
2019-11-07 03:31:19 +00:00
Aaron Boxer
6d3429af34
documentation: fixed a heap o' typos
2019-11-05 09:11:25 -05:00
Matthew Waters
ecca6cbfd2
vulkanimage: move fence creation earlier
...
Fixes a critical:
GStreamer-CRITICAL **: 02:26:34.698: gst_mini_object_ref: assertion 'mini_object != NULL' failed
2019-10-28 07:22:45 +00:00
Matthew Waters
103112725c
vulkan: change to clamp to edge rather than clamp to border
...
clamp-to-border will return the border color which is typically black,
white or transparent. When linear filtering the edge pixels will
typeically be combined with the border color which is not typically what
we want. Especially when color converting, this removes a green box
around the edge when converting YUV->RGB.
2019-10-28 07:22:45 +00:00
Matthew Waters
34ff895040
vulkan: remove VkImageView from the memory
...
There can be multiple views per image for different subresource ranges
or planes in multi-planer images.
2019-09-25 11:11:02 +00:00
Matthew Waters
452bb72292
vkbuffer: remove buffer view from the memory
...
It's only really useful for texture buffers which we currently do not
use.
2019-09-25 11:11:02 +00:00
Matthew Waters
82e86573b8
vulkan: implement command buffer reuse
...
Using a similar design for reference counting as
GstBuffer/GstBufferPool.
2019-09-19 02:01:35 +00:00
Matthew Waters
2af2402880
vulkan: add device provider implementation
2019-09-17 13:02:44 +10:00
Matthew Waters
66ed62b794
vulkansink: attempt a context query for a device
2019-09-17 13:02:44 +10:00
Matthew Waters
5f76c84feb
vulkan: split physical device from logical device
2019-09-17 13:02:44 +10:00
Matthew Waters
407dab607f
vulkan: only pass the device/instance/display in to *_handle_*() functions
...
We don't need to change the pointer value in these functions.
2019-09-17 13:02:43 +10:00
Yeongjin Jeong
8bc5144020
vulkan: Don't dereference null pointer when printing error
...
When printing error message because the function failed, the GError variable
may not be used and it can be NULL.
2019-08-29 11:19:37 +00:00
Matthew Waters
d9248560e4
vulkancolorconvert: explicitly initalize swizzle arrays
...
Fixes uninitialized access of the indexed values larger than
the number of planes in the video format.
2019-08-28 10:34:39 +00:00
Matthew Waters
833c596bc5
vulkan/fullscreenrender: free the attachment descriptions
...
Fixes a memory leak of the attachment descriptions we receive from the
subclass.
2019-08-22 14:57:02 +10:00
Matthew Waters
837cdd598a
vulkanviewconvert: perform a renegotiation on multiview mode/flag property changes
...
Otherwise changing the output* properties have no effect until someone else
performs a renegotiation.
2019-08-22 11:51:01 +10:00
Matthew Waters
e5d574534c
shaders/view-convert: remove some debugging colours
...
Fixes left and right output modes.
2019-08-22 11:50:51 +10:00
Seungha Yang
6b6bb6b203
vulkan: Fix incompatible type build warning
...
Make declare/define a function consistent.
Note that GstBaseTransform::set_caps should return gboolean
Compiling C object subprojects/gst-plugins-bad/ext/vulkan/f3f9d6b@@gstvulkan@sha/vkviewconvert.c.obj.
../subprojects/gst-plugins-bad/ext/vulkan/vkviewconvert.c(644):
warning C4133: '=': incompatible types - from 'GstFlowReturn (__cdecl *)(GstBaseTransform *,GstCaps *,GstCaps *)'
to 'gboolean (__cdecl *)(GstBaseTransform *,GstCaps *,GstCaps *)'
2019-07-09 01:42:58 +00:00
Matthew Waters
014642e188
vulkan: add view converter element
2019-07-05 15:04:28 +10:00
Matthew Waters
6ebaf7276e
vulkan: fix output framebuffer creation size
...
We don't scale when color converting so there is no impact.
2019-07-05 10:47:45 +10:00
Matthew Waters
69af8a9360
vulkan: move swapper object to the gstvulkan library
...
Allows other sinks and/or user code to display to a VkSurface
2019-07-04 14:18:15 +10:00
Matthew Waters
b5256d94fc
vulkan: move trash list to library
2019-07-04 14:18:15 +10:00
Matthew Waters
ec9ea06591
vkswapper: support rescaling to the output size
2019-06-24 16:23:29 +10:00
Matthew Waters
35325fdffb
vksink: Don't take vulkan buffer's as input
2019-06-24 16:23:29 +10:00
Matthew Waters
dcff70d6bf
vulkan: remove unused downsample AYUV shader
2019-06-20 05:44:47 +00:00
Matthew Waters
d43fea06c5
vkcolorconvert: add support for RGB<->NV12
2019-06-20 01:41:56 +10:00
Matthew Waters
0cb416db11
vkbuffermemory: report requested size of the memory
...
Rather than using Vulkan's much larger aligned sizes. Fixes multi-planer
video with the GstVideoFrame API.
2019-06-20 01:41:56 +10:00
Matthew Waters
2180fbb498
vulkancolorconvert: support RGB <-> AYUV/YUY2/UYVY
2019-06-20 01:41:56 +10:00
Matthew Waters
dbf60a1738
vktrash: add mini_object_unref destroy function
2019-06-20 01:41:56 +10:00
Matthew Waters
b93de8b0d8
vkfullscreenrender: create descriptor sets later
...
The desciptor sets may be dependant on the caps
2019-06-20 01:41:56 +10:00
Matthew Waters
2e34dd891d
vulkan/shaders: change glslc compilation args based on configurations
...
Add depfile support so that modifying an #included glsl snippet
rebuilds all the dependant shaders.
2019-06-20 01:41:56 +10:00
Matthew Waters
5363b30f6c
vulkan: add a color conversion element
...
Currently converts between all 4-component RGBA/RGBx formats.
2019-06-20 01:41:56 +10:00
Matthew Waters
31728880fe
vkupload: Also implement copying non vulkan memory into vulkan buffers
...
The only way we can upload things is through our memory so any
non-vulkan memory that appears must be copied into our memory.
2019-06-20 01:41:56 +10:00
Matthew Waters
3fef510c48
vulkan: add download element
...
Currently only downloads images into a host-visible buffer and
synchronises immediately.
2019-06-20 01:41:56 +10:00
Matthew Waters
dc0c9dea7f
vulkan/identity: Split out most rendering code to a base class
...
A simple base class that renders a 2d fullscreen quad parallel to the
screen surface inside the view frustum.
2019-06-20 01:41:56 +10:00
Matthew Waters
773e914f48
vkupload: fix a structure sType
2019-06-20 01:41:56 +10:00
Matthew Waters
db617a98ad
vksink: Retrieve vulkan queue earlier
...
Allows using the swapper's queue over upstream's queue. The swapper
will check for the necessary presentation support that upstream may not
consider.
2019-06-20 01:41:56 +10:00
Matthew Waters
f33310df56
vkupload: remove debugging error log
2019-06-04 09:03:44 +00:00
Matthew Waters
ac09f88eb9
vulkan: implement the correct memory barriers necessary
...
Vulkan validation layers are finally silent!
2019-06-04 09:03:44 +00:00
Matthew Waters
1230a6c723
vulkan: remove uneeded buffer inheritence information
...
buffer inheritence informationi is only required for secondary command
buffers which we are not creating
2019-06-04 09:03:44 +00:00
Matthew Waters
9593e4e8bb
vulkan: add a new image copying element
...
Copies using the graphics pipeline, an input image and renders to an
output image.
2019-06-04 09:03:44 +00:00
Matthew Waters
80cbbb319d
vkupload: add raw->vulkanimage uploader
2019-06-04 09:03:44 +00:00
Matthew Waters
ca38c2f25e
vktrash: add more destruction of vulkan types
2019-06-04 09:03:44 +00:00
Matthew Waters
d61e771c37
vulkan: use c99 designated initializers where possible
...
Makes the code much easier to read and allows removing our terrible
macros for structure initialization.
2019-06-04 09:03:44 +00:00
Matthew Waters
b02493091b
vkswapper: support displaying memory:VulkanImage
2019-06-04 09:03:44 +00:00
Matthew Waters
673d775df0
vkupload: implement buffer to image uploader
2019-06-04 09:03:44 +00:00