Известные ошибки в реализациях OpenGL 3, OpenGL 4

Как мы все со временем узнаем, спецификация — это одно, а реализация — другое. Большинство ошибок мы создаем сами, но иногда это не так.

Думаю, было бы полезно составить небольшой список:

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

Не забывайте всегда публиковать соответствующую видеокарту и версию драйвера.


person Community    schedule 27.11.2010    source источник
comment
Вопрос должен быть вики сообщества.   -  person Stringer    schedule 27.11.2010
comment
@Stringer - теперь только модники могут задавать вопросы CW. Он по-прежнему будет конвертироваться, когда будет опубликовано ›30 ответов.   -  person ChrisF    schedule 28.11.2010
comment
Я решительно поддерживаю инициативу, в которой перечислены «известные ошибки драйверов», но я думаю, что SO не может быть подходящим местом для эффективной работы. Отправной точкой может быть OpenGL Wiki, но для такой базы данных потребуются поиск, индексация, списки версий драйверов и т. д., ей потребуется надлежащий сервер базы данных.   -  person rotoglup    schedule 29.11.2010


Ответы (2)


Позвольте мне начать:

  • GPU: подтверждено на AMD/ATI Radeon HD 4650
  • Тип: задача GLSL
  • Связано с версией GL: подтверждено на 3.3, возможно, 3.1 и выше (или даже раньше)
  • Соответствующая ссылка: http://forums.amd.com/devforum/messageview.cfm?catid=392&threadid=139288
  • Версия драйвера: подтверждена на Catalyst 10.10 (9-28-2010)
  • Статус: по состоянию на 27 ноября 2010 г. у него есть исправление, но оно, по-видимому, еще не достигло общедоступной версии драйвера (поэтому, даже если исправление будет выпущено, пользователи с не очень последней версией драйверов все еще будут затронуты для как месяцы)
  • Описание:

Если в вашем вершинном шейдере есть переменная attribute (in), имя которой лексически следует за gl_, то вы не можете использовать встроенные атрибуты, а именно gl_VertexID и gl_InstanceID. Если вы попытаетесь, шейдер не сработает (пустой экран, скорее всего).

  • Обходной путь (новый):

Доступно только с GLSL 3.3 и выше или с расширением GL_ARB_explicit_attrib_location.

Явно задайте местоположение любого атрибута равным 0, добавив layout(location=0) к его объявлению в вершинном шейдере. Вы можете, но не обязаны использовать это для других атрибутов; важно то, что ЛЮБОЙ атрибут должен иметь местоположение, равное 0. После того, как вы это сделаете, наименование больше не имеет значения.

  • Обходной путь (альтернативный):

Используйте соглашение об именах, которое требует, чтобы вы называли свои атрибутивные переменные, начинающиеся с a_, что не повредит читабельности вашего кода и сделает их лексически перед gl_ (безопасная зона).

person Community    schedule 27.11.2010
comment
Использование gl_ перед любым именем переменной, кроме предопределенных, запрещено; согласно спецификации, вы должны получить ошибку компилятора. - person Nicol Bolas; 09.09.2011
comment
@Nicol, это правда, но не имеет отношения к этой проблеме. Пожалуйста, прочтите еще раз :) - person Kos; 09.09.2011

Еще одна ошибка gl_VertexID:

  • Графический процессор: NVIDIA GeForce 9400M
  • Тип: задача GLSL
  • Версия драйвера: NVDANV50Hal 1.6.36
  • Версия OpenGL: 2.1, GLSL 1.2 с использованием расширения GL_EXT_gpu_shader4

Это происходит на макбуках. Вполне возможно, что новый драйвер, поддерживающий OpenGL 3.2, поставляемый с OS X Lion, устранил проблему, но многие фреймворки настроены только на использование устаревших драйверов 2.1, поэтому это все еще актуально.

Если вы прочитаете gl_VertexID до того, как прочитаете другой атрибут в вершинном шейдере, последний атрибут вернет ненужные данные. Если другим атрибутом является gl_Color, независимо от того, как он используется, ничего не будет отображаться. Доступ к другим встроенным атрибутам может привести к другому странному поведению.

  • Обходной путь:

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

person Community    schedule 18.05.2012