вечерние чтения

Было скучно под вечер. Решил почитать дампы NV50, которые нарулили пацаны с Нуво. Вот репозиторий: http://people.freedesktop.org/~kmeyer/renouveau_dumps/

Нвидия традиционно радует.

Вот смотрю на такой забавный фрагментик:

00042f00 size 1, subchannel 1 (0xbeef5097),offset 0x0f00,increment
00000003 NvObject0297[0x0f00/4]
40102f04 size 4, subchannel 1 (0xbeef5097),offset 0x0f04,constant
3ee66666 NvObject0297[0x0f04/4]
00000000 NvObject0297[0x0f04/4]
00000000 NvObject0297[0x0f04/4]
3f800000 NvObject0297[0x0f04/4]

В регистр номер три записывается векторок { 0.45f, 0.0f, 0.0f, 1.0f };

Интересно, зачем этот векторок записывается? Ай, мама, это константа пиксельного шейдера!

# Testing:
# !!ARBfp1.0
# OPTION NV_fragment_program2;
# TEMP t0, t1, t2;
# ADD t0, fragment.color, {0.45};
# NRM result.color, t0;
#
# END

Сразу возникает вопрос. Почему константа устанавливается прямо из командного буфера? Вроде NV50 это DX10 железо, а в DX10 константы лежат в каких-то там буферах. Извилины мозга скрипят, приходит решение – тьфу ты, константа зашита в тело шейдера, это просто удобный способ пропатчить константный буфер. Проверяю, смотрю дамп, где устанавливается glModelView матрица. Фиг. Там тоже константы посылаются через командный буфер. Шевелю извилинами еще, думаю разное. Что драйверы не финальные, что OpenGL, что есть много способов задать константу. Интересно!

Параллельно читаю документацию про R500 от ATI. http://www.x.org/docs/AMD/ ( спасибо Zeux за линк!). Там скучно, аж сводит скулы. Никаких открытий чудных, все скромненько, аккуратненько. Пролистал до середины, зевнул, закрыл.

Подумал, почему NVidia суждено победить ( в отличие от ). У них есть огонь благородного безумия. Вычурной ебанутости, я бы сказал.

  • belaz

    А nv50 – это что?
    Вроде же после nv4x пошла линейка G7x… Т.е. в миру за GF6*00 -> GF7*00.

  • IronPeter

    Это DX10 железо. GF8XXX линейка.