#### Краткий FAQ:
- _Когда использовать WhateverGreen?_  
В macOS 10.11 и выше (возможно и в 10.10) с видеокартами ATI/AMD 5xxx и новее.  
Проверить все серии видеокарт и их конфигурации возможности нет, используйте на свой страх и риск.

- _Как получить подробный лог?_  
Установить DEBUG версии WhateverGreen и Lilu, добавить `-wegdbg -liludbg` в аргументы загрузки. После запуска выполнить команду в терминале:  
`log show --predicate 'process == "kernel" AND (eventMessage CONTAINS "WhateverGreen" OR eventMessage CONTAINS "Lilu")' --style syslog --source`  
Для macOS 10.11 и старее использовать:  
`cat /var/log/system.log | egrep '(WhateverGreen|Lilu)'`  
Следует обратить внимание, что если проблема с видеокартой, то лог можно получить через SSH. В этом случае стоит также проверить вывод `kextstat`.

- _Каково состояние поддержки 10.13?_  
В момент выпуска 10.13 находится на стадии тестирования, потому об официальной поддержке речи не идёт. Известны случаи незапуска графики на чипсетах старше Nehalem. Если у вас имеется подобное железо, воздержитесь от обновления. В остальных случаях WhateverGreen может работать, при условии отстутствия значительных изменений в 10.13.

- _Какие прочие аппаратные требования для WhateverGreen?_  
UEFI без использования CSM. В случае отсутствия поддержки UEFI видеокартой, её крайне желательно перешить. Непрошитая карта с высокой долей вероятности создаст проблемы при использовании нескольких мониторов или даже с одним монитором. Используйте материнские платы без UEFI на свой страх и риск. Известны проблемы мультимониторных конфигураций при использовании 2 и более видеокарт.

- _Как прошить видеокарту?_  
Для самого процесса прошивки можно проследовать [этой инструкции](https://www.techpowerup.com/forums/threads/amd-ati-flashing-guide.212849/). Для создания прошивки можно использовать [эту инструкцию](http://www.win-raid.com/t892f16-AMD-and-Nvidia-GOP-update-No-requests-DIY.html). Также существует [утилита](http://www.insanelymac.com/forum/topic/299614-asus-eah6450-video-bios-uefi-gop-upgrade-and-gop-uefi-binary-in-efi-for-many-ati-cards/#entry2042163) и для macOS, но в случае её использование паддинг придётся убирать вручную.

- _В каких случаях стоит ли использовать именной фреймбуфер?_  
Именной фреймбуфер (Baladi, Futomaki, Lotus и др.), включаемый "инжектом Clover" или любым другим способом, не следует использовать _ни при каких обстоятельствах_. Такой способ запуска видеокарты — распространённое заблуждение, приводящее к отключению автоматического конфигурирования множества важных параметров. В результате с высокой долей вероятности видеокарта будет работать неправильно.

- _Как и в каких случаях необходимо использовать собственные коннекторы?_  
В большинстве случаев автоматическое детектирование коннекторов из видеобиоса, реализованное в кекстах Apple, работает без нареканий. Логика его работы описана в [reference.cpp](https://github.com/vit9696/WhateverGreen/blob/master/Manual/reference.cpp). К сожалению, некоторые производители видеокарт распаивают произвольные коннекторы, но не изменяют их в видеобиосе. В результате автодектирование создаёт несовместимые коннекторы. Более корректным решением является исправление данных в видеобиосе, но использование кастомных коннекторов проще.  
Для некоторых видеокарт (например, 290, 290X и возможно других) в WhateverGreen есть автоматическая коррекция, включаемая с помощью аргумента загрузки `-raddvi`. Доя всех остальных карт существует возможность указать пользовательские коннекторы  в качестве свойства контроллера видеокарты `connectors`, например, через SSDT. Указывать коннекторы можно как в 24-байтном, так и в 16-байтном формате, они будут адаптированы под запущенную систему. Если нужно указать число коннектров больше или меньше, чем определяется автоматически, то необходимо также указать свойство `connector-count`. Просмотреть автодетектированные коннекторы можно в отладочном логе WhateverGreen.

- _Как изменить приоритет мониторов?_  
С видеокартами 7xxx достаточно указания свойства `connector-priority`, перечислив sense id (можно посмотреть в режиме подробного логирования) в порядке важности. Данное свойство иногда помогает решить проблему чёрного экрана в особенности на мультимониторных конфигурациях.  
Без данного свойства приоритет всех коннекторов остаётся 0. При наличии оставшихся sense id без приоритета коннекторы сортируются по типам: LVDS, DVI, HDMI, DP, VGA. Подробности указаны в [примере SSDT](https://github.com/acidanthera/WhateverGreen/blob/master/Manual/Sample.dsl).

- _Какие свойства нужно инжектировать для завода видеокарты?_  
Минимум необходимых! Добавлять нужно устройство `HDAU` в контроллер видеокарты, свойства `hda-gfx` с соответствующим номером числу имеющихся кодеков аудио, по сути всё. Если требуется маскировка на поддерживаемую видеокарту, указывать следует только `device-id`. Разумно добавлять некоторые косметические свойства: `AAPL,slot-name` (отображаемое имя слота в свойствах системы), `@X,AAPL,boot-display` (частично исправляет лого при загрузке), `model` (название видеокарты, если автоматика не справилась).  
Не самый идеальный [пример SSDT](https://github.com/acidanthera/WhateverGreen/blob/master/Manual/Sample.dsl) для общего понимания.

- _Какие дополнительные свойства нужно инжектировать для мобильных видеокарт?_  
Мобильные видеокарты AMD при условии физической связи между экраном и картой (т.е. поколения до AMD Switchable Graphics) проблем практически не имеют. В большинстве случаев необходимо инжектировать видеобиос (свойство `ATY,bin_image`) размера 64 килобайт. С этого момента внешние экраны должны функционировать. Для работы внутреннего экрана часто необходим инжект EDID (свойство `AAPL00,override-no-connect`) и установка представления цветового канала в 6 бит (свойства `@0,display-link-component-bits` и `@0,display-pixel-component-bits`). Для разрешение выше 1600x900 может также потребоваться установка `@0,display-dual-link` в 1.  
Подробности указаны в [примере SSDT](https://github.com/acidanthera/WhateverGreen/blob/master/Manual/Sample.dsl).  

- _Как указать более тонкую настройку видеокарты?_  
Видеокарты ATI/AMD настраиваются с помощью параметров `aty_config`, `aty_properties`, которые можно найти в Info.plist кекстов AMDxxxxController.kext. Различные фреймбуферы используют эти параметры для достижения пониженного энергопотребления, повышенной производительности и подобного. К сожалению, в большинстве случаев предустановленные конфигурации не приводят к положительному результату для большинства видеокарт.  
Для получения оптимальной конфигурации WhateverGreen позволяет изменять эти параметры по отдельности вручную посредством указания их в качестве свойств контроллера видеокарты. Для `aty_config` используется префикс `CFG,`, для `aty_properties` используется префикс `PP,`, для `cail_properties` из Info.plist кекстов AMDRadeonXxxxx.kext — `CAIL,`. Таким образом, для обновления значения `CFG_FB_LIMIT` в `aty_config` необходимо использовать свойство `CFG,CFG_FB_LIMIT`.  
Детали описаны в [примере SSDT](https://github.com/acidanthera/WhateverGreen/blob/master/Manual/Sample.dsl).

- _Когда необходим аргумент загрузки `radpg`?_  
Данный аргумент — замена оригинальному патчу Info.plist AMDRadeonX4000.kext для запуска видеокарт HD 7730/7750/7770/R7 250/R7 250X от igork. WhateverGreen не совместим с Verde.kext, и его нужно удалить. Аргумент позволяет принудительно включить часть флагов технологии power-gating, например, CAIL_DisableGfxCGPowerGating. Значение является битовой маской из CAIL_DisableDrmdmaPowerGating, CAIL_DisableGfxCGPowerGating, CAIL_DisableUVDPowerGating, CAIL_DisableVCEPowerGating, CAIL_DisableDynamicGfxMGPowerGating, CAIL_DisableGmcPowerGating, CAIL_DisableAcpPowerGating, CAIL_DisableSAMUPowerGating. Так `radpg=15` активирует первые четыре ключа.  
Начиная с версии 1.0.3, идентичного результата можно добиться с помощью указания необходимых свойств в контроллер видеокарты (например, `CAIL,CAIL_DisableGfxCGPowerGating`). Данный способ лучше, так как позволяет настроить каждую из установленных видеокарт раздельно.

- _Как изменить название видеокарты?_  
Кекст контроллера (например, AMD6000Controller) при автоматической инициализации заменяет название видеокарты на обобщённое (например, AMD Radeon HD 6xxx). Инжектирование свойств и отключение этого лишь приведёт к сломанному автодетекту коннекторов, потому исключительно не рекомендуется. WhateverGreen пытается автоматически определить название карты, если оно не задано. Если название определяется неверно (например, в случае маскировки device-id или использования новой карты), достаточно указать верное название в свойстве `model`. Все вопросы по корректности автоматического определния должны быть отправлены в [The PCI ID Repository](http://pci-ids.ucw.cz). В исключительных случаях вы можете отправить [патч](https://github.com/vit9696/WhateverGreen/pulls) для [kern_model.cpp](https://github.com/vit9696/WhateverGreen/blob/master/WhateverGreen/kern_model.cpp). На функционирование карты название никак не влияет.

- _Что делать, если видеокарта для просыпания требует нескольких нажатий на клавиатуре?_  
Если это действительно беспокоит, можно подождать чуть дольше или попробовать добавить аргумент загрузки `darkwake=0`.

- _Как читать версию драйвера EFI?_  
Данное значение устанавливается WhateverGreen для отладки. Например, WEAD-102-2017-08-03 означает WhateverGreen с автоматическим фреймом (RadeonFramebuffer), DEBUG версия 1.0.2, скомпилированная 03.08.2017. Третья буква может быть F (для фейкового фрейма) и B (для некоторректных значений). Четвёртая буква может быть R для RELEASE версий.

- _Как понять, что видеокарта инициализируется правильно?_  
Один из наиболее простых показателей — время загрузки. При неправильном заводе загрузка происходит на 30 секунд дольше.

- _Нормально ли иметь в названии движка OpenGL/OpenCL `Prototype`?_  
Да, нормально. В процессе обратной разработки удалось выяснить, что отображаемое название никак не влияет на производительность. Напротив, попытки поменять данное название патчем идентификаторов в кекстах (например, AMDRadeonX4000) могут привести к нестабильной работе системы. Для безалаберно написанных приложений, работающих неправильно с подобными названиями можно использовать `libWhateverName.dylib`.

- _Как использовать IGPU?_  
В большинстве случаев желательно использовать IGPU для декодирования видео (с заводом на фрейм без коннекторов). В случае необходимости дополнительных мониторов возможно активировать IGPU полностью. При использовании WhateverGreen аргумент загрузки `-radlogo` не требуется.

- _Как получить рабочее аппаратное декодирование видео?_  
Обычно это задача IGPU, заведённой на фрейм без коннекторов. На некоторых видеокартах (например, HD 7870, HD 6670, HD 7970) можно завести аппаратный декодер AMD. Подробности в [FAQ Shiki](https://github.com/acidanthera/WhateverGreen/blob/master/Manual/FAQ.Shiki.ru.md). На моделях с принудительным forceOfflineRenderer может потребоваться аргумент загрузки `shikigva=1`.

- _Зачем принудительно выставлять 24-битный вывод цвета?_  
На некоторых мониторах нет поддержки 30-битного цвета, при этом видеокарта об этом может не знать. В результате цвета на экране будут мигать с искажениями. Для решения проблемы необходимо либо приобрести другой экран, либо добавить аргумент загрузки `-rad24`.  

- _Как заставить работать HDMI звук?_  
В большинстве случаев достаточно автоматического исправления HDAU в AppleALC, производящего переименование устройства в HDAU, и добавляющего отсутствующие свойства layout-id и hda-gfx (начиная с onboard-1). При использовании двух карт разных производителей (например, AMD/ATI и NVIDIA) свойства необходимо прописывать вручную. Также можно использовать аргумент загрузки `-radnoaudio` или свойство контроллера видеокарты `no-audio-autofix`, которые явно запрещают автоматическое внесение свойств цифрового аудио в карту.  
В случае отсутствия совместимых идентификаторов в AppleHDAController и AppleHDA необходимо их добавить с помощью патчей ([пример для 290X](https://github.com/acidanthera/AppleALC/commit/cfb8bef310f31fd330aeb4e10623487a6bceb84d#diff-6246954ac288d4f6dd7eb780c006419d) из AppleALC).

- _Почему количество фреймбуферов стало превышать количество коннекторов (начиная с 10.13.2)?_   
Причиной является баг, который внесли Apple, исправляя другой баг. В некоторых кекстах (например, AMD9500Controller) они принудительно указывают 6 коннекторов как число доступных вне зависимости от полученного значения из видеобиоса. Как следствие, возникает чёрный экран при пробуждении или видеокарту невозможно отправить в сон.  
Для исправления необходимо указать корректное значение коннекторов в `CFG,CFG_FB_LIMIT`, например, с помощью SSDT. Начиная с версии 1.1.4, данная проблема исправляется автоматически.

- _Почему может не просыпаться подключённый по DisplayPort монитор с высоким разрешением (например, некоторые LG 4K)?_  
Иногда причиной является опция AGDC в конфигурации. Для 4K и ниже мониторов имеет смысл попробовать её выключить посредством указания `CFG,CFG_USE_AGDC` — False (`00`) с помощью SSDT или аналогов.

- _Как сконфигурировать политику управления нагрузкой (workload policy)?_  
Политика управления нагрузкой — это профиль оптимизации производительности для графической карты. В зависимости от политики ГПУ может потреблять меньше энергии или работать более отзывчиво. Настройка политики управления нагрузкой выполняется посредством указания `PP,PP_WorkLoadPolicyMask` с числом, соответствующим набору бит в маске: `0x01` — DEFAULT_WORKLOAD (по умолчанию), `0x02` — FULLSCREEN3D_WORKLOAD, `0x04` — POWERSAVING_WORKLOAD, `0x08` — VIDEO_WORKLOAD, `0x10` — VR_WORKLOAD, `0x20` — COMPUTE_WORKLOAD, `0x40` — CUSTOM_WORKLOAD.

- _Как принудительно активировать загрузку прошивки SMU?_  
SMU — это сложно-функциональный блок, имеющийся в некоторых современных ГПУ (X5000 и новее). Данный блок используется для некоторых задач управления питанием и требует загрузки специальной прошивки на уровне драйвера. Прошивка загружается в случае наличия свойства `ATY,EFIVersion` с любым значением (т.е. указывается, что данная ГПУ имеет видеобиос производства Apple) или когда указано свойство `Force_Load_FalconSMUFW` со значением `kOSBooleanTrue` (в случае с WEG также можно передать 1 байт: `01`).
