Загрузка LUT в видеокартах Intel Graphics

Статус
Закрыто для дальнейших ответов.

sabos

Участник
Топикстартер
Сообщения
1 909
Реакции
285
Многие пользователи отмечали проблемы с корректной загрузкой LUT в видеокартах Intel Graphics. Калибровка «слетает» после standby, logoff, смены видеорежима или подключения второго монитора/TV. При этом все загрузчики LUT, как старые испытанные Adobe Gamma Loader, Logo Calibration Loader, basiccolor LUTloader, так и современные, и даже родные (встроенные в windows 7) проявляют «непослушание», и даже вручную запускаемые — грузят LUT нехотя, не с первой попытки.

Связано это с тем, что функция SetGammaRamp, которой пользуются все наши загрузчики, не отрабатывается драйвером Intel Graphics напрямую, как того ожидает здравый смысл. Напрямую отрабатывается собственная фирменная функция, которая берет gamma ramp из registry [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ialm\Device0] "DisplayGamma" (где ialm - имя драйвера видеокарты).

Как исправить? Ведь переписывать драйвера мы вряд ли станем, непростая это работа. Да и лоадер писать специальный лень. Мы перепишем gamma ramp непосредственно в registry:
1. Экспортировать данные из vcgt нашего профиля.
2. Преобразовать их в 8-bit (в registry запись словами, 16-разрядная, но старший байт всегда 00h).
3. Сформировать reg-файл (текстовый) в формате строка 256 слов red, строка green, строка blue
"DisplayGamma"=hex:\
00,00,00,01...00,ff\
00,00,00,01...00,fс\
00,00,00,01...00,ef
4. Добавить файл в registry.
5. Отключить все остальные лоадеры.

2 Serge_e Если навыка работы с registry нет - вышлите мне в приват свой LUT (пусть хоть save из calibration tester).
 

Serge_e

15 лет на форуме
Сообщения
1 299
Реакции
489
Ответ: Загрузка LUT в видеокартах Intel Graphics

фирменная функция, которая берет gamma ramp из registry [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\ialm\Device0] "DisplayGamma" (где ialm - имя драйвера видеокарты).

На нетбуке с WinXP и интеловской графикой, встроенной в чипсет все отрабатывает отлично, сделал файл по образцу :)

А вот на большом под Win7 и графикой, интегрированной в процессор (intel i3 M330) успеха пока нет, в указанной ветке реестра нет никаких настроек/установок для видео адаптера (как на скриншоте), все это собрано в странных ветках вроде HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000 или HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{74F9F449-8D44-4230-B861-E0FFFB435B95}\0000 - похоже, что это одно и то же, причем заменить данные в строке "DisplayGamma" реально не удается (система автоматически восстаналивает данные для "прямой" кривой).

Есть еще ветка [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\igfx\Device0] где есть упоминание, что это Intel(R) Graphics Media Accelerator HD, но больше там ничего нет и попытка записать туда "DisplayGamma" не приводит ни к каким изменениям в системе. (Оно записывается и сохраняется, результата нет).
 

mifrandir

Участник
Сообщения
42
Реакции
0
Ответ: Загрузка LUT в видеокартах Intel Graphics

http://quickgamma.de/indexen.html на этой странице есть такая интересная утилитка как ListGammaRamp которая, как и calibration tester считывает данные из LUT VA. При этом данные можно экспортировать в EXEL, где данные будут отображаться и в "hex". При помощи загрузчика Сalibrilla (аналог calibration tester), данные можно сохранить в текстовый файл, в том числе каждую кривую тонопередачи канала цветности в отдельный файл, для дальнейшего экспорта при помощи ICC Profile Inspector v.3 в теги профиля монитора rTRC, gTRc, gTRC. Работу всевозможных Loader можно отследить при помощи http://www.anvir.net/ при этом последняя может не только удалить из автозагрузки программу, но и удалить её записи в реестре. Править реестр тоже умеет. Кроме всего прочего она в режиме реального времени может отследить все процессы, а следовательно и загрузки... нежелательные действия и вовсе моет блокировать.
 

mifrandir

Участник
Сообщения
42
Реакции
0
Ответ: Загрузка LUT в видеокартах Intel Graphics


Не по теме:
Это откуда такая версия? На color.org лежит только версия 2.4.0.
да-да 2.4, это просто у меня архив с версией 2.3.11 так сокращённо назывался... опечатка. Это не главное - всё проверял и всё работает.
 

sabos

Участник
Топикстартер
Сообщения
1 909
Реакции
285
Ответ: Загрузка LUT в видеокартах Intel Graphics

есть такая интересная утилитка как ListGammaRamp которая, как и calibration tester считывает данные из LUT VA. При этом данные можно экспортировать в EXEL, где данные будут отображаться и в "hex". При помощи загрузчика Сalibrilla (аналог calibration tester), данные можно сохранить в текстовый файл, в том числе каждую кривую тонопередачи канала цветности в отдельный файл.

Спасибо. Из-за того, что CMS Windows до недавних пор не обеспечивало загрузку LUT самостоятельно (хотя поддержку LUT имело еще с версии 3.1), сторонними разработчиками было написано очень много загрузчиков, от примитивнейших лоадеров до развитых утилит. Все эти утилиты объединяет то, что они используют встроенную в Windows поддержку функций работы с LUT (см. в MSDN SetGammaRamp и GetGammaRamp). Нужно понимать, что эти функции не работают с hardware видеокарты напрямую, идеология у Windows (и у большинства других ОС) иная, непосредственную работу с железом обеспечивают драйвера. Только драйвер знает устройство (уникальное) своей видеокарты, и только драйвер знает, в какие именно регистры загрузить LUTs. Windows (с его SetGammaRamp) же здесь лишь посредник между утилитой и видеооборудованием, лишь промежуточный буфер.

Как показали исследования ув. Serge_e - драйвер Intel GMA неаккуратен здесь, он обманывает Windows, имитируя загрузку LUT без записи в регистры. Что значит, что будут обмануты абсолютно все утилиты, работающие через стандарт.

для дальнейшего экспорта при помощи ICC Profile Inspector в теги профиля монитора rTRC, gTRc, gTRC.

Чуть уточню. LUT можно хранить разными способами, в файле, в профиле, или, как мы видели выше, в registry. Т.е. LUTs необязательно должен быть записан в профиль монитора. Если же он таки записывается туда, то для этих целей предназначен вспомогательный тег video card gamma table - vcgt (редко mtbx). Тег необязательный, вспомогательный. Не путайте его с тегами tone reproduction curve - TRC, где хранится т.н. целевая (destination, desired) функция. Немного подробнее см. здесь.

какова дискретизация чисел уже после LUT VA, когда на выходе их ждёт тот или иной интерфейс (8~16bit) на канал цветности и потери неизбежны?

Термин «потери» здесь неудачен. Пусть наш видеотракт устроен так: GDI (8 bit) -> LUT (10 bit) -> DVI (8 bit). На первый взгляд запас по разрядности в LUT здесь избыточен. Но не забываем, в LUT производится преобразование, вычисление. Природа дискретных сигналов такова, что точность вычислений всегда ограничена (разрядностью), и при любых вычислениях мы вынуждены грубо округлять (отбрасывая лишнее). Например в 8-битной системе деление 255/256 даст ноль, хотя правильный ответ ~1 (0,996).

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

Плохо понимаю вопрос. Сегодня, как и семьдесят лет назад, нелинейность человеческого зрения неплохо описывается степенной функцией, и роль гамма-сжатия не изменилась - повысить эффективность кодирования. Для безупречной передачи плавного градиента нужно 11 разрядов в энергетически линейной системе (gamma=1) и 8 разрядов в гамма-сжатой (gamma=2.4). Экономия налицо. О нелинейном кодировании сказано много, в т.ч. и на этом форуме смотрите работу коллег А. Френкель, А. Шадрин.

Возможно, вы имеете ввиду то, что сейчас, с развитием цифровых видеоинтерфейсов (DVI, HDMI, DisplayPort) преобразование цифра-свет перекочевало внутрь монитора, который теперь оборудован собственным DAC и собственным LUT. И «разжатие» гамма-компенсированных сигналов можно делать там. И коррекцию нелинейности монитора можно делать там. Конечно можно, если есть доступ к этому monitor LUT. Тогда стандартный LUT видеокарты не нужен, там можно оставить default 1:1. Если есть доступ к monitor LUT. Что (пока?) нечасто встречается.
 

Serge_e

15 лет на форуме
Сообщения
1 299
Реакции
489
Ответ: Загрузка LUT в видеокартах Intel Graphics

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

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

Короче, надо прибить процесс igfxpers.exe из автозапуска. У меня он жил в реестре, ветка
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
"Persistence"="C:\\Windows\\system32\\igfxpers.exe"

До кучи, включить управление цветом из Windows.

Состояние LUT в видеокарте сохраняется до первого запуска интеловских утилит управления графикой!
 

Serge_e

15 лет на форуме
Сообщения
1 299
Реакции
489
Ответ: Загрузка LUT в видеокартах Intel Graphics

К сожалению, сразу не нашел ссылку на внятное описание, поэтому добавляю отдельным сообщением:
http://www.pusztaiphoto.com/articles/colormgmt/intel-video-drivers/
How to Remove Persistence Module?

There is a really handy tool, Autoruns, written by Mark Russinovich and Bryce Cogswell, which can be used to show the hordes of apps that Windows loads at startup - and more importantly to disable any of them.

When you download and run the app it will display something similar to what you see on the following screen shot.

От себя добавлю, что можно также попробовать отключать через run -> msconfig чтобы не устанавливать лишний софт:)
 

lizard-b

Участник
Сообщения
2
Реакции
0
Ответ: Загрузка LUT в видеокартах Intel Graphics

ДД! После прочения всего вышеизложенного осталься 1 вопрос. Как же все-таки править реестр в Win7 для Интеловских видеокарт? Какой путь? Я признаюсь не силен в программировании и хотел бы по-подробнее узнать о действиях описанных в первом посте.
 

George

I wish I was a monster you think I am
15 лет на форуме
Сообщения
17 324
Реакции
7 870
Ответ: Загрузка LUT в видеокартах Intel Graphics

Наберите в командной строке regedit.
 

Serge_e

15 лет на форуме
Сообщения
1 299
Реакции
489
Ответ: Загрузка LUT в видеокартах Intel Graphics

Как же все-таки править реестр в Win7 для Интеловских видеокарт?

Если просто доступ к реестру - уже написали.

Если подразумевается запись в реестр данных для LUT - никак, где это живет именно в Win 7 найти тогда не удалось, а потом стало неактуально из-за относительно нормально работающего решения на базе стандартного софта MS.

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

lizard-b

Участник
Сообщения
2
Реакции
0
Ответ: Загрузка LUT в видеокартах Intel Graphics

Спасибо за ответы. Процесс igfxpers.exe я давно уже убрал из автозагрузки, благо этот метод в сети часто встречается. Есть ли еще процессы, которые стоит "убить"? У меня ситуация усложняется немного тем, что на ноуте стоит видеопара Intel HD Graphics 3000 и Nvidia GF 555M, работающие по технологии Optimus. И пока не могу победить ситуацию, когда при переходе в фуллскрин 3D слетает LUT.
 

splxgf

12 лет на форуме
Сообщения
7 743
Реакции
3 425
Ответ: Загрузка LUT в видеокартах Intel Graphics

Если ноут не мобильный, то можно попробовать отключить встроенное видео, оставив nvidia для всех режимов.
 
Статус
Закрыто для дальнейших ответов.