▲ | maximilianburke 2 days ago | ||||||||||||||||
Compiling shaders directly from a high level representation to the GPU ISA only really happens on consoles. In DirectX on PC, shaders have been compiled into an intermediate form going back to Direct3D 8. All of these intermediate forms are lowered into an ISA-specific instruction set by the drivers. This final compilation step is triggered lazily when a draw happens, so if you are working on a "modern" engine that uses thousands of different material types your choices to handle this are to a) endure a hiccup as these shaders are compiled the first time they are used, b) force compilation at a load stage (usually by doing like a 1x1 pixel draw), or c) restructure the shader infrastructure by going to a megashader or similar. | |||||||||||||||||
▲ | dcrazy 2 days ago | parent | next [-] | ||||||||||||||||
> Compiling shaders directly from a high level representation to the GPU ISA only really happens on consoles. When targeting Apple platforms, you can use the metal-tt tool to precompile your shaders to ISA. You give it a list of target triples and a JSON file that describes your PSO. metal-tt comes with Xcode, and is also available for Windows as part of the Game Porting Toolkit. Unfortunately, most people don’t do that. They’re spoiled by the Steam monoculture, in which Steam harvests the compiled ISA from gamers’ machines and makes it available on Valve’s CDN. | |||||||||||||||||
| |||||||||||||||||
▲ | powerhugs 2 days ago | parent | prev [-] | ||||||||||||||||
> Compiling shaders directly from a high level representation to the GPU ISA only really happens on consoles. No, that's not correct. In fact, it's mostly the other way around. Consoles have known hardware and thus games can ship with precompiled shaders. I know this has been done since at least PS2 era since I enjoy taking apart game assets. While on PC, you can't know what GPU is in the consumer device. For example, Steam has this whole concept of precompiled shader downloads in order to mitigate the effect for the end user. | |||||||||||||||||
|