Open Eichenherz opened 3 years ago
Needs SPIR-V extension for… https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_bindless_texture.txt Other issues for Vulkan… https://github.com/KhronosGroup/Vulkan-Docs/issues/1474
Yeah, I see the part about textures being bindless. But this is more about buffer_reference syntax. In it current state it is cumbersome and confusing even. It'd be much better if VkDeviceBufferAddress would be "operatable" as ByteBufferAddress from DX12 or like a C pointer: uint64_t myVertexBufferAddress; my_vertex_struct vtx = my_vertex_struct( myVertexBufferAddress + sizeof(my_vertex_struct) someIndex ); or my_vertex_struct pVtx = myVertexBufferAddress; my_vertex_struct vtx = pVtx[ someIndex ];
I'm currently used such… you can do that...
#define RawData uint64_t
layout(buffer_reference, scalar, buffer_reference_align = 1) buffer RawDataByte {
uint8_t data[];
};
layout(buffer_reference, scalar, buffer_reference_align = 1) buffer RawDataShort {
uint16_t data[];
};
layout(buffer_reference, scalar, buffer_reference_align = 1) buffer RawDataUint {
uint32_t data[];
};
uint8_t readUint8(in RawData ptr, in uint byteOffset)
{
return RawDataByte(ptr+byteOffset).data[0u];
};
uint16_t readUint16(in RawData ptr, in uint byteOffset)
{
return RawDataShort(ptr+byteOffset).data[0u];
};
uint32_t readUint32(in RawData ptr, in uint byteOffset)
{
return RawDataUint(ptr+byteOffset).data[0u];
};
Yeah, I found a similar way of doing stuff. At first glance it seemed less manageable. My bad. Anyways would it be possible for true-ish C-like pointers to exist in GLSL ?
There's a lot of movement towards truly bindless not just descriptor indexing. Buffer references are a feature that's important for not binding buffers ( even images with VK_NVX_image_view_handle: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_NVX_image_view_handle.html ). However the syntax is quite cumbersome. A C-like syntax would require giving new meaning to type*, having an alignof( type ) operator maybe even sizeof all in the GLSL language/compiler. DX12 doesn't really have device pointers, but it has something that would be great to have in Vk/GLSL too, namely ByteBufferAddress. This works a lot like a C array. So having said this I'd like to request a feature/update/improvement in this regard. Let's make device pointers ~great again~ ! :-) Cheers !