diff --git a/assembler/gram.y b/assembler/gram.y index e234fb54..bc0e1e6a 100644 --- a/assembler/gram.y +++ b/assembler/gram.y @@ -220,7 +220,7 @@ sendinstruction: predicate SEND execsize INTEGER post_dst payload msgtarget $$.bits3.generic.msg_length = $9; $$.bits3.generic.response_length = $11; $$.bits3.generic.end_of_thread = - $12.bits3.generic.msg_target; + $12.bits3.generic.end_of_thread; } specialinstruction: NOP @@ -274,10 +274,20 @@ msgtarget: NULL_TOKEN $$.bits3.generic.msg_target = BRW_MESSAGE_TARGET_DATAPORT_READ; } - | WRITE + | WRITE LPAREN INTEGER COMMA INTEGER COMMA INTEGER COMMA + INTEGER RPAREN { $$.bits3.generic.msg_target = BRW_MESSAGE_TARGET_DATAPORT_WRITE; + $$.bits3.dp_write.binding_table_index = $3; + /* The msg control field of brw_struct.h is split into + * msg control and pixel_scoreboard_clear, even though + * pixel_scoreboard_clear isn't commot to all write messages. + */ + $$.bits3.dp_write.pixel_scoreboard_clear = ($5 & 0x8) >> 3; + $$.bits3.dp_write.msg_control = $5 & 0x7; + $$.bits3.dp_write.msg_type = $7; + $$.bits3.dp_write.send_commit_msg = $9; } | URB { diff --git a/assembler/packed_yuv_wm.g4a b/assembler/packed_yuv_wm.g4a index 9efde1de..d312d170 100644 --- a/assembler/packed_yuv_wm.g4a +++ b/assembler/packed_yuv_wm.g4a @@ -144,7 +144,12 @@ mac.sat (8) m8<1>F g15<8,8,1>F 1F { align1 }; */ mov (8) m1<1>UD g1<8,8,1>UD { align1 mask_disable }; /* Send framebuffer write message: XXX: acc0? */ -send (16) 0 null g0<8,8,1>UW write mlen 10 rlen 0 { align1 EOT }; +send (16) 0 null g0<8,8,1>UW write ( + 0, /* binding table index 0 */ + 8, /* pixel scoreboard clear */ + 4, /* render target write */ + 0 /* no write commit message */ + ) mlen 10 rlen 0 { align1 EOT }; /* padding */ nop; nop;