1

Как правило, видеоигры и другое графическое программное обеспечение, использующее вершинные и фрагментные шейдеры, будут иметь упомянутые шейдеры в форме исходного кода шейдера (обычно в glsl или hlsl) и компилировать их для использования с оборудованием дисплея во время выполнения. (Насколько я понимаю, шейдеры не могут быть предварительно скомпилированы в двоичный файл игры, потому что фактический машинный код шейдера, который использует аппаратное обеспечение дисплея, зависит от марки видеокарты и даже от ее модели / поколения, и они вполне могут быть несовместимы друг с другом.)

Несмотря на то, что я сам работаю в области программирования игр и использую шейдеры, я на самом деле не знаю точно, какая часть графического конвейера на самом деле компилирует шейдеры в машинный код, который использует графическая карта. Компиляция шейдеров - это по сути черный ящик: бросьте исходный код шейдера в любую библиотеку, которую вы используете, и она делает свое волшебство за кулисами.

Мне было бы интересно знать, где именно происходит этот процесс компиляции. Какая точная часть всей системы берет исходный код шейдера и вырабатывает из него машинный код шейдера?

Мое (дикое) предположение состоит в том, что это делается драйвером видеокарты (потому что драйвер знает, какой тип машинного кода он должен выводить и как его оптимизировать, для конкретной марки и модели видеокарты).

(Если это действительно так, это хотя бы частично объясняет, почему графический драйвер так важен для эффективности игр, поскольку его оптимизация машинного кода шейдера окажет большое влияние на скорость рендеринга.)

0