aboutsummaryrefslogtreecommitdiffstats
path: root/src/intel/common
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-05-15 20:40:40 -0700
committerJason Ekstrand <[email protected]>2017-05-26 07:58:01 -0700
commit9d1001c8e5ff5d3706d674452df4969c086ddab1 (patch)
treeaff65b99d58d91ad9baa875515235dced5d4efc7 /src/intel/common
parent87588e546eba232d1685bd47192a14399195f776 (diff)
intel/decoder: Handle gen4 VF_STATISTICS and PIPELINE_SELECT
These need special handling because they have no "DWord Length" parameter and they have an unusual bias of 1. Reviewed-by: Jordan Justen <[email protected]>
Diffstat (limited to 'src/intel/common')
-rw-r--r--src/intel/common/gen_decoder.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c
index e1a2fcf9d11..db989595ff9 100644
--- a/src/intel/common/gen_decoder.c
+++ b/src/intel/common/gen_decoder.c
@@ -706,9 +706,12 @@ gen_group_get_length(struct gen_group *group, const uint32_t *p)
case 3: /* Render */ {
uint32_t subtype = field(h, 27, 28);
uint32_t opcode = field(h, 24, 26);
+ uint16_t whole_opcode = field(h, 16, 31);
switch (subtype) {
case 0:
- if (opcode < 2)
+ if (whole_opcode == 0x6104 /* PIPELINE_SELECT_965 */)
+ return 1;
+ else if (opcode < 2)
return field(h, 0, 7) + 2;
else
return -1;
@@ -726,7 +729,9 @@ gen_group_get_length(struct gen_group *group, const uint32_t *p)
return -1;
}
case 3:
- if (opcode < 4)
+ if (whole_opcode == 0x780b)
+ return 1;
+ else if (opcode < 4)
return field(h, 0, 7) + 2;
else
return -1;