Адбоэ АГАЛ перепутал насчет регистров

Я немного запутался в регистрах.

в этой статье http://www.adobe.com/devnet/flashplayer/articles/what-is-agal.html

там есть двухстрочный код AGAL

m44 op, va0, vc0
mov v0, va1

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

так какой смысл делать первую строчку?

также я нашел демо:

//compile vertex shader
var vertexShader:Array =
    [
    "dp4 op.x, va0, vc0", //4x4 matrix transform from 0 to output clipspace
    "dp4 op.y, va0, vc1",
    "dp4 op.z, va0, vc2",
    "dp4 op.w, va0, vc3",
    "mov v0, va1.xyzw"    //copy texcoord from 1 to fragment program
    ];
var vertexAssembler:AGALMiniAssembler = new AGALMiniAssembler();
vertexAssembler.assemble(flash.display3D.Context3DProgramType.VERTEX, vertexShader.join("\n"));

//compile fragment shader
var fragmentShader:Array =
    [
    "mov ft0, v0\n",
    "tex ft1, ft0, fs1 <2d,clamp,linear>\n", //sample texture 1     
    "mov oc, ft1\n"
    ];

в vertexShader три верхние строки также помещают reslut в op, но четвертая строка также не использует его.

так что это значит?

Благодарность


person Tunied    schedule 13.12.2012    source источник


Ответы (1)


Первая строка просто умножает текущую позицию вершины и матрицу Модель-Вид-Проекция и записывает результат в выходной регистр.

Вторая строка использует переменный регистр для передачи некоторых данных в пиксельный шейдер. Поскольку эти две строки - это весь код, который я могу видеть, все, что я могу сказать, это то, что va1, вероятно, содержит UV-координаты текстуры.

person Varnius    schedule 13.12.2012
comment
да, значит нет связи между первой строкой и второй? Могу ли я интерпретировать, что, наконец, графический процессор будет обрабатывать данные в регистрах op и oc? во второй демонстрации, верхние 3 строки в vertexShader уже выполнили вычисление и поместили результат в op, четвертая строка используется для помещения данных в v0, которые будут использоваться в fragmentShader, а затем во fragmentShader все данные будут сохранены в oc. после этого GPU может начать оперировать данными в op и oc? я правильно? Благодарность - person Tunied; 13.12.2012
comment
Нет связи, обе линии делают разные вещи. И пиксельные, и вершинные шейдеры выполняются на графическом процессоре в таком порядке: вершинные шейдеры ›вырезка вершин (выполняется внутри GPU)› пиксельные шейдеры. Следовательно, GPU управляет всем с момента запуска первого вершинного шейдера. - person Varnius; 13.12.2012