-
Notifications
You must be signed in to change notification settings - Fork 38
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
[glTF] Load scenes with UINT8 indices #482
Conversation
Without extensions, Vulkan only supports UINT16 and UINT32 index buffers. However, glTF allows UINT8 index buffers. We can support scenes with UINT8 indices by repacking them into a UINT16 buffer instead. This comes at the cost of a larger GPU buffer. This allows us to load more Khronos glTF-Sample-Assets like TextureCoordinateTest. Fixes google#453
bc7e491
to
1ccfb6a
Compare
Seems like the required extension is https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_8bit_storage.html |
Sg I'll look at adding UINT8 support to Geometry instead |
Actually I'm looking at https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_index_type_uint8.html which I believe is required for VK_INDEX_TYPE_UINT8_KHR. That's what I think I need for UINT8 support in Geometry. I don't see that it's been promoted |
Ahh right, index buffer, not storage buffer, sorry I missed that! |
I tried on three devices I have (1 software lavapipe, and 2 android) and they all support VK_EXT_index_type_uint8. According to https://vulkan.gpuinfo.org/listextensions.php support for the extension is at 62%. Would it make sense to support UINT8 through the extension, or perhaps fall back to repacking if it is not available? |
I like the idea of supporting the extension with this as a fallback. I'll look into how to make that happen. |
@apazylbe I made some non-trivial changes that I'd like you to review. |
@apazylbe merge conflicts are solved |
Load scenes that contain 8-bit index buffers. How the index buffer ends up being packed depends on the capabilities of the device:
VK_KHR_index_type_uint8
extension, the UINT8 indices can be packed into aINDEX_TYPE_UINT8
buffer. This is the optimal case as it doesn't require additional memory.This allows us to load more Khronos glTF-Sample-Assets like TextureCoordinateTest.
Fixes #453