Matthew Waters
670d0a8e88
vulkan: remove the private struct from the public struct
...
Remove any references to CamelTypePrivate from the public CamelType
struct. They can be accessed as needed using
camel_type_get_instance_private().
2019-11-07 20:01:57 +00:00
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