Otherwise gen_group_get_length() will try to use first fields of, for example, CC_VIEWPORT and SF_CLIP to determine the group size. These packets are not present in the state with full header but simply with their contents while equivalent state pointers (3DSTATE_VIEWPORT_STATE_POINTERS_CC and 3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP respectively) telling their starting points.
Before: ------- 0xfffef540: 0x78230000: 3DSTATE_VIEWPORT_STATE_POINTERS_CC 0xfffef540: 0x78230000 : Dword 0 DWord Length: 0 0xfffef544: 0x00000180 : Dword 1 CC Viewport Pointer: 0x00000180 CC_VIEWPORT 0 0xfffea180: 0x00000000 : Dword 0 Minimum Depth: 0.000000 0xfffef548: 0x78210000: 3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP 0xfffef548: 0x78210000 : Dword 0 DWord Length: 0 0xfffef54c: 0x000001c0 : Dword 1 SF Clip Viewport Pointer: 0x000001c0 SF_CLIP_VIEWPORT 0 0xfffea1c0: 0x41000000 : Dword 0 Viewport Matrix Element m00: 0.000000 0xfffea1c4: 0x3f000000 : Dword 1 Viewport Matrix Element m11: 0.500000 0xfffef550: 0x78240000: 3DSTATE_BLEND_STATE_POINTERS After: ------ 0xfffef540: 0x78230000: 3DSTATE_VIEWPORT_STATE_POINTERS_CC 0xfffef540: 0x78230000 : Dword 0 DWord Length: 0 0xfffef544: 0x00000180 : Dword 1 CC Viewport Pointer: 0x00000180 CC_VIEWPORT 0 0xfffea180: 0x00000000 : Dword 0 Minimum Depth: 0.000000 0xfffea184: 0x3f800000 : Dword 1 Maximum Depth: 1.000000 0xfffef548: 0x78210000: 3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP 0xfffef548: 0x78210000 : Dword 0 DWord Length: 0 0xfffef54c: 0x000001c0 : Dword 1 SF Clip Viewport Pointer: 0x000001c0 SF_CLIP_VIEWPORT 0 0xfffea1c0: 0x41000000 : Dword 0 Viewport Matrix Element m00: 0.000000 0xfffea1c4: 0x3f000000 : Dword 1 Viewport Matrix Element m11: 0.500000 0xfffea1c8: 0x3f000000 : Dword 2 Viewport Matrix Element m22: 0.500000 0xfffea1cc: 0x41000000 : Dword 3 Viewport Matrix Element m30: 8.000000 0xfffea1d0: 0x3f000000 : Dword 4 Viewport Matrix Element m31: 0.500000 0xfffea1d4: 0x3f000000 : Dword 5 Viewport Matrix Element m32: 0.500000 0xfffea1d8: 0x00000000 : Dword 6 0xfffea1dc: 0x00000000 : Dword 7 0xfffea1e0: 0xc5000000 : Dword 8 X Min Clip Guardband: -2048.000000 0xfffea1e4: 0x45000000 : Dword 9 X Max Clip Guardband: 2048.000000 0xfffea1e8: 0xc7000000 : Dword 10 Y Min Clip Guardband: -32768.000000 0xfffea1ec: 0x47000000 : Dword 11 Y Max Clip Guardband: 32768.000000 0xfffea1f0: 0x00000000 : Dword 12 X Min ViewPort: 0.000000 0xfffea1f4: 0x41700000 : Dword 13 X Max ViewPort: 15.000000 0xfffea1f8: 0x00000000 : Dword 14 Y Min ViewPort: 0.000000 0xfffea1fc: 0x00000000 : Dword 15 Y Max ViewPort: 0.000000 CC: Lionel Landwerlin <lionel.g.landwer...@intel.com> CC: Kenneth Graunke <kenn...@whitecape.org> Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/intel/common/gen_decoder.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c index 1b8123b..cc212cc 100644 --- a/src/intel/common/gen_decoder.c +++ b/src/intel/common/gen_decoder.c @@ -713,6 +713,9 @@ gen_group_find_field(struct gen_group *group, const char *name) int gen_group_get_length(struct gen_group *group, const uint32_t *p) { + if (group->dw_length) + return group->dw_length; + uint32_t h = p[0]; uint32_t type = field_value(h, 29, 31); -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev