ฉันไปหาคำตอบดังนั้นฉันจึงดาวน์โหลดตัววิเคราะห์ shader ของ AMD เพื่อดูชุดประกอบที่สร้างขึ้นเมื่อรวบรวมสำหรับ GCN ในการชุมนุมด้านล่างเวกเตอร์ลงทะเบียนเป็น v # และเซนต์คิตส์และเนวิสเป็น s #
ดูเหมือนว่าเครื่องแบบแม้ชุดเครื่องแบบเวกเตอร์จะถูกส่งผ่านไปยัง shader เป็นสเกลาร์แยกดังนั้น vec3 จะใช้สเกลาร์ 3 รีจิสเตอร์ บิตที่ฉันพบว่าสับสนคือ v0 ถึง v4 ฉันไม่แน่ใจว่า v0 นั้นเป็น 4 register แบบเต็มหรือแบบ float เดียวใน register โดยมี vector register แบบเต็มซึ่งครอบคลุม v0 ถึง v3 ไม่ทางใดก็ทางหนึ่งดูเหมือนว่าจะไม่เปลี่ยนแปลงระหว่างสองเวอร์ชันดังนั้นฉันจึงสามารถสมมติว่าลำดับความหมายไม่ส่งผลกระทบต่อแอสเซมบลี
http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/07/AMD_GCN3_Instruction_Set_Architecture.pdf
#version 450
uniform vec2 xy;
uniform vec2 zw;
out vec4 v;
void main(){
v.xy = xy;
v.zw = zw;
}
shader
asic(VI)
type(VS)
v_cndmask_b32 v0, s0, v0, vcc
v_mov_b32 v0, 0
v_mov_b32 v1, 1.0
exp pos0, v0, v0, v0, v1 done
s_andn2_b32 s0, s5, 0x3fff0000
s_mov_b32 s1, s0
s_mov_b32 s2, s6
s_mov_b32 s3, s7
s_mov_b32 s0, s4
s_buffer_load_dwordx2 s[4:5], s[0:3], 0x00
s_buffer_load_dwordx2 s[0:1], s[0:3], 0x10
s_waitcnt expcnt(0) & lgkmcnt(0)
v_mov_b32 v0, s4
v_mov_b32 v1, s5
v_mov_b32 v2, s0
v_mov_b32 v3, s1
exp param0, v0, v1, v2, v3
end
#version 450
uniform vec2 xy;
uniform float z;
uniform vec2 zw;
out vec4 v;
void main(){
v.xy = xy;
v.zw = zw;
v.w += z;
}
shader
asic(VI)
type(VS)
v_cndmask_b32 v0, s0, v0, vcc
v_mov_b32 v0, 0
v_mov_b32 v1, 1.0
s_andn2_b32 s0, s5, 0x3fff0000
exp pos0, v0, v0, v0, v1 done
s_mov_b32 s1, s0
s_mov_b32 s2, s6
s_mov_b32 s3, s7
s_mov_b32 s0, s4
s_buffer_load_dword s4, s[0:3], 0x10
s_buffer_load_dwordx2 s[6:7], s[0:3], 0x00
s_buffer_load_dwordx2 s[0:1], s[0:3], 0x20
s_waitcnt expcnt(0) & lgkmcnt(0)
v_mov_b32 v0, s4
v_add_f32 v0, s1, v0
v_mov_b32 v1, s6
v_mov_b32 v2, s7
v_mov_b32 v3, s0
exp param0, v1, v2, v3, v0
end
s_buffer_load_dword
คำแนะนำ - ส่วนที่อ่านชุดป้อนข้อมูลและหมายเลขสุดท้ายในฐานสิบหกคือออฟเซ็ตที่จะอ่าน มันแสดงให้เห็นในกรณีแรกxy
คือออฟเซ็ต 0 และzw
ออฟเซ็ต 16 ในกรณีที่สองคุณมีxy
ออฟเซ็ต 0z
ที่ออฟเซ็ต 16 และzw
ออฟเซ็ต 32 ปรากฏว่าเครื่องแบบทั้งหมดมีการจัดเรียงแบบ 16 ไบต์และไม่บรรจุ ด้วยกันหรือจัดลำดับใหม่