Size: a a a

pro.graphon (and gamedev)

2020 May 10

TG

Timur Gagiev in pro.graphon (and gamedev)
Anatoly Tomilov
в HLSL я помнится делал if (i == 0) t = v.x; else if (i == 1) t = v.y; else t = v.z;. Наверное это к тому же и сведётся в итоге?
; --------  Disassembly --------------------
00 ALU: ADDR(32) CNT(8) KCACHE0(CB0:0-15)
     0  y: ADD         ____,  KC0[0].x, -1.0f      
        w: MAX_DX10    ____,  KC0[0].x, -KC0[0].x      
     1  x: SETGE       ____, -|PV0.y|,  |PV0.y|      
        z: SETGE       T0.z, -PV0.w,  PV0.w      
        w: ADD         ____,  KC0[1].y, -KC0[1].z      
     2  z: MULADD      T1.z,  PV1.w,  PV1.x,  KC0[1].z      
     3  y: ADD         ____,  KC0[1].x, -PV2.z      
     4  x: MULADD      R0.x,  T0.z,  PV3.y,  T1.z      
01 EXP_DONE: POS0, R0.xxxx
02 EXP_DONE: PARAM0, R0.____
END_OF_PROGRAM
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Timur Gagiev
; --------  Disassembly --------------------
00 ALU: ADDR(32) CNT(8) KCACHE0(CB0:0-15)
     0  y: ADD         ____,  KC0[0].x, -1.0f      
        w: MAX_DX10    ____,  KC0[0].x, -KC0[0].x      
     1  x: SETGE       ____, -|PV0.y|,  |PV0.y|      
        z: SETGE       T0.z, -PV0.w,  PV0.w      
        w: ADD         ____,  KC0[1].y, -KC0[1].z      
     2  z: MULADD      T1.z,  PV1.w,  PV1.x,  KC0[1].z      
     3  y: ADD         ____,  KC0[1].x, -PV2.z      
     4  x: MULADD      R0.x,  T0.z,  PV3.y,  T1.z      
01 EXP_DONE: POS0, R0.xxxx
02 EXP_DONE: PARAM0, R0.____
END_OF_PROGRAM
v[i]
; --------  Disassembly --------------------
00 ALU: ADDR(32) CNT(3) KCACHE0(CB0:0-15)
     0  y: F_TO_I_RPI  ____,  KC0[0].x      
     1  w: ADD_INT     R0.w,  PV0.y,  2      
01 TEX: ADDR(48) CNT(1)
     2  VFETCH R0.xyz_, R0.w, fc128  MEGA(16)
        FETCH_TYPE(NO_INDEX_OFFSET)
02 ALU: ADDR(35) CNT(5) KCACHE0(CB0:0-15)
     3  x: DOT4        R0.x,  KC0[1].x,  R0.x      
        y: DOT4        ____,  KC0[1].y,  R0.y      
        z: DOT4        ____,  KC0[1].z,  R0.z      
        w: DOT4        ____,  (0x80000000, -0.0f).x,  0.0f      
03 EXP_DONE: POS0, R0.xxxx
04 EXP_DONE: PARAM0, R0.____
END_OF_PROGRAM
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
а ну здесь без jump-ов
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
или я ошибаюсь?
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
всё верно, но код всё равно стрёмный )
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
dot4 — сильно тяжёлая операция?
источник
2020 May 11

TG

Timur Gagiev in pro.graphon (and gamedev)
облом, современный GCN выглядит иначе
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
buffer_load? Indexable temps в память выгружаются?
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
хотя, там, вроде, s_ было
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
вариант с if'ами
// Could not retrieve the shader metadata
 s_mov_b32                vcc_hi, #0x0000000d
 s_buffer_load_dword      s4, s[0:3], 0x00
 s_waitcnt                lgkmcnt(0)
 s_cmp_lg_i32             1, s4
 s_cselect_b64            vcc, exec, 0
 s_cmp_lg_i32             0, s4
 s_cbranch_scc0           label_main_0038
 s_and_b64                vcc, exec, vcc
 s_cbranch_vccz           label_main_0030
 s_buffer_load_dword      s0, s[0:3], 0x03
 s_branch                 label_main_003C
label_main_0030:
 s_buffer_load_dword      s0, s[0:3], 0x02
 s_branch                 label_main_003C
label_main_0038:
 s_buffer_load_dword      s0, s[0:3], 0x01
label_main_003C:
 s_waitcnt                lgkmcnt(0)
 v_mov_b32                v0, s0
 exp                      pos0, v0, v0, v0, v0 done
 v_mov_b32                v1, 0
 exp                      param0, v1, v1, v1, v1
 s_endpgm                


v[i]
// Could not retrieve the shader metadata
 s_mov_b32                vcc_hi, #0x0000000a
 v_mov_b32                v0, 0
 s_buffer_load_dword      s4, s[0:3], 0x00
 s_buffer_load_dwordx4    s[0:3], s[0:3], 0x00
 s_waitcnt                lgkmcnt(0)
 s_cmp_eq_i32             s4, 1
 s_cselect_b32            vcc_lo, s2, s1
 s_cmp_eq_i32             s4, 2
 s_cselect_b32            vcc_lo, s3, vcc_lo
 v_mov_b32                v1, vcc_lo
 exp                      pos0, v1, v1, v1, v1 done
 exp                      param0, v0, v0, v0, v0
 s_endpgm
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Да тут всё скалярное, это не интересно)
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Да тут всё скалярное, это не интересно)
int i;
float4 v[64]
// Could not retrieve the shader metadata
 s_mov_b32                vcc_hi, #0x0000000b
 s_buffer_load_dword      s4, s[0:3], 0x00
 s_waitcnt                lgkmcnt(0)
 s_mul_i32                vcc_lo, s4, 16
 s_add_i32                s4, vcc_lo, 16
 s_buffer_load_dwordx4    s[0:3], s[0:3], s4
 s_waitcnt                lgkmcnt(0)
 v_mov_b32                v0, s0
 v_mov_b32                v1, s1
 v_mov_b32                v2, s2
 v_mov_b32                v3, s3
 exp                      pos0, v0, v1, v2, v3 done
 s_waitcnt                expcnt(0)
 v_mov_b32                v0, 0
 exp                      param0, v0, v0, v0, v0
 s_endpgm
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
а оптимизация включена в первом случае?
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Но на AMD, как я понимаю, труъ indexable temps есть. По крайней мере, исторически. Как раз на Xbox 360 есть r[#+a0], и на R600 тоже, вроде
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Anatoly Tomilov
а оптимизация включена в первом случае?
есессна
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
что-то не очень красивое с indexable temps получается
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
что-то не очень красивое с indexable temps получается
ну ты ему прям шанса не дал )
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
что-то не очень красивое с indexable temps получается
можешь текстом скинуть шейдер?
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Timur Gagiev
можешь текстом скинуть шейдер?
float4 main(float f : TEXCOORD0, uint2 i : TEXCOORD1) : SV_Target {
   float v[сколько-нибудь];
   v[i.x] = f;
   return v[i.y].xxxx;
}
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
или ты про то, что получилось?
источник