-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Semantic versioning #43
Comments
According to LunarG's whitepaper, there shouldn't be any breaking changes between the patch releases. There might be something we did it wrong when generating those bindings, I'd say we should figure out the root cause, make a fix and bump the patch version again. |
The core + extensions should be stable, yes. The thing is, we include beta extensions, and those may break. Breakings may include a variable being defined in a version and removed in another one, which results in not being able to use the package because of an |
Maybe it's a good idea to separate out those fragile extensions into another package(or even packages) like VulkanExtensions.jl? |
For now, those platform-specific extensions are all bundled into the package, which, I think, is also wrong. I have already found some bugs as reported in #41. I'm still exploring how to get better and robust multi-platform support. LibCURL is a good example and I believe we should do the same to VulkanCore, especially those platform-specific extensions. |
You're right. Since Clang can't cross-compile, maybe we should move platform-specific code generation to a package build step, so that the host generates code? Unless we have a handy system for generating code for each platform so that we can conditionally include the right files (like LibCURL)?
Yes, this looks better. We could have:
In my comment I said:
But I'm not sure about the second part actually. Do extensions have a guaranteed stability like the core, at the exception of course of those from |
This is what I've done my best to avoid. Clang.jl should be able to generate exactly the same code regardless of the host system environment. (To do something on the users' machine is always problematic, the only stable operation is probably downloading...) The current Clang master is working at a full cross-compile mode(I even removed the support for the host build), users can now run the generator without having a compiler(libc headers) or system headers installed.
I don't know too. I guess we could ask somebody in the Vulkan community to get a confirmation. |
That's great! So conditional includes as being done on LibCURL could do the trick I guess.
I asked on the Khronos Slack, we'll see if someone answers. Otherwise from KhronosGroup/Vulkan-Headers#167 I get the feel that only beta extensions should be allowed to break. |
I also posted a question on the SO. 😉
https://stackoverflow.com/q/67336451/4594532
令和3年5月1日(土) 1:12 Cédric Belmant ***@***.***>:
… The current Clang master is working at a full cross-compile mode(I even
removed the support for the host build), users can now run the generator
without having a compiler(libc headers) or system headers installed.
That's great! So conditional includes as being done on LibCURL could do
the trick I guess.
I guess we could ask somebody in the Vulkan community to get a
confirmation.
I asked on the Khronos Slack, we'll see if someone answers. Otherwise from
KhronosGroup/Vulkan-Headers#167
<KhronosGroup/Vulkan-Headers#167> I get the
feel that only beta extensions should be allowed to break.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#43 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABYXW5KU2E64EH3KN5DIY6LTLLJILANCNFSM4332KMOA>
.
|
Mine was quicker 😄
|
So, it looks like KHR extensions are as stable as the core API, and multi-vendor/vendor extensions should be but not necessarily. Also, citing the spec:
and large changes have to be marked as deprecated or obsoleted. This table shows the extensions associated with the platform-specific flags.
EDIT: Regarding the sentence about promotion above, I don't think it applies to the headers being broken, more so about transitioning from the extension to the core interface. Thinking more about it, maybe just provisional (beta) extensions should be in a separate package, if required. We may just decide not to support them in VulkanCore. What do you think? |
Could you paste the table here? I cannot open that link. FYI, I've added cross-platform support in #39. |
Here is the table in question:
|
I think we can close this now, with the conclusion that semantic versioning of VulkanCore.jl will follow that of Vulkan, and that beta extensions won't be supported (in this repo at least) for stability/compatibility reasons. |
As I understand it, VulkanCore uses a particular convention for versions, where the major and minor numbers are identical to the wrapped Vulkan version, and the patch number being the "version" of the wrapper itself.
The problem is that it is not in line with the semantic versioning of other packages. Therefore it may lead to issues like JuliaGPU/Vulkan.jl#16 because releases are assumed to never be breaking unless the major version of Vulkan changes (which does not happen often!). However, we may have breaking changes in how we wrap things, or even the specification itself may yield breaking changes (version 1.2.162 did).
Furthermore, since we now have the headers as an Artifact (Vulkan_Headers_jll) whose version is that of the Vulkan specification, I see little need in tracking the version also here and even less so as our package version.
Therefore I propose to respect semantic versioning from now on for future releases.
The text was updated successfully, but these errors were encountered: