Есть ли способ запустить меза-компилятор, чтобы уменьшить размер шейдерных файлов? - PullRequest
2 голосов
/ 16 января 2020

Драйверы mesa, как часть процесса компиляции, уменьшают размер файлов шейдеров glsl.

Некоторые библиотеки, например this , используют этот факт для создания библиотек минимизации шейдеров. Все библиотеки минификации, которые я нашел, являются заброшенными, поэтому, если у mesa нет функциональности для непосредственного получения промежуточных файлов glsl, мне, возможно, придется редактировать реальный код так, как это делали эти библиотеки.

Мне было интересно, есть ли исполняемый файл в базе меза-кода, который можно использовать для разборки без необходимости редактировать код.

Я пытался прочитать официальную документацию по мезе, но я ничего не предлагал: https://www.mesa3d.org/opengles.html

1 Ответ

3 голосов
/ 16 января 2020

«Минификация» - это нечто иное, чем оптимизация. Обычно этот термин используется для описания процесса, который принимает исходный файл в текстовом виде и удаляет все лишние пробелы и заменяет все идентификаторы на более короткие.

Строго говоря, вся идея минимизации является глупостью, поскольку она имеет нулевое влияние на производительность; это не влияет ни на кодирование кода, ни на результат компиляции. Вся глупость минификации началась в веб-разработке, чтобы уменьшить размер ресурса веб-страницы; совершенно бесполезно, потому что вы получите гораздо лучшую производительность, если просто сжать текст с помощью gzip или аналогичного. Черт возьми, после архивирования размер оригинальной и уменьшенной версий, вероятно, будет в пределах нескольких байт друг от друга.

Если вы действительно беспокоитесь о размере своего шейдера как ресурса, просто сожмите его (но учтите, что накладные расходы на код распаковки). РЕДАКТИРОВАТЬ: Однако, если ваша цель - WebGL, тогда используйте сжатие gzip транспорта HTTP. Соответствующие браузеры поддерживают все это, и большинство HTTP-серверов можно настроить для прозрачной доставки дополнительного .gz файла с суффиксом (или для сжатия и кэширования его на лету).

Для оптимизации Вы должны посмотреть на другие предложения Хронос. В частности, компилятор GLSL-SPIR-V glslc, оптимизатор SPIR-V spirv-opt и декомпилятор SPIR-V spirv-cross. Вы можете объединить их в цепочку, чтобы создать оптимизированный «сокращенный» GLSL.

glslc --target-env=opengl -fshader-stage=... -o ${FILE}.spv ${FILE}
spirv-opt -Os -o ${FILE}.spv.opt ${FILE}.spv
spirv-cross --output ${FILE}.opt ${FILE}.spv.opt

Поскольку инструменты SPIR-V являются частью официального SDK Vulkan, а SPIR-V также является допустимым форматом шейдеров, который необходимо загрузить. непосредственно с помощью OpenGL-4.6 (а не только из источника GLSL), вы можете спокойно спать на том факте, что эти инструменты в хорошем состоянии и будут в будущем.

...