Commit graph

114 commits

Author SHA1 Message Date
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
212b313e29 vulkan: add handle type for arbitrary vulkan handles
Serve two purposes:
1. refcounting of vulkan handles with associated destruction.  When
   combined with the trash list, the user can ensure destruction at
   the correct time according to the vulkan rules.
2. avoids polluting our API with 32-bit vs 64-bit integer/pointers
   differences as exposed through the vulkan API.  on 32-bit, vulkan
   non-dispatchable handles are 64-bit integers and on 64-bit, they
   are pointers.
2019-11-07 20:01:57 +00:00
Matthew Waters
f738c1f138 vulkan: fix non-dispatchable handles on 32-bit platforms
non-dispatchable handles are 64-bit integers on 32-bit platforms
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
116549b561 vulkan: use the provided VKAPI_ATTR for the debug callback
Ensures that we get the calling convention correct for the platform we
are using.
2019-11-07 20:01:57 +00:00
Matthew Waters
a2aa17278a vulkan: dump surface information 2019-11-07 20:01:57 +00:00
Matthew Waters
b55134a4dd vulkan: print criticals/warnings for vulkan errors/warnings
Simplifies finding the erronous cases in using the Vulkan API
incorrectly.
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
Niels De Graef
d8f61515d8 Don't pass default GLib marshallers for signals
By passing NULL to `g_signal_new` instead of a marshaller, GLib will
actually internally optimize the signal (if the marshaller is available
in GLib itself) by also setting the valist marshaller. This makes the
signal emission a bit more performant than the regular marshalling,
which still needs to box into `GValue` and call libffi in case of a
generic marshaller.

Note that for custom marshallers, one would use
`g_signal_set_va_marshaller()` with the valist marshaller instead.
2019-11-06 14:27:46 +00:00
Aaron Boxer
6d3429af34 documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
Tim-Philipp Müller
f218ec2794 Remove autotools build system 2019-10-14 13:54:27 +01:00
Seungha Yang
1e38255c97 vulkan: Fix build on Windows
* Fix meson build script for Windows. Since the Vulkan dependency
object was declared by us in case of Windows, the dependency object
shouldn't be used for finding header

* Fix build error by including Windows specific header
gstvkdisplay.c(563): error C2065: 'VK_KHR_WIN32_SURFACE_EXTENSION_NAME': undeclared identifier
2019-09-25 22:14:40 +09: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
5165f2509b build/vulkan: fix copy-paste error in gstvkconfig.h 2019-09-25 11:11:02 +00:00
Matthew Waters
a03d0a2638 vulkan: remove the winsys-specific headers from gst/vulkan/vulkan.h
Allows not having wayland, xcb, Cocoa, UIKit, windows.h included in the
public GstVulkan API.
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
5f76c84feb vulkan: split physical device from logical device 2019-09-17 13:02:44 +10:00
Matthew Waters
863e785770 vulkan: expose various flags to string methods 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
Matthew Waters
cd28c77413 vulkan/window/ios: fix race on window startup
1. The iOS create_surface implementation needs to call out to the main
thread to create the window (UIKit requirement)
2. get_surface() can be called and will attempt to create the VkSurface
from an invalid view/layer.

Also pass the layer for MoltenVK so we don't get pesky 'UIView function
not called on main thread' warnings.
2019-09-16 03:15:39 +00:00
Matthew Waters
656a0cde84 vulkan: create the macos/ios-specific displays 2019-09-16 03:15:39 +00:00
Matthew Waters
96b2413616 vulkan: install public gstvkdebug.h header 2019-09-16 03:15:39 +00:00
Matthew Waters
08b53ca456 vulkan: fix build with older API headers
The protected memory flags were only added later as was the
multi-instance flag.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1081
2019-09-11 23:59:53 +00:00
Matthew Waters
2b7050120e vulkan: dump most of the device information
Dump anything that can be queried using the physical device like features,
limits, queue properties, memory properties.
2019-09-11 20:22:56 +10:00
Yeongjin Jeong
fdab54611b vulkan: Fix some confusing typos
Seems to have been copy pasted from around gl element
2019-08-29 11:19:37 +00:00
Yeongjin Jeong
94671be428 vulkan/xcb: Don't try to create xcb window with non-xcb display
Non-xcb display does not have a xcb_connection and trying
to create xcb window with wild pointer can cause segfault.
2019-08-29 11:19:37 +00:00
Matthew Waters
87311d404e vulkan/swapper: add a couple of missing g_clear_error()'s 2019-08-28 10:34:39 +00:00
Matthew Waters
542af25eb1 vulkan/build: conditionally depend on Vulkan-1.0.gir
Vulkan-1.0.gir is new in gobject-introspection >= 1.61.1
2019-08-28 10:34:39 +00:00
Matthew Waters
c237c8de6a vulkandisplay: silence an unused but set error with no enable winsys implementations 2019-08-28 10:34:39 +00:00
Matthew Waters
09883b6a6b vulkan/swapper: check queue present return later
During resizes, the VkQueuePresent can return OUT_OF_DATE and if a buffer
is displayed returning OUT_OF_DATE it would error out and stop the pipeline.

We already have a explicit check for OUT_OF_DATE and the same general
error check in the statements following so just use that code.
2019-08-28 10:34:39 +00:00
Matthew Waters
d1f8f7436d vulkan/swapper: destroy the surface in finalize
Fixes a leak of the VkSurface object.
2019-08-28 10:34:39 +00:00
Matthew Waters
cac1487479 vulkan/swapper: set some values to NULL in error conditions
So that they are not double free()-ed.
2019-08-28 10:34:39 +00:00
Matthew Waters
be9c9e44f1 vulkan/error: add the error value in hex and decimal
Provides more information for what may be an 'Unknown' error.
2019-08-28 10:34:39 +00:00
Matthew Waters
5ab92e05d8 vulkanswapper: disconnect window signals before any internal resources
Otherwise, it's racy whether the necessary resources are available in
the signal callbacks on destruction.
2019-08-28 10:34:39 +00:00
Matthew Waters
b43651cf99 vulkandisplay: Also free the GSource
NULL checking the main_context does not help as we've just destroyed the
GMainContext and set that field to NULL, not to mention it's unnecessary.

Fixes a leak of display's GSource.
2019-08-22 17:28:19 +10:00
Matthew Waters
1b7e83c584 vulkandisplay: free the list of windows on destruction
They may not have had an explicit removal from the subclass.
2019-08-22 17:02:07 +10:00
Matthew Waters
fc9f047885 vulkandisplay: fix use-after-free with removal of window
g_list_delete_link() free()'s the list node so any access after that is
a use-after-free.
2019-08-22 14:55:40 +10:00
Matthew Waters
e83df1759d vulkan/xcb: display->windows is a list of allocated GWeakRef
Don't access them as plain GstVulkanWindow objects.
2019-08-22 14:54:30 +10:00
Matthew Waters
db157428ee vulkan/ios: keep track of surface changes 2019-08-14 13:45:31 +10:00
Matthew Waters
c8614bf4da vulkan/ios: initialize the frame to the parent's 2019-08-14 13:45:31 +10:00
Yeongjin Jeong
68057cee98 vulkan: Fix GstMemory leaks
Allocated GstMemory should be freed with g_free()
2019-08-06 07:44:05 +00:00
Matthew Waters
d916cad886 vulkan: add a couple of headers to the install list 2019-08-05 11:32:59 +10:00
Matthew Waters
58f203844d vulkan/window: add property for the parent display 2019-07-05 16:20:05 +10:00
Matthew Waters
fda9b57dbe vulkan/device: add property for the parent instance 2019-07-05 16:13:13 +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
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
bbdb2f3f17 vulkan: add some information on vulkan formats 2019-06-20 01:41:56 +10:00
Matthew Waters
2dcdaaf7cb vulkan: ensure initialization of a couple of debug categories
Needed when some of the context querying functions can be called before
an instance has been created.
2019-06-20 01:41:56 +10:00
Seungha Yang
7b1b3327a0 vulkan: Add support WIN32 for Windows
It's almost a fork of glwindow_win32 implementation.
To build on Windows, Vulkan SDK (at https://vulkan.lunarg.com/sdk/home)
and VK_SDK_PATH environment are required. Note that VK_SDK_PATH environment
setting is a part of the SDK installation.
2019-06-13 04:55:15 +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
ae13e66639 vkmemory: fix allocation of sizes less than the alignment
Avoids allocating a 0-sized device memory which is invalid vulkan usage
2019-06-04 09:03:44 +00:00
Matthew Waters
0efd559950 vk*pool: expand usage hints to cover use in a renderpass 2019-06-04 09:03:44 +00:00
Matthew Waters
25a970f9d5 vkformat: fix format conversion for matching vulkan formats
Other formats still need a swizzle or conversion.
2019-06-04 09:03:44 +00:00
Matthew Waters
5478d39900 vkbuffermemory: bufferview's are only for texture-like memory 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
673d775df0 vkupload: implement buffer to image uploader 2019-06-04 09:03:44 +00:00
Matthew Waters
c568d1a673 vkqueue: unly unref the context query if it succeeds 2019-06-04 09:03:44 +00:00
Matthew Waters
70fda3ff78 vulkan: large docs update 2019-06-04 09:03:44 +00:00
Matthew Waters
32d217a9df vulkan: add a command pool object for tracking 2019-06-04 09:03:44 +00:00
Matthew Waters
25dd3b32e5 vulkan: make a gstvulkan library out of the existing API 2019-06-04 09:03:44 +00:00