В 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).  * !!!  */  

©  OpenNet