Commit graph

184 commits

Author SHA1 Message Date
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
Matthew Waters
f351f3a759 vulkansink: Respond to queue queries 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
2d0cab20c0 vkswapper: don't output duplicate formats 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
Matthew Waters
8def3b3743 vkbufferpool: Fix multiplaner allocations
Use the plane width/height and the sizes required by vulkan

Fixes allocation of:
videotestsrc ! video/x-raw,format=I420 ! vulkanupload ! fakesink
2019-06-04 09:03:44 +00:00
Matthew Waters
268dfcaad9 vk*memory: explicitly error out for driver NPOT alignment 2019-06-04 09:03:44 +00:00
Matthew Waters
0526310a95 vulkan/image: initialize the requirements struct before using it 2019-06-04 09:03:44 +00:00
Matthew Waters
7ee28e2e4b vulkan: don't require every element to have a display
Only sink elements really care about a valid display
2019-06-04 09:03:44 +00:00
Matthew Waters
eb0f7f3279 vulkan: remove unused X11 window system references
We use XCB instead
2019-06-04 09:03:44 +00:00
Matthew Waters
873add374a vulkan: remove unused layer enablement
This is possible now via the vulkan loader
2019-06-04 09:03:44 +00:00
Thibault Saunier
47a49f3381 docs: Build documentation with hotdoc 2019-05-13 17:00:00 -04:00
Matthew Waters
2e442b801b vulkan: Add iOS window implementation 2019-04-08 09:26:20 +00:00
Matthew Waters
012d6b1d98 vulkan: Add Cocoa window implementation 2019-04-08 09:26:20 +00:00
Matthew Waters
b9be6b318e vulkan: make the debug extension optional
i.e. don't fail if it's not available
2019-04-08 09:26:20 +00:00
Tim-Philipp Müller
054dc5282d vulkan: fix some compiler warnings in gnu89 mode
for loop variable initialization and conflicting types for i.
2019-03-22 23:39:04 +00:00
Tim-Philipp Müller
ecb7049d7e vulkan: fix some leaks
Fix vk_instance leak when state change fails like in
generic/states unit test.
2019-03-08 01:18:39 +00:00
Nirbheek Chauhan
b55dfb5313 Add feature options for almost all plugins
The only plugins remaining are those that haven't been ported to Meson
yet, and msdk. Also, the tests are still automagic.

https://bugzilla.gnome.org/show_bug.cgi?id=795107
2018-07-27 19:04:38 +05:30
Tim-Philipp Müller
a862c0aa85 vulkan: Update for g_type_class_add_private() deprecation in recent GLib 2018-06-24 01:25:04 +02:00
Matthew Waters
52e3db3371 vulkaninstance: add missing precondition to _open() 2018-06-13 20:23:22 +10:00
Xavier Claessens
83d0623293 Meson: Generate pc file for all plugins in bad
https://bugzilla.gnome.org/show_bug.cgi?id=794568
2018-04-25 11:08:09 +01:00
Matthew Waters
e5c4135e81 vulkanupload: actually loop over possible uploaders
Fix some funky control that wasn't working

CID #1417219
2018-02-08 16:55:43 +11:00
Edward Hervey
87dbd558cc vulkan: Fix out-of-bound read
G_N_ELEMENTS is the *number* of entries, not the maximum entry number

CID #1417215
2017-11-21 16:39:14 +01:00
Nicolas Dufresne
9b2e28d91d Request minimum buffer even if need_pool is FALSE
When tee is used, it will not request a pool, but still it wants to
know how many buffers are required.

https://bugzilla.gnome.org/show_bug.cgi?id=730758
2017-09-06 14:19:37 -04:00
Jussi Kukkonen
97b0085c48 vulkan: Use the generated version of vkconfig.h
Build fails in ext/vulkan/xcb and ext/vulkan/wayland when:
* building from tarball
* building out-of-tree
* Only one WSI integration (xcb or wayland) is enabled by configure.ac
This is because vkconfig.h from source directory gets used instead
of the generated one.

Add the correct build directory to "-I". Use angle bracket
include in vkapi.h so that it actually looks in the include search
path instead of defaulting to the same (source tree) directory.

https://bugzilla.gnome.org/show_bug.cgi?id=784539
2017-07-10 21:42:49 +10:00
Jussi Kukkonen
9c6d36984f vkdisplay: Use ifdef for platform specific defines
VK_KHR_*_SURFACE_EXTENSION_NAME are only available when corresponding
WSI is enabled.

https://bugzilla.gnome.org/show_bug.cgi?id=784539
2017-07-10 21:42:49 +10:00
Sebastian Dröge
634cd87c76 gst: Clear floating flag in constructor of all GstObject subclasses that are not owned by any parent
https://bugzilla.gnome.org/show_bug.cgi?id=743062
2017-05-17 10:40:23 +03:00
Nicolas Dufresne
4261692187 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 14:05:52 -04:00
Thibault Saunier
78022a6e0c docs: Port all docstring to gtk-doc markdown 2017-04-12 12:57:57 -03:00
Matthew Waters
d7bb3b5542 vkwindow: fix build error on i386
Vulkan handles are either pointers (64-bit) or 64-bit integer
handles (32-bit). Cast the type in failure cases.

vkwindow.c:229:561: error: return makes integer from pointer without a cast [-Werror=int-conversion]
vkwindow.c:231:194: error: return makes integer from pointer without a cast [-Werror=int-conversion]

https://bugzilla.gnome.org/show_bug.cgi?id=777979
2017-02-01 16:08:55 +11:00
Matthew Waters
f6b81a6125 vkimagememory: use the correct enum for RGB16/BGR16 formats
vkimagememory.c:64:14: warning: implicit conversion from enumeration type 'GstVideoGLTextureType' to different enumeration type 'VkFormat' (aka 'enum VkFormat') [-Wenum-conversion]
     return GST_VIDEO_GL_TEXTURE_TYPE_RGB16;

https://bugzilla.gnome.org/show_bug.cgi?id=777760
2017-01-26 19:52:07 +11:00
Sebastian Dröge
5c99f9cf37 gst: Don't declare variables inside the for loop header
This is a C99 feature.
2016-12-13 22:39:01 +02:00
Reynaldo H. Verdejo Pinochet
7c64ea4832 wayland: avoid prefix clash in combined pkg-config check
Adittionally, remove leftover WAYLAND_DRM_ include flags var

Fixes building of ext/wayland/* broken by dfd86de67a

Related to:

https://bugzilla.gnome.org/show_bug.cgi?id=773927
2016-11-18 10:41:16 -08:00
Arun Raghavan
723218aa63 vulkan: Add missing files to meson build 2016-11-04 09:51:45 +05:30
Matthew Waters
ea167c533e vkswapper: Use the trash list to free resources after they've been used
This allows further parallelism and removes a device wait from the end of
the render code.
2016-11-03 16:58:35 +11:00
Matthew Waters
0f800095e1 vulkan: add a trash object
This allows pushing the destruction of vulkan resources after the signalling
of an vulkan event.  The event facilitates knowing when a specific point in the
vulkan queue has been reached.  Only after the event has been signaled can
vulkan resources be freed and/or reused.
2016-11-03 16:58:35 +11:00
Matthew Waters
af8c4589ba vulkan: add a simple refcountable fence wrapper 2016-11-03 16:58:35 +11:00
Matthew Waters
4e3cb77fa8 vkdisplay: hold a weakref on the list of windows
It's possible that the window may have been destroyed when a winsys
event comes in for it.

Fixes an assertion in make -C tests/check generic/states.check
2016-10-05 12:20:52 +11:00
Matthew Waters
1b3de55eb1 vkdevice: only unref the gstcontext query if non-NULL
Fixes an assertion in make -C tests/check generic/states.check
2016-10-05 12:20:52 +11:00
Matthew Waters
a969048003 meson: add build files for vulkan 2016-09-09 16:55:23 +10:00
Matthew Waters
7b566b2964 vkupload: add video/x-raw to the VulkanBuffer uploader
Allows upstream elements that use our memory to passthrough without copying.
2016-09-08 16:14:41 +10:00
Matthew Waters
c110b62cf8 vkutils: set the last element of the layer array to NULL
g_strv* functions require this to not read off the end of the array.
2016-09-08 16:14:31 +10:00
Matthew Waters
864a0f453d vkswapper: check the error of the presentation for out of date
allows us to resize the swapchain correctly.
2016-05-13 15:24:35 +03:00
Matthew Waters
4810c7de70 vulkan/build: add the build directory to the list of includes
Fixes out of tree builds from tarballs.

https://bugzilla.gnome.org/show_bug.cgi?id=764758
2016-05-05 23:54:16 +10:00
Matthew Waters
77f6e253e1 vkswapper: fix up display synchronization
Use the semaphores in the correct place, before and after the submission for
acquiring and presenting the swapchain buffer.

Waiting on the fence that only signals the command buffer completion rather than
the completion of the presentation is racy with the destruction of the vulkan
buffers associated with that image.  Wait on the device to be idle instead after
presenting.
2016-05-05 23:54:16 +10:00
Matthew Waters
267588fb5e vkswapper: use gst_video_sink_center_rect for positioning the video
Don't try to reimplement it badly.
2016-05-05 23:54:16 +10:00
Matthew Waters
ab33030250 vulkan: prettify the various versions in the debug output
output human readable numbers.
2016-04-12 09:39:12 +10:00
Matthew Waters
65770c2af9 vulkan: add a wayland winsys implementation 2016-04-11 14:18:47 +10:00
Matthew Waters
e46bd98fe6 vulkan/xcb: getProcAddress winsys functions
There's no guarantee that they will always be exposed by the vulkan loader.
2016-04-11 14:18:47 +10:00
Matthew Waters
b76fcfd3f7 vkupload: copy necessary buffer metadata
timestamps, flags, etc
2016-04-11 14:18:47 +10:00
Matthew Waters
09808f9780 vkswapper: add necessary wait stages to the submission info 2016-04-08 21:46:50 +10:00
Matthew Waters
e4377e5c8f vkswapper: add srgb formats to our list of formats
intel returns them for their surface formats.
2016-04-08 21:46:50 +10:00
Matthew Waters
61d1b31136 vulkan: silence a validation warning filling out the image barrier 2016-04-08 21:46:50 +10:00
Matthew Waters
cecbcd704b vulkan: use the correct validation layer name
The threading validation layer has changed names.
2016-04-08 21:46:50 +10:00
Matthew Waters
761171b6d2 vulkan: only warn on not found layers
don't error out completely

https://bugzilla.gnome.org/show_bug.cgi?id=764545
2016-04-08 17:56:50 +10:00
Matthew Waters
b32ca4b550 vulkan: don't g_error when failing to find validation layers
Aborting the application is never a good thing to do for recoverable errors.

Just warn and error out instead.

https://bugzilla.gnome.org/show_bug.cgi?id=764545
2016-04-08 17:42:46 +10:00
Vineeth TM
8cdfb13658 bad: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763081
2016-03-24 14:56:51 +02:00
Thibault Saunier
b634f08ad6 vulkan: Minor string fix 2016-03-23 13:43:46 +01:00
Matthew Waters
dcfa7ee044 vulkan: VK_API_VERSION has been removed
In a stable release too, naughty.

Use VK_API_VERSION_1_0 instead

https://bugzilla.gnome.org/show_bug.cgi?id=764066
2016-03-23 22:15:35 +11:00
Sebastian Dröge
02fff22db5 vulkan: Ship missing headers with tarballs
https://bugzilla.gnome.org/show_bug.cgi?id=763877
2016-03-18 19:45:09 +02:00
Reynaldo H. Verdejo Pinochet
b077cd5510 vksink: fix spelling on failed _ensure_data() error message 2016-03-02 14:53:46 -08:00
Vineeth TM
55060ee6ce vkswapper/vkutils: Fix gerror memory leak
https://bugzilla.gnome.org/show_bug.cgi?id=762842
2016-02-29 09:50:25 +02:00
Vineeth TM
d258b06013 vkdevice: Fix duplicate assignment of queue variable
https://bugzilla.gnome.org/show_bug.cgi?id=762842
2016-02-29 09:50:25 +02:00
Vineeth TM
e821582c13 vksink: Fix GError memory leak
https://bugzilla.gnome.org/show_bug.cgi?id=762842
2016-02-29 09:50:25 +02:00
Matthew Waters
1cca847b2a vkdevice: add the necessary but arbitrary queue priority
Silences an error in the validation layers.
2016-02-17 01:13:43 +11:00
Matthew Waters
49430569da vkswapper: add the necessary call to check if the physical device supports the surface
Silences an error in the validation layers.
2016-02-17 01:13:43 +11:00
Matthew Waters
4ca3fdb955 vulkan: update to SDK 1.0.3.1 2016-02-17 01:13:43 +11:00
Matthew Waters
a3aa0d11ec vkswapper: iterate over the device queue's using the new iteration API 2016-02-17 01:13:43 +11:00
Matthew Waters
ca8f2b0826 vkdevice: add callback iteration over the device queue's 2016-02-17 01:13:43 +11:00
Matthew Waters
eb4419b49b vkqueue: add context helpers 2016-02-17 01:13:43 +11:00
Matthew Waters
5617b0904b vkutils: move object-specific context queries to their respective files
vkutils now just contains some utility functions to further simplify retrieving
multiple objects.
2016-02-17 01:13:43 +11:00
Matthew Waters
d1d8a365a2 vkdevice: remove unneeded error parameter from get_queue() 2016-02-17 01:13:43 +11:00
Matthew Waters
53f99ac804 vkupload: implement an uploader abstraction 2016-02-17 01:13:43 +11:00
Matthew Waters
57bd62f85f vkdisplay: unref the instance
fixes memory leak
2016-02-17 01:13:43 +11:00
Matthew Waters
7118f1f7e2 vulkan: chain up in finalize
They were missing in some cases
2016-02-17 01:13:43 +11:00
Matthew Waters
22172df413 vksink: only unref if the pointers are non-NULL 2016-02-17 01:13:43 +11:00
Matthew Waters
b5dce08d8f vkimagememory: free the managing struct on _free
fixes a memory leak
2016-02-17 01:13:43 +11:00
Matthew Waters
68b1e18123 vkdevice: perform a waitIdle before destroying the device 2016-02-17 01:13:43 +11:00
Matthew Waters
1c2aae08c5 Revert "vulkan: remove views from the memory objects."
This reverts commit 1ea817298ee4d5ef9b00f888f8ebe16a888b1150.
2016-02-17 01:13:43 +11:00
Matthew Waters
3c2710dc0f vulkanmemory: remove bind variants 2016-02-17 01:13:43 +11:00
Matthew Waters
4c0a169af9 vulkan: remove views from the memory objects.
They are not used and it's not possible to create the view before binding the
VkDeviceMemory object to them.
2016-02-17 01:13:43 +11:00
Matthew Waters
0309c9fbc7 vkswapper: alpha flags are now supported by LunarG's driver 2016-02-17 01:13:43 +11:00
Matthew Waters
0dd1154b73 vulkan: add a vulkanbuffer bufferpool 2016-02-17 01:13:43 +11:00
Matthew Waters
86e18d6b8f vulkan: add upload element 2016-02-17 01:13:43 +11:00
Matthew Waters
980213ee97 vkutils: fix assert inversion 2016-02-17 01:13:43 +11:00
Matthew Waters
43afa15fac vulkan: add caps feature names for the buffer and image memories 2016-02-17 01:13:43 +11:00