Merge commit 'origin/7.8'
[mesa.git] / src / mesa / drivers / dri / intel / intel_decode.c
index 136221c37fc536de53c33e30122ca7f918850c18..5293482b35ae376f54b520621290d07b5fed9115 100644 (file)
@@ -800,6 +800,7 @@ static int
 decode_3d_1d(uint32_t *data, int count, uint32_t hw_offset, int *failures, int i830)
 {
     unsigned int len, i, c, opcode, word, map, sampler, instr;
+    char *format;
 
     struct {
        uint32_t opcode;
@@ -1001,6 +1002,35 @@ decode_3d_1d(uint32_t *data, int count, uint32_t hw_offset, int *failures, int i
            (*failures)++;
        }
        return len;
+    case 0x85:
+       len = (data[0] & 0x0000000f) + 2;
+
+       if (len != 2)
+           fprintf(out, "Bad count in 3DSTATE_DEST_BUFFER_VARIABLES\n");
+       if (count < 2)
+           BUFFER_FAIL(count, len, "3DSTATE_DEST_BUFFER_VARIABLES");
+
+       instr_out(data, hw_offset, 0,
+                 "3DSTATE_DEST_BUFFER_VARIABLES\n");
+
+       switch ((data[1] >> 8) & 0xf) {
+       case 0x0: format = "g8"; break;
+       case 0x1: format = "x1r5g5b5"; break;
+       case 0x2: format = "r5g6b5"; break;
+       case 0x3: format = "a8r8g8b8"; break;
+       case 0x4: format = "ycrcb_swapy"; break;
+       case 0x5: format = "ycrcb_normal"; break;
+       case 0x6: format = "ycrcb_swapuv"; break;
+       case 0x7: format = "ycrcb_swapuvy"; break;
+       case 0x8: format = "a4r4g4b4"; break;
+       case 0x9: format = "a1r5g5b5"; break;
+       case 0xa: format = "a2r10g10b10"; break;
+       default: format = "BAD"; break;
+       }
+       instr_out(data, hw_offset, 1, "%s format, early Z %sabled\n",
+                 format,
+                 (data[1] & (1 << 31)) ? "en" : "dis");
+       return len;
     }
 
     for (opcode = 0; opcode < sizeof(opcodes_3d_1d) / sizeof(opcodes_3d_1d[0]);
@@ -1407,6 +1437,12 @@ decode_3d_965(uint32_t *data, int count, uint32_t hw_offset, int *failures)
        { 0x7909, 2, 2, "3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP" },
        { 0x790a, 3, 3, "3DSTATE_AA_LINE_PARAMETERS" },
        { 0x7b00, 6, 6, "3DPRIMITIVE" },
+       { 0x780e, 4, 4, "3DSTATE_CC_STATE_POINTERS" },
+       { 0x7810, 6, 6, "3DSTATE_VS_STATE" },
+       { 0x7811, 6, 6, "3DSTATE_GS_STATE" },
+       { 0x7812, 4, 4, "3DSTATE_CLIP_STATE" },
+       { 0x7815, 5, 5, "3DSTATE_CONSTANT_VS_STATE" },
+       { 0x7816, 5, 5, "3DSTATE_CONSTANT_GS_STATE" },
     };
 
     len = (data[0] & 0x0000ffff) + 2;
@@ -1513,7 +1549,7 @@ decode_3d_965(uint32_t *data, int count, uint32_t hw_offset, int *failures)
 
        for (i = 1; i < len;) {
            instr_out(data, hw_offset, i, "buffer %d: %svalid, type 0x%04x, "
-                     "src offset 0x%04xd bytes\n",
+                     "src offset 0x%04x bytes\n",
                      data[i] >> 27,
                      data[i] & (1 << 26) ? "" : "in",
                      (data[i] >> 16) & 0x1ff,
@@ -1562,7 +1598,7 @@ decode_3d_965(uint32_t *data, int count, uint32_t hw_offset, int *failures)
        return len;
 
     case 0x7905:
-       if (len != 5 && len != 6)
+       if (len < 5 || len > 7)
            fprintf(out, "Bad count in 3DSTATE_DEPTH_BUFFER\n");
        if (count < len)
            BUFFER_FAIL(count, len, "3DSTATE_DEPTH_BUFFER");
@@ -1581,6 +1617,8 @@ decode_3d_965(uint32_t *data, int count, uint32_t hw_offset, int *failures)
        instr_out(data, hw_offset, 4, "volume depth\n");
        if (len == 6)
            instr_out(data, hw_offset, 5, "\n");
+       if (len == 7)
+           instr_out(data, hw_offset, 6, "render target view extent\n");
 
        return len;
 
@@ -1595,7 +1633,7 @@ decode_3d_965(uint32_t *data, int count, uint32_t hw_offset, int *failures)
                  "3DPRIMITIVE: %s %s\n",
                  get_965_prim_type(data[0]),
                  (data[0] & (1 << 15)) ? "random" : "sequential");
-       instr_out(data, hw_offset, 1, "primitive count\n");
+       instr_out(data, hw_offset, 1, "vertex count\n");
        instr_out(data, hw_offset, 2, "start vertex\n");
        instr_out(data, hw_offset, 3, "instance count\n");
        instr_out(data, hw_offset, 4, "start instance\n");