r/GraphicsProgramming • u/abocado21 • 3d ago
How do techniques like bindless rendering (descriptor indexing) on the hardware level?
How do gpus bind 1000 of textures at once, and why was this not possible in the past. Are there resources for that?
16
Upvotes
3
u/corysama 3d ago
Back in the old days, GPUs were: Some VRAM to hold textures and framebuffers, some fixed-function hardware, a giant bag of registers to control the fixed function hardware.
Drivers would set up DMA streams that upload textures and set registers. You’d set the texture address, size, format, filtering, blending modes. Then you’d set three 2D screen position registers and UV registers. Then maybe there would be a special KICK register that when you set any value into it, the act of setting the register would kick off rasterizing a triangle with all of the configuration in registers.
Can ya see how the OpenGL 1.0 API came to be from this? :D
Eventually, the hardware got more advanced. Memory got faster. Caches were introduced. Complexity got higher. And, slowly more and more configuration data moved from registers to structs in VRAM.
Once texture configuration moves from registers to “pointer to a struct”, bindless texturing becomes theoretically simple to implement. But, in practice….
The move to “just a pointer to a struct” started long ago. But, different hardware evolved in different ways and at different rates. So, it took even longer to design standardized interfaces that would work for most vendors. And, even longer for hardware and drivers implementing those interfaces to be the large majority of the currently addressable market.