diff --git a/assembler/src/brw_structs.h b/assembler/src/brw_structs.h index 92a398e9..6a29f37c 100644 --- a/assembler/src/brw_structs.h +++ b/assembler/src/brw_structs.h @@ -1412,6 +1412,19 @@ struct brw_instruction GLuint end_of_thread:1; } dp_write_gen5; + struct { + GLuint binding_table_index:8; + GLuint msg_control:5; + GLuint msg_type:4; + GLuint send_commit_msg:1; + GLuint pad0:1; + GLuint header_present:1; + GLuint response_length:5; + GLuint msg_length:4; + GLuint pad1:2; + GLuint end_of_thread:1; + } dp_write_gen6; + struct { GLuint opcode:1; GLuint requester_type:1; diff --git a/assembler/src/gram.y b/assembler/src/gram.y index 2dab7a21..d5366256 100644 --- a/assembler/src/gram.y +++ b/assembler/src/gram.y @@ -650,7 +650,19 @@ msgtarget: NULL_TOKEN | WRITE LPAREN INTEGER COMMA INTEGER COMMA INTEGER COMMA INTEGER RPAREN { - if (gen_level == 5) { + if (gen_level == 6) { + $$.bits2.send_gen5.sfid = + BRW_MESSAGE_TARGET_DATAPORT_WRITE; + /* Sandybridge supports headerlesss message for render target write. + * Currently the GFX assembler doesn't support it. so the program must provide + * message header + */ + $$.bits3.generic_gen5.header_present = 1; + $$.bits3.dp_write_gen6.binding_table_index = $3; + $$.bits3.dp_write_gen6.msg_control = $5; + $$.bits3.dp_write_gen6.msg_type = $7; + $$.bits3.dp_write_gen6.send_commit_msg = $9; + } else if (gen_level == 5) { $$.bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_DATAPORT_WRITE; $$.bits3.generic_gen5.header_present = 1;