RFC: gfx-rs to HAL bridge #1721
Labels
api: pre-ll
old abstraction layer (pre-ll branch)
backend: Vulkan
difficulty: hard
module: hal
status: ready for work
type: api
type: discussion
type: feature
value: strategic
Introduction
Lately, I've been trying to wrap my head around what
gfx-render
is meant to be, and how we can approach it effectively. The project started before we took full course on Vulkan Portability (#1354, #1610), and the prototyping we got (thanks to @Bastacyclop fearless efforts) was not exactly bringing us the compatibility with the old/currentgfx-rs
. Meanwhile, our growing userbase has been putting more and more pressure to get something compatible.Ideas
Here is the idea that struck me: if HAL ~ Vulkan (portability), then implementing
gfx-render
, which would havegfx-rs
like API and Vulkan-like backing, would be equal to ... implementinggfx_device_vulkan
. Here is good news: we do have some code in there. Surely it needs to be updated and revamped, but the target is the same.Making one step further: given a functioning Vulkan backend, we could use the portability layer to direct it to our HAL implementation. This redirection can be done by something like
gfx_window_hal
that links to HAL and provides all the function pointers.Proposed plan
Here is the concrete proposal for gfx-to-HAL bridge:
gfx_device_vulkan
implementation (this ispre-ll
branch!), potentially useash
for accessing Vulkan.gfx_window_hal
that links to the portability layer. It may have it's own features for different HAL backends.Fate of gfx-render
What does this mean for
gfx-render
, you may ask (#1466, #1281)? Well, I think we should salvage what we can (note: if someone volunteers to continue development, you have my blessing!). There might still be space for a new non-constrained higher level library, but not much need for it:gfx-rs
gfx-render
My primary motivation behind
gfx-render
was the compatibility with existing apps, in particular - with our own examples. But with this bridge implemented, we'd just leave those examples be inpre-ll
safely, keep supportingpre-ll
, and shift to developing new examples specifically for HAL and it's future wrappers (more framegraphs!:) ).Questions
Welcome to the comments section below ;)
The text was updated successfully, but these errors were encountered: