-
Notifications
You must be signed in to change notification settings - Fork 213
Description
The current design of the generator has become almost unmaintainable. There have been lots of changes to vk.xml and how we use it in ash in the past 5 years.
I started a very early WIP branch a couple of months ago, but haven't had much time to work on it so far. But I now have more time to spare and hopefully I can finish this up in the next couple of months.
I am going to list some of the changes/additions I have been thinking about:
-
Fully switch to vk-parse, don't use the outdated vkxml anymore
-
Don't use syn and quote anymore. They don't really have many benefits for pure codegen. Instead we will write directly to the files ourselves.
-
The generator needs to be easily understandable and documented. Need to make it easier for people to contribute.
-
Feature flags all the things:
ashgets slower to compile every release. -
- Feature flag for every extension: By default everything will be active. But you can choose to opt-in into only the extensions are you want to use.
-
- Feature flag for builders: While builders are nice, not everyone is using them and they add quite a bit of build time.
-
- Feature flag provisional apis: Some extensions in vulkan are experimental, instead of generating those by default, you will have to opt-in into those
-
- (Possibly?) Feature flags for the high level interface. For people that only want the low level bindings. Otherwise we still might split ash into
ashandash-sys.
- (Possibly?) Feature flags for the high level interface. For people that only want the low level bindings. Otherwise we still might split ash into
-
Generate everything: Currently only the low level part is generated. Every high level function is written by hand. Instead we will now generate 95% and only handwrite functions that are particularly difficult to generate correctly.
-
- Extensions: We still can not automatically generate high level extensions by default because the output has to be verified by a human. Otherwise it would be too easy to run into breaking changes.
-
-
- To add a new extension: It should be as easy as to add the name of the extension to a list, re-run the generator, verify the output, and potentially write some custom overrides for some functions.
-
-
- Feature flags would have to be generated as well. (in .rs and .toml)
-
- Make it easy to manually override functions that are hard to generate.
-
No build.rs: I have been thinking about this for a while. Initially I wanted to move the generation into a build.rs file, but has some limitations. We can't autogenerate the feature flags for extensions, and it will introduce dev-depencies. I'd rather have
ashremain a 0 dependency library for now. -
No huge files anymore: We need to split everything into multiple files. Github already can't show the diffs anymore for some files, and rustc/rustdoc struggle as well with files that are 50k loc.
-
...