Signed-off-by: Chris Forbes <chrisf@xxxxxxxxx> --- intel/intel_decode.c | 57 +++++++++++++++++++++++++++++++-------- intel/tests/gen7-3d.batch-ref.txt | 12 ++++----- 2 files changed, 52 insertions(+), 17 deletions(-) diff --git a/intel/intel_decode.c b/intel/intel_decode.c index adda29a..0c3c943 100644 --- a/intel/intel_decode.c +++ b/intel/intel_decode.c @@ -2637,6 +2637,20 @@ static const char *get_965_depthformat(unsigned int depthformat) } } +static const char *get_gen7_depthformat(unsigned int depthformat) +{ + switch (depthformat) { + case 1: + return "z32float"; + case 3: + return "z24x8"; + case 5: + return "z16"; + default: + return "unknown"; + } +} + static const char *get_965_element_component(uint32_t data, int component) { uint32_t component_control = (data >> (16 + (3 - component) * 4)) & 0x7; @@ -3363,17 +3377,38 @@ decode_3d_965(struct drm_intel_decode *ctx) instr_out(ctx, 3, "WM sampler state\n"); return len; case 0x7805: - /* Actually 3DSTATE_DEPTH_BUFFER on gen7. */ - if (ctx->gen == 7) - break; - - instr_out(ctx, 0, "3DSTATE_URB\n"); - instr_out(ctx, 1, - "VS entries %d, alloc size %d (1024bit row)\n", - data[1] & 0xffff, ((data[1] >> 16) & 0x07f) + 1); - instr_out(ctx, 2, - "GS entries %d, alloc size %d (1024bit row)\n", - (data[2] >> 8) & 0x3ff, (data[2] & 7) + 1); + if (ctx->gen >= 7) { + /* 3DSTATE_DEPTH_BUFFER on gen7. */ + instr_out(ctx, 0, "3DSTATE_DEPTH_BUFFER\n"); + instr_out(ctx, 1, "%s %s pitch = %d ZWr%s SWr%s Hiz%s\n", + get_965_surfacetype(data[1] >> 29), + get_gen7_depthformat((data[1] >> 18) & 0x7), + (data[1] & 0x1ffff) + 1, + data[1] & (1<<28) ? "On" : "Off", + data[1] & (1<<27) ? "On" : "Off", + data[1] & (1<<22) ? "On" : "Off" + ); + instr_out(ctx, 2, "surface base address\n"); + instr_out(ctx, 3, "width = %d height = %d lod = %d\n", + ((data[3] >> 4) & 0x3fff) + 1, + (data[3] >> 18) + 1, + data[3] & 0xf); + instr_out(ctx, 4, "depth = %d minlayer = %d\n", + (data[4] >> 21) + 1, + (data[4] >> 10) & 0x7ff); + instr_out(ctx, 5, "offsets\n"); + instr_out(ctx, 6, "view extent = %d\n", + (data[6] >> 21)); + } else { + /* 3DSTATE_URB on <= gen6. */ + instr_out(ctx, 0, "3DSTATE_URB\n"); + instr_out(ctx, 1, + "VS entries %d, alloc size %d (1024bit row)\n", + data[1] & 0xffff, ((data[1] >> 16) & 0x07f) + 1); + instr_out(ctx, 2, + "GS entries %d, alloc size %d (1024bit row)\n", + (data[2] >> 8) & 0x3ff, (data[2] & 7) + 1); + } return len; case 0x7808: diff --git a/intel/tests/gen7-3d.batch-ref.txt b/intel/tests/gen7-3d.batch-ref.txt index cd2dfc4..db70625 100644 --- a/intel/tests/gen7-3d.batch-ref.txt +++ b/intel/tests/gen7-3d.batch-ref.txt @@ -173,12 +173,12 @@ 0x123002b0: 0x00000000: 0x123002b4: 0x00000000: 0x123002b8: 0x78050005: 3DSTATE_DEPTH_BUFFER -0x123002bc: 0xe0040000: dword 1 -0x123002c0: 0x00000000: dword 2 -0x123002c4: 0x00000000: dword 3 -0x123002c8: 0x00000000: dword 4 -0x123002cc: 0x00000000: dword 5 -0x123002d0: 0x00000000: dword 6 +0x123002bc: 0xe0040000: NULL z32float pitch = 1 ZWrOff SWrOff HizOff +0x123002c0: 0x00000000: surface base address +0x123002c4: 0x00000000: width = 1 height = 1 lod = 0 +0x123002c8: 0x00000000: depth = 1 minlayer = 0 +0x123002cc: 0x00000000: offsets +0x123002d0: 0x00000000: view extent = 0 0x123002d4: 0x78070001: 3DSTATE_HIER_DEPTH_BUFFER 0x123002d8: 0x00000000: pitch 1b 0x123002dc: 0x00000000: pointer to HiZ buffer -- 2.1.3 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel