В Gallium-драйвере для R600 исправлена проблема, приводившая к зависаниям GPU при попытке использования HyperZ

Представлены патчи для драйвера R600, устраняющие зависания GPU при попытке использования hyper-z. Как известно, некоторое время назад была реализована поддержка данной возможности и обнаружено, что GPU может попросту повиснуть, хотя все сделано в соответствии с документацией.

Изучение ситуации показало, что причиной является аппаратная ошибка, которая однако не описана в общедоступных errata. Более того, маловероятно, что даже те кто писал закрытый драйвер смогут вспомнить как именно они обходным путем решили эту проблему. В конечном итоге, разработчикам пришлось смотреть на то как генерирует потоки команд закрытый драйвер и смотреть в чем состоят отличия при генерации потока команд в открытом драйвере. В результате удалось привести генерацию потока команд открытым драйвером в форму, при которой GPU не зависает.

Представленный патч начинается предупреждением:

/* !!!
* To avoid GPU lockup registers must be emited in a specific order
* (no kidding ...). The order below is important and have been
* partialy infered from analyzing fglrx command stream.
*
* Don't reorder atom without carefully checking the effect (GPU lockup
* or piglit regression).
* !!!
*/ 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.