ARB_shader_image_load_store - какая версия OpenGL и какое оборудование требуется? - PullRequest
0 голосов
/ 03 марта 2012

Меня немного смущают новые расширения OpenGL, какое оборудование им требуется и какая версия OpenGL им требуется.

В частности, сейчас речь идет о ARB_shader_image_load_store. http://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt

Как я понимаю, это особенность OpenGL 4.2, но в зависимостях OpenGL написано:

This extension is written against the OpenGL 3.2 specification
(Compatibility Profile).

This extension is written against version 1.50 (revision 09) of the OpenGL
Shading Language Specification.

OpenGL 3.0 and GLSL 1.30 are required.

и далее такие вещи, как

This extension interacts trivially with OpenGL 4.0 and ARB_sample_shading.

Что означают эти вещи? Какое оборудование и какая версия OpenGL необходимы для использования таких расширений?

Ответы [ 2 ]

6 голосов
/ 03 марта 2012

Что означают эти вещи?

Хорошо, давайте рассмотрим их по одному.

Прежде чем мы начнем, некоторая базовая информация.Спецификации OpenGL, будь то ядро ​​или расширение, не заботятся о том, на каком оборудовании что-то работает.Они не заинтересованы в этом.Они не определяют оборудование .Вы не можете посмотреть спецификацию расширения и априори знать, на каком оборудовании оно будет работать.Если вы хотите найти эту информацию, вы ищете не в том месте.

Кроме того, вы должны понимать кое-что о спецификациях расширения.Расширение OpenGL похоже на diff ;Вы не можете прочитать это в изоляции.Расширение OpenGL - это документ, который изменяет спецификацию OpenGL.

Это расширение написано в соответствии со спецификацией OpenGL 3.2 (профиль совместимости).

Это расширение написано в версии 1.50 (редакция09) Спецификации языка затенения OpenGL.

Файл diff совершенно бесполезен, если вы точно не знаете, в какой файл его патчить, да?То же самое и с OpenGL.Спецификация расширения будет делать ссылки на номера разделов и абзацев в спецификации OpenGL.Но ... существует много версий спецификации OpenGL.О чем идет речь?

Следовательно, каждое расширение должно указывать, на какой физический документ оно ссылается.Поэтому, когда это расширение говорит: «Добавьте новый подраздел после Раздела 2.14.5, Сэмплеры, стр. 106», это означает страницу 106, раздел 2.14.5 спецификации OpenGL 3.2, профиль совместимости.

То же самое идетдля спецификации языка GLSL.

Требуются OpenGL 3.0 и GLSL 1.30.

Теперь только потому, что расширение написано против конкретной версии.не означает, что это минимальная версия, где возможна поддержка расширения.Реализация теоретически может поддерживать его в более ранней версии.

Это утверждение говорит, что это минимальная версия, которая может возможно ее поддерживать.

Это не вопрос аппаратное обеспечение ;это вопрос языка .Причина 3.0 - минимум, потому что это расширение относится к понятиям, которые просто не доступны в 2.1.Такие как целочисленные форматы изображений и так далее.Мы поговорим об этом подробнее в следующей части.

Это расширение взаимодействует с X.

Оператор «взаимодействует с» говорит с необязательными частямиСпецификация.Это означает, что если «X» и это расширение поддерживаются и , то также существуют определенные параграфы в этой спецификации.

Например, ARB_shader_image_load_store заявляет: «Это расширение взаимодействует с ARB_separate_shader_objects»,Если вы посмотрите вниз, вы найдете раздел «Зависимости от ARB_separate_shader_objects».Это перечисляет конкретный язык, который изменяется, когда ARB_separate_shader_objects доступен.

Оператор "тривиально взаимодействует с X" просто означает, что взаимодействие обычно является оператором "удалить ссылки на X".Например, раздел о состоянии зависимостей ARB_tessellation_shader / 4.0: «Если OpenGL 4.0 и ARB_tessellation_shader не поддерживаются, ссылки на шейдеры управления и оценки тесселяции должны быть удалены».

Язык «тривиально» - это просто расширение.сказать: «если X не поддерживается, то, очевидно, любые ссылки на вещи, которые реализует X, следует игнорировать».

Взаимодействие с ARB_separate_shader_objects не является тривиальным, поскольку включает переопределение того, как работает ранний тест глубины.

«Взаимодействует с» является альтернативой формулировке «требуется».АРБ мог просто написать это против 4.1 и твердо заявить, что 4.1 требуется.Тогда не было бы почти столько же «взаимодействующих» предложений, поскольку ни одна из этих вещей не является обязательной.

Однако ARB хотел учесть возможность оборудования, которое могло бы поддерживать концепции GL 3.0, но не другие.Например, в мобильном пространстве поддержка shader_image_load_store может предшествовать tessellation_shaders.Вот почему это расширение имеет много «взаимодействующих с» предложений и довольно низкую «требуемую» версию GL.Несмотря на то, что на настольных компьютерах вы не найдете никакой реализации ARB_shader_image_load_store в паре с номером версии менее 4.0.

Какое оборудование и какая версия OpenGL необходимы для использования таких расширений?

Ни один из этих документов не скажет вам этого.ARB_shader_image_load_store может быть доступным на любой версии реализации 3.0 или выше.

Самый простой и простой способ выяснить, какое оборудование поддерживает какие расширения для , использовать OpenGL Viewer .Он имеет довольно современную базу данных этой информации.

Кроме того, вы можете использовать здравый смысл.ARB_separate_shader_objects позволяет вам смешивать и сочетать программы на лету.Это то, чем D3D занимается с Direct3D 8. Очевидно, что аппаратное обеспечение могло бы делать это с момента появления шейдеров;OpenGL просто не позволил вам .До сих пор.

Очевидно, что ARB_separate_shader_objects не основан на аппаратном обеспечении.

Аналогично ARB_shading_language_pack420 содержит множество функций, которые D3D имеет с тех пор.Опять же, здесь явно нет ничего, что требовало бы специализированной аппаратной поддержки.

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

Это не всегда так для каждого расширения.Но это в основном верно.

Другая вещь, о которой вы должны знать, это номера версий OpenGL.Начиная с 3.0, ARB хорошо придерживался строгой схемы нумерации версий.

Основные версии представляют фундаментальные аппаратные изменения.3.x к 4.x прямо эквивалентны D3D10 - D3D11.Минорные версии либо делают API более привлекательным (см. ARB_texture_storage, что-то, для чего мы были long просрочены), либо выставляют ранее неэкспонированные аппаратные функции для того же аппаратного уровня (ARB_shader_image_load_store может быть реализовано на любомРеализация 4.0, но ARB просто потребовал до 4.2, чтобы написать расширение).

Так что, если у вас есть оборудование, которое может работать с 3.0, оно также может запустить 3.3;если у него нет драйверов для него, то ваш производитель драйверов не выполняет свою работу.То же самое касается 4,0 до 4,2.

0 голосов
/ 03 марта 2012

Это означает, как правильно читать спецификацию расширения.Чтобы прочитать спецификацию, вы должны знать, как расширение взаимодействует с другими функциями OpenGL.И говоря, что «расширение взаимодействует тривиально с OpenGL 4.0», это означает, что вы должны узнать о базовой функции OpenGL 4.0 ARB_sample_shading и о том, как это расширение меняет свое поведение.

Поскольку это в спецификации OpenGL Core 4.2, ARB_shader_image_load_store должно бытьподдерживается на всех устройствах Shader Model 5 / Direct3D11 (Radeon HD5xxx и выше, GeForce 400 и выше).

Таким образом, вы можете проверить, является ли ваша версия OpenGL> = 4.2 или проверить наличие расширения ARB_shader_image_load_store.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...