ilia-glushchenko / vulkancompositor Goto Github PK
View Code? Open in Web Editor NEWWIP Proof-of-Concept Vulkan window compositor
License: MIT License
WIP Proof-of-Concept Vulkan window compositor
License: MIT License
Related to #3
On unix GLFW has two variations chosen at compile time... So I don't think it's proper to include it as part of another application.
I've started working on a rewrite that focuses on implementing support for multiple builds.
Not only is surface creation/management different but input handling also needs to be modular. The API for input should be a message queue containing libinput biased messages. GLFW input handlers should post messages after converting then to a format that more closely resembles libinput events.
https://github.com/cheako/vkwayland
This is my first time using cpp and my first time using cmake. I actively use free software and don't have access to windows or binary video drivers.
Updated git repo 10/26 9PM CST.
Source: https://bitbucket.org/cheako/vkwayland/src/e1591d47825afe5be4e63091839855bff87e5350/
I've got vkwayland to the point where it's receiving image data from my test client weston-terminal. The data comes across as part of a shm pool FD, called a buffer. From what I can tell Vulkan is only able to work with an entier FD, exported from Vulkan... It needs the FD to represent a VkMemory object, not collection"s" of raw image data.
I've asked on IRC about extending Linux to support shm FDs as sources of image buffers from the drm/mesa team, but I doubt it'll be implemented unless there is significant proof that this is a bottleneck. I wonder if anyone saw it, I'll post something on the mailing list if I don't get a reply.
I'll look to see if I can find an ogl/vulkan wayland client to test with, where dmabuf would be used.
Here is a trace from the client.
[3179091.146] -> [email protected]_registry(new id wl_registry@2)
[3179091.204] -> [email protected](new id wl_callback@3)
[3179091.329] [email protected]_id(3)
[3179091.346] [email protected](1, "wl_shm", 1)
[3179091.375] -> [email protected](1, "wl_shm", 1, new id [unknown]@4)
[3179091.408] [email protected](2, "wl_compositor", 4)
[3179091.429] -> [email protected](2, "wl_compositor", 3, new id [unknown]@5)
[3179091.458] [email protected](3, "wl_output", 2)
[3179091.485] -> [email protected](3, "wl_output", 2, new id [unknown]@6)
[3179091.526] [email protected](4, "wl_data_device_manager", 1)
[3179091.556] -> [email protected](4, "wl_data_device_manager", 1, new id [unknown]@7)
[3179091.583] [email protected](5, "wl_subcompositor", 1)
[3179091.623] -> [email protected](5, "wl_subcompositor", 1, new id [unknown]@8)
[3179091.650] [email protected](6, "zxdg_shell_v6", 1)
[3179091.665] -> [email protected](6, "zxdg_shell_v6", 1, new id [unknown]@9)
[3179091.689] [email protected](7, "wl_seat", 1)
[3179091.712] -> [email protected](7, "wl_seat", 1, new id [unknown]@10)
[3179091.742] -> [email protected]_data_device(new id wl_data_device@11, wl_seat@10)
[3179091.762] -> [email protected]_surface(new id wl_surface@12)
[3179091.790] [email protected](8, "wl_shell", 1)
[3179091.802] [email protected](0)
[3179091.884] -> [email protected]_pool(new id wl_shm_pool@3, fd 8, 4096)
[3179092.276] -> [email protected](12288)
[3179092.431] -> [email protected](28672)
[3179092.687] -> [email protected](61440)
[3179093.248] -> [email protected](126976)
[3179096.003] -> [email protected](258048)
[3179096.160] -> [email protected](520192)
[3179100.877] -> [email protected](1044480)
[3179104.900] -> [email protected](2093056)
[3179127.730] -> [email protected]_surface(new id wl_surface@13)
[3179127.754] -> [email protected]_xdg_surface(new id zxdg_surface_v6@14, wl_surface@13)
[3179127.764] -> [email protected]_toplevel(new id zxdg_toplevel_v6@15)
[3179127.773] -> [email protected]()
[3179127.910] -> [email protected]_title("Wayland Terminal")
[3179137.806] [email protected](0)
[3179137.836] [email protected](1)
[3179137.852] [email protected](0, 0, 0, 0, 0, "Vulkan", "", 0)
[3179137.914] [email protected](3, 1920, 1080, 60027)
[3179137.956] [email protected](1)
[3179137.965] [email protected]()
[3179137.976] [email protected](3)
[3179137.991] -> [email protected]_pointer(new id wl_pointer@16)
[3179138.001] -> [email protected]_keyboard(new id wl_keyboard@17)
[3179138.016] [email protected]("seat12")
[3179138.024] [email protected](6)
[3179138.046] -> [email protected]_configure(6)
[3179138.072] -> [email protected]_title("Wayland Terminal")
[3179138.093] [email protected](0, 0, array)
[3179138.104] -> [email protected]_region(new id wl_region@18)
[3179138.360] -> [email protected]_title("Wayland Terminal")
[3179138.374] -> [email protected]_region(new id wl_region@19)
[3179138.384] -> [email protected](32, 32, 742, 427)
[3179138.412] -> [email protected](35, 35, 736, 421)
[3179138.647] -> [email protected]_pool(new id wl_shm_pool@20, fd 9, 1582984)
[3179138.669] -> [email protected]_buffer(new id wl_buffer@21, 0, 806, 491, 3224, 0)
[3179138.683] -> [email protected](new id wl_callback@22)
[3179142.352] -> [email protected]_window_geometry(32, 32, 742, 427)
[3179142.399] -> [email protected]_opaque_region(wl_region@18)
[3179142.405] -> [email protected]()
[3179142.412] -> [email protected]_input_region(wl_region@19)
[3179142.417] -> [email protected]()
[3179142.427] -> [email protected](wl_buffer@21, 0, 0)
[3179142.449] -> [email protected](0, 0, 806, 491)
[3179142.484] -> [email protected]()
^C
cheako@nysa:~/src/github/vkwayland/build$
The drawing bits are everything from [email protected]_region(new id wl_region@18)
to the end, surface.commit() is the command the dispatches the drawing of the surface.attack(buffer).
Create buffer means: at offset 0 bytes, width 806, height 491, each row is 3224 bytes, format 0(ARGB8888).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.