Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Pixel Bender/AGAL (http://www.flasher.ru/forum/forumdisplay.php?f=100)
-   -   Перевести D3D Assembly в AGAL (http://www.flasher.ru/forum/showthread.php?t=196247)

Tails 21.03.2013 13:22

Перевести D3D Assembly в AGAL
 
Помогите перевести код из D3D Assembly в AGAL. Шейдер изначально написан на HLSL, затем конвертирован в D3D Assembly:
Код:

//
// Generated by Microsoft (R) HLSL Shader Compiler 9.22.949.2248
//
// Parameters:
//
//  float2 map;
//  float2 offset;
//  float2 rate;
//  float resolution;
//  float2 velacity;
//
//
// Registers:
//
//  Name        Reg  Size
//  ------------ ----- ----
//  resolution  c0      1
//  rate        c1      1
//  offset      c2      1
//  velacity    c3      1
//  map          c4      1
//

    vs_2_0
    def c5, 0.0199999996, 1, 0.00200000009, -1
    def c6, 0, 1, 0, 0
    dcl_position v0
    dcl_texcoord v1
    mul r0.xy, c3, c3
    add r0.x, r0.y, r0.x
    rsq r0.x, r0.x
    rcp r0.y, r0.x
    mul r0.xz, r0.x, c3.xyyw
    mad r0.w, r0.y, c5.x, c5.y
    mad r0.y, r0.y, -c5.z, c5.y
    mul r0.y, r0.y, -v0.y
    mul r0.w, r0.w, v0.x
    mul r1.xy, r0.xzzw, r0.w
    mad r0.z, r0.y, -r0.z, r1.x
    mad r0.w, r0.y, r0.x, r1.y
    mul r0.xy, r0.zwzw, c1
    rcp r0.z, c4.x
    rcp r0.w, c4.y
    mul r0.zw, r0, c2.xyxy
    add r0.zw, r0, r0
    mad r0.xy, r0, c0.x, r0.zwzw
    add oPos.xy, r0, c5.w
    mov oPos.zw, c6.xyxy
    mov oT0.xy, v1

// approximately 21 instruction slots used

Вот что получилось у меня в AGAL:
Код AS3:

                        "mov vt7, vc3\n" + // не дает производить действия над 2 константами
                        "mul vt0.xy, vc3, vt7\n" +
                        "add vt0.x, vt0.y, vt0.x\n" +
                        "rsq vt0.x, vt0.x\n" +
                        "rcp vt0.y, vt0.x\n" +
                        "mul vt0.xz, vt0.x, vc3.xyyw\n" +
 
                        //"mad vt0.w, vt0.y, vc6.x, vc6.y\n" +
                        "mul vt0.w, vt0.y, vc6.x\n" +
                        "add vt0.w, vt0.w, vc6.y\n" +
 
                        //"mad vt0.y, vt0.y, -vc6.z, vc6.y\n" +
                        "mul vt0.y, vt0.y, -vc6.z\n" +
                        "add vt0.y, vt0.y, vc6.y\n" +
 
                        "mul vt0.yw, vt0, va0.xyzx\n" +
                        "mul vt1.xy, vt0.xzzw, vt0.w\n" +
 
                        //"mad vt0.z, vt0.y, -vt0.z, vt1.x\n" +
                        "mul vt0.z, vt0.y, -vt0.z\n" +
                        "add vt0.z, vt0.z, vt1.x\n" +
 
                        //"mad vt0.w, vt0.y, vt0.x, vt1.y\n" +
                        "mul vt0.w, vt0.y, vt0.x\n" +
                        "add vt0.w, vt0.w, vt1.y\n" +
 
                        "mul vt0.xy, vt0.zwzw, vc1\n" +
                        "mov vt7, vc4\n" +
                        "rcp vt0.z, vt7.x\n" +
                        "rcp vt0.w, vt7.y\n" +
                        "mul vt0.zw, vt0, vc2.xyxy\n" +
                        "add vt0.zw, vt0, vt0\n" +
 
                        //"mad vt0.xy, vt0, vc0.x, vt0.zwzw\n" +
                        "mul vt0.xy, vt0, vc0.x\n" +
                        "add vt0.xy, vt0.xy, vt0.zwzw\n" +
 
                        "add op.xy, vt0, vc6.w\n" +
                        "mov op.zw, vc5.xy\n" +
                        "mov v1, va1\n" + // На эти не обращайте внимание, просто нужны что-бы код скомпилировался
                        "mov v0, vc8\n"

Наверное, я не правильно преобразовал операций mad, изначально в виде:
Код AS3:

"mad vt0.xy, vt0, vc0.x, vt0.zwzw\n" +

в это:
Код AS3:

"mul vt0.xy, vt0, vc0.x\n" +
"add vt0.xy, vt0.xy, vt0.zwzw\n" +


Волгоградец 03.04.2013 14:18

Привет. Может припоздал немного...
Преобразовал правильно. Вот это неправильно:
Код AS3:

"mul vt0.y, vt0.y, -vc6.z\n"

Знак минус игнорируется вроде.

Tails 03.04.2013 14:35

ясна спс


Часовой пояс GMT +4, время: 05:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.