#define BRW_MESSAGE_TARGET_THREAD_SPAWNER 7
#define BRW_MESSAGE_TARGET_VME 8
#define BRW_MESSAGE_TARGET_DP_CC 9 /* data port constant cache */
+#define BRW_MESSAGE_TARGET_DP_DC 10 /* data port data cache */
#define BRW_SAMPLER_RETURN_FORMAT_FLOAT32 0
#define BRW_SAMPLER_RETURN_FORMAT_UINT32 2
struct {
GLuint binding_table_index:8;
- GLuint msg_control:6;
+ GLuint msg_control:5;
GLuint msg_type:4;
+ GLuint send_commit_msg:1; /* ignore on read message */
GLuint pad0:1;
GLuint header_present:1;
GLuint response_length:5;
GLuint msg_length:4;
GLuint pad1:2;
GLuint end_of_thread:1;
+ } dp_gen6;
+
+ struct {
+ GLuint binding_table_index:8;
+ GLuint msg_control:6;
+ GLuint msg_type:4;
+ GLuint category:1;
+ GLuint header_present:1;
+ GLuint response_length:5;
+ GLuint msg_length:4;
+ GLuint pad1:2;
+ GLuint end_of_thread:1;
} dp_gen7;
struct {
%token <integer> PUSH MREST POP WAIT DO ENDIF ILLEGAL
%token <integer> MATH_INST
-%token NULL_TOKEN MATH SAMPLER GATEWAY READ WRITE URB THREAD_SPAWNER VME
+%token NULL_TOKEN MATH SAMPLER GATEWAY READ WRITE URB THREAD_SPAWNER VME DATA_PORT
%token MSGLEN RETURNLEN
%token <integer> ALLOCATE USED COMPLETE TRANSPOSE INTERLEAVE
YYERROR;
}
}
+
+ | DATA_PORT LPAREN INTEGER COMMA INTEGER COMMA INTEGER COMMA
+ INTEGER COMMA INTEGER COMMA INTEGER RPAREN
+ {
+ $$.bits2.send_gen5.sfid = $3;
+ $$.bits3.generic_gen5.header_present = ($13 != 0);
+
+ if (gen_level >= 7) {
+ if ($3 != BRW_MESSAGE_TARGET_DP_SC &&
+ $3 != BRW_MESSAGE_TARGET_DP_RC &&
+ $3 != BRW_MESSAGE_TARGET_DP_CC &&
+ $3 != BRW_MESSAGE_TARGET_DP_DC) {
+ fprintf (stderr, "error: wrong cache type\n");
+ YYERROR;
+ }
+
+ $$.bits3.dp_gen7.category = $11;
+ $$.bits3.dp_gen7.binding_table_index = $9;
+ $$.bits3.dp_gen7.msg_control = $7;
+ $$.bits3.dp_gen7.msg_type = $5;
+ } else if (gen_level == 6) {
+ if ($3 != BRW_MESSAGE_TARGET_DP_SC &&
+ $3 != BRW_MESSAGE_TARGET_DP_RC &&
+ $3 != BRW_MESSAGE_TARGET_DP_CC) {
+ fprintf (stderr, "error: wrong cache type\n");
+ YYERROR;
+ }
+
+ $$.bits3.dp_gen6.send_commit_msg = $11;
+ $$.bits3.dp_gen6.binding_table_index = $9;
+ $$.bits3.dp_gen6.msg_control = $7;
+ $$.bits3.dp_gen6.msg_type = $5;
+ } else if (gen_level < 5) {
+ fprintf (stderr, "Gen6- donesn't support data port for sampler/render/constant/data cache\n");
+ YYERROR;
+ }
+ }
;
urb_allocate: ALLOCATE { $$ = 1; }