intel/decoder: Handle gen4 VF_STATISTICS and PIPELINE_SELECT
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 16 May 2017 03:40:40 +0000 (20:40 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 26 May 2017 14:58:01 +0000 (07:58 -0700)
These need special handling because they have no "DWord Length"
parameter and they have an unusual bias of 1.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/intel/common/gen_decoder.c

index e1a2fcf9d11d21288461ce5da80425324eb286e5..db989595ff913bdce07471e2f521241f73f4ceec 100644 (file)
@@ -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;