16b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell/************************************************************************** 26b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * 36b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 46b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * All Rights Reserved. 56b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * 66b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 76b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * copy of this software and associated documentation files (the 86b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * "Software"), to deal in the Software without restriction, including 96b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 106b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 116b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 126b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * the following conditions: 136b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * 146b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * The above copyright notice and this permission notice (including the 156b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 166b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * of the Software. 176b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * 186b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 196b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 206b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 216b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 226b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 236b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 246b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 256b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell * 266b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell **************************************************************************/ 276b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 28ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/imports.h" 294a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 306b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell#include "i915_reg.h" 316b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell#include "i915_context.h" 324a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell#include "i915_debug.h" 334a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 342e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 352e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug(struct debug_stream *stream, const char *name, GLuint len) 366b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell{ 374a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint i; 384a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 394a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 404a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (len == 0) { 41298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("Error - zero length packet (0x%08x)\n", stream->ptr[0]); 424a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell assert(0); 432e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 446b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell } 456b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 464a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (stream->print_addresses) 47298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%08x: ", stream->offset); 486b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 496b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 50298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 514a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell for (i = 0; i < len; i++) 52298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[i]); 53298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\n"); 546b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 554a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream->offset += len * sizeof(GLuint); 564a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 572e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 584a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell} 596b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 604a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 614a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwellstatic const char *get_prim_name( GLuint val ) 626b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell{ 634a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell switch (val & PRIM3D_MASK) { 644a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_TRILIST: return "TRILIST"; break; 654a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_TRISTRIP: return "TRISTRIP"; break; 664a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_TRISTRIP_RVRSE: return "TRISTRIP_RVRSE"; break; 674a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_TRIFAN: return "TRIFAN"; break; 684a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_POLY: return "POLY"; break; 694a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_LINELIST: return "LINELIST"; break; 704a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_LINESTRIP: return "LINESTRIP"; break; 714a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_RECTLIST: return "RECTLIST"; break; 724a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_POINTLIST: return "POINTLIST"; break; 734a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_DIB: return "DIB"; break; 744a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_CLEAR_RECT: return "CLEAR_RECT"; break; 754a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case PRIM3D_ZONE_INIT: return "ZONE_INIT"; break; 764a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell default: return "????"; break; 776b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell } 786b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell} 796b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 802e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 812e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_prim(struct debug_stream *stream, const char *name, 822e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke bool dump_floats, GLuint len) 836b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell{ 844a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 854a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell const char *prim = get_prim_name( ptr[0] ); 864a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint i; 874a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 884a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 894a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 90298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s %s (%d dwords):\n", name, prim, len); 91298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[0]); 924a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell for (i = 1; i < len; i++) { 934a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (dump_floats) 94298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x // %f\n", ptr[i], *(GLfloat *)&ptr[i]); 954a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell else 96298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[i]); 974a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 984a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 994a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 100298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\n"); 1014a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1024a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream->offset += len * sizeof(GLuint); 1034a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1042e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 1056b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell} 1064a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1076b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 1084a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1094a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1102e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 1112e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_program(struct debug_stream *stream, const char *name, GLuint len) 1126b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell{ 1134a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 1144a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1154a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (len == 0) { 116298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("Error - zero length packet (0x%08x)\n", stream->ptr[0]); 1174a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell assert(0); 1182e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 1194a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 1204a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1214a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (stream->print_addresses) 122298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%08x: ", stream->offset); 1234a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 124298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 1254a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell i915_disassemble_program( ptr, len ); 1264a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1274a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream->offset += len * sizeof(GLuint); 1282e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 1296b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell} 1306b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 1314a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1322e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 1332e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_chain(struct debug_stream *stream, const char *name, GLuint len) 1346b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell{ 1354a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 1364a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint old_offset = stream->offset + len * sizeof(GLuint); 1374a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint i; 1384a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 139298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 1404a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell for (i = 0; i < len; i++) 141298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[i]); 1426b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 1434a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream->offset = ptr[1] & ~0x3; 1444a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1454a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (stream->offset < old_offset) 146298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\n... skipping backwards from 0x%x --> 0x%x ...\n\n", 1474a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell old_offset, stream->offset ); 1484a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell else 149298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\n... skipping from 0x%x --> 0x%x ...\n\n", 1504a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell old_offset, stream->offset ); 1516b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 1524a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1532e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 1544a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell} 1556b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 1566b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 1572e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 1582e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_variable_length_prim(struct debug_stream *stream) 1596b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell{ 1604a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 1614a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell const char *prim = get_prim_name( ptr[0] ); 1624a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint i, len; 1636b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 1644a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLushort *idx = (GLushort *)(ptr+1); 1654a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell for (i = 0; idx[i] != 0xffff; i++) 1664a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell ; 1674a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1684a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell len = 1+(i+2)/2; 1694a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 170298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("3DPRIM, %s variable length %d indicies (%d dwords):\n", prim, i, len); 1714a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell for (i = 0; i < len; i++) 172298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[i]); 173298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\n"); 1744a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 1754a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream->offset += len * sizeof(GLuint); 1762e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 1774a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell} 1786b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 1796b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 180c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell#define BITS( dw, hi, lo, ... ) \ 181c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwelldo { \ 18287ccb9504dfda502746c3a00eb607f1837dd265dGuillaume Melquiond unsigned himask = 0xffffffffU >> (31 - (hi)); \ 183298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t\t "); \ 184298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(__VA_ARGS__); \ 185298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(": 0x%x\n", ((dw) & himask) >> (lo)); \ 186c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} while (0) 187c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 188c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell#define MBZ( dw, hi, lo) do { \ 189c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell unsigned x = (dw) >> (lo); \ 190c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell unsigned lomask = (1 << (lo)) - 1; \ 191c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell unsigned himask; \ 192c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell himask = (1UL << (hi)) - 1; \ 193c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell assert ((x & himask & ~lomask) == 0); \ 194c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} while (0) 195c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 196c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell#define FLAG( dw, bit, ... ) \ 197c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwelldo { \ 198c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell if (((dw) >> (bit)) & 1) { \ 199298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t\t "); \ 200298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(__VA_ARGS__); \ 201298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\n"); \ 202c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } \ 203c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} while (0) 204c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 2052e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 2062e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_load_immediate(struct debug_stream *stream, const char *name, GLuint len) 2074a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell{ 2084a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 2094a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint bits = (ptr[0] >> 4) & 0xff; 210c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint j = 0; 2114a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 212298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords, flags: %x):\n", name, len, bits); 213298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j++]); 2144a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 215c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell if (bits & (1<<0)) { 216298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t LIS0: 0x%08x\n", ptr[j]); 217298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t vb address: 0x%08x\n", (ptr[j] & ~0x3)); 218c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 0, 0, "vb invalidate disable"); 219c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 220c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 221c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell if (bits & (1<<1)) { 222298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t LIS1: 0x%08x\n", ptr[j]); 223c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 29, 24, "vb dword width"); 224c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 21, 16, "vb dword pitch"); 225c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 15, 0, "vb max index"); 226c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 227c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 228c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell if (bits & (1<<2)) { 229c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell int i; 230298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t LIS2: 0x%08x\n", ptr[j]); 231c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell for (i = 0; i < 8; i++) { 232c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell unsigned tc = (ptr[j] >> (i * 4)) & 0xf; 2336ea55d35254b7769c65f064170d8965c0bf34a27Keith Whitwell if (tc != 0xf) 234c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(tc, 3, 0, "tex coord %d", i); 2354a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 236c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 237c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 238c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell if (bits & (1<<3)) { 239298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t LIS3: 0x%08x\n", ptr[j]); 240c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 241c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 242c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell if (bits & (1<<4)) { 243298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t LIS4: 0x%08x\n", ptr[j]); 244c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 31, 23, "point width"); 245c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 22, 19, "line width"); 246c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 18, "alpha flatshade"); 247c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 17, "fog flatshade"); 248c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 16, "spec flatshade"); 249c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 15, "rgb flatshade"); 250c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 14, 13, "cull mode"); 251c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 12, "vfmt: point width"); 252c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 11, "vfmt: specular/fog"); 253c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 10, "vfmt: rgba"); 254c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 9, "vfmt: depth offset"); 255c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 8, 6, "vfmt: position (2==xyzw)"); 256c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 5, "force dflt diffuse"); 257c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 4, "force dflt specular"); 258c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 3, "local depth offset enable"); 259c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 2, "vfmt: fp32 fog coord"); 260c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 1, "sprite point"); 261c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 0, "antialiasing"); 262c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 263c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 264c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell if (bits & (1<<5)) { 265298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t LIS5: 0x%08x\n", ptr[j]); 266c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 31, 28, "rgba write disables"); 267c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 27, "force dflt point width"); 268c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 26, "last pixel enable"); 269c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 25, "global z offset enable"); 270c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 24, "fog enable"); 271c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 23, 16, "stencil ref"); 272c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 15, 13, "stencil test"); 273c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 12, 10, "stencil fail op"); 274c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 9, 7, "stencil pass z fail op"); 275c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 6, 4, "stencil pass z pass op"); 276c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 3, "stencil write enable"); 277c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 2, "stencil test enable"); 278c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 1, "color dither enable"); 279c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 0, "logiop enable"); 280c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 2816b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell } 282c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell if (bits & (1<<6)) { 283298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t LIS6: 0x%08x\n", ptr[j]); 284c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 31, "alpha test enable"); 285c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 30, 28, "alpha func"); 286c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 27, 20, "alpha ref"); 287c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 19, "depth test enable"); 288c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 18, 16, "depth func"); 289c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 15, "blend enable"); 290c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 14, 12, "blend func"); 291c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 11, 8, "blend src factor"); 292c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 7, 4, "blend dst factor"); 293c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 3, "depth write enable"); 294c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 2, "color write enable"); 295c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 1, 0, "provoking vertex"); 296c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 297c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 298c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 2996b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 300298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\n"); 3014a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 3024a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell assert(j == len); 3034a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 3044a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream->offset += len * sizeof(GLuint); 3054a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 3062e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 3076b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell} 3084a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 3096b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 3106b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 3112e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 3122e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_load_indirect(struct debug_stream *stream, const char *name, GLuint len) 3136b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell{ 3144a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 3154a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint bits = (ptr[0] >> 8) & 0x3f; 3164a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint i, j = 0; 3174a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 318298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 319298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j++]); 3204a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 3214a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell for (i = 0; i < 6; i++) { 3224a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (bits & (1<<i)) { 3234a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell switch (1<<(8+i)) { 3244a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case LI0_STATE_STATIC_INDIRECT: 325298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" STATIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 326298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" 0x%08x\n", ptr[j++]); 3274a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 3284a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case LI0_STATE_DYNAMIC_INDIRECT: 329298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" DYNAMIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 3304a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 3314a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case LI0_STATE_SAMPLER: 332298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" SAMPLER: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 333298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" 0x%08x\n", ptr[j++]); 3344a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 3354a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case LI0_STATE_MAP: 336298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" MAP: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 337298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" 0x%08x\n", ptr[j++]); 3384a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 3394a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case LI0_STATE_PROGRAM: 340298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" PROGRAM: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 341298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" 0x%08x\n", ptr[j++]); 3424a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 3434a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case LI0_STATE_CONSTANTS: 344298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" CONSTANTS: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 345298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" 0x%08x\n", ptr[j++]); 3464a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 3474a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell default: 3484a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell assert(0); 3494a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 3504a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 3514a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 3524a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 3534a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 3544a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (bits == 0) { 355298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t DUMMY: 0x%08x\n", ptr[j++]); 3564a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 3574a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 358298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\n"); 3596b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 3606b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 3614a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell assert(j == len); 3626b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 3634a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream->offset += len * sizeof(GLuint); 3644a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 3652e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 3666b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell} 367c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 368c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwellstatic void BR13( struct debug_stream *stream, 369c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint val ) 370c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 371298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", val); 372c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(val, 30, "clipping enable"); 373c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(val, 25, 24, "color depth (3==32bpp)"); 374c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(val, 23, 16, "raster op"); 375c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(val, 15, 0, "dest pitch"); 376c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 377c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 378c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 379950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzerstatic void BR2223( struct debug_stream *stream, 380950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer GLuint val22, GLuint val23 ) 381c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 382950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer union { GLuint val; short field[2]; } BR22, BR23; 383c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 384950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer BR22.val = val22; 385950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer BR23.val = val23; 386950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer 387298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", val22); 388950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer BITS(val22, 31, 16, "dest y1"); 389950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer BITS(val22, 15, 0, "dest x1"); 390950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer 391298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", val23); 392950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer BITS(val23, 31, 16, "dest y2"); 393950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer BITS(val23, 15, 0, "dest x2"); 394950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer 395950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer /* The blit engine may produce unexpected results when these aren't met */ 396950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer assert(BR22.field[0] < BR23.field[0]); 397950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer assert(BR22.field[1] < BR23.field[1]); 398c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 399c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 400c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwellstatic void BR09( struct debug_stream *stream, 401c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint val ) 402c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 403298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x -- dest address\n", val); 404c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 405c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 406c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwellstatic void BR26( struct debug_stream *stream, 407c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint val ) 408c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 409298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", val); 410c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(val, 31, 16, "src y1"); 411c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(val, 15, 0, "src x1"); 412c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 413c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 414c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwellstatic void BR11( struct debug_stream *stream, 415c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint val ) 416c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 417298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", val); 418c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(val, 15, 0, "src pitch"); 419c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 420c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 421c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwellstatic void BR12( struct debug_stream *stream, 422c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint val ) 423c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 424298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x -- src address\n", val); 425c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 426c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 427c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwellstatic void BR16( struct debug_stream *stream, 428c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint val ) 429c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 430298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x -- color\n", val); 431c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 432c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 4332e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 4342e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_copy_blit(struct debug_stream *stream, const char *name, GLuint len) 435c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 436c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 437c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell int j = 0; 438c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 439298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 440298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j++]); 441c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 442c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BR13(stream, ptr[j++]); 443950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer BR2223(stream, ptr[j], ptr[j+1]); 444950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer j += 2; 445c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BR09(stream, ptr[j++]); 446c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BR26(stream, ptr[j++]); 447c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BR11(stream, ptr[j++]); 448c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BR12(stream, ptr[j++]); 449c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 450c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell stream->offset += len * sizeof(GLuint); 451c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell assert(j == len); 4522e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 453c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 454c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 4552e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 4562e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_color_blit(struct debug_stream *stream, const char *name, GLuint len) 457c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 458c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 459c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell int j = 0; 460c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 461298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 462298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j++]); 463c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 464c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BR13(stream, ptr[j++]); 465950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer BR2223(stream, ptr[j], ptr[j+1]); 466950fff0f9a330c50a627ced2e8cff2fb4689bee0Michel Dänzer j += 2; 467c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BR09(stream, ptr[j++]); 468c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BR16(stream, ptr[j++]); 469c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 470c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell stream->offset += len * sizeof(GLuint); 471c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell assert(j == len); 4722e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 473c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 474c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 4752e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 4762e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_modes4(struct debug_stream *stream, const char *name, GLuint len) 477c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 478c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 479c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell int j = 0; 480c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 481298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 482298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j]); 483c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 21, 18, "logicop func"); 484c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 17, "stencil test mask modify-enable"); 485c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 16, "stencil write mask modify-enable"); 486c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 15, 8, "stencil test mask"); 487c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 7, 0, "stencil write mask"); 488c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 489c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 490c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell stream->offset += len * sizeof(GLuint); 491c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell assert(j == len); 4922e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 493c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 494c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 4952e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 4962e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_map_state(struct debug_stream *stream, const char *name, GLuint len) 497c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 498c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 499c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell int j = 0; 500c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 501298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 502298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j++]); 503c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 504c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 505298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j]); 506c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 15, 0, "map mask"); 507c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 508c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 509c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 510c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell while (j < len) { 511c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 512298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t TMn.0: 0x%08x\n", ptr[j]); 513298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t map address: 0x%08x\n", (ptr[j] & ~0x3)); 514c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 1, "vertical line stride"); 515c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 0, "vertical line stride offset"); 516c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 517c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 518c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 519c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 520298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t TMn.1: 0x%08x\n", ptr[j]); 521c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 31, 21, "height"); 522c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 20, 10, "width"); 523c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 9, 7, "surface format"); 524c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 6, 3, "texel format"); 525c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 2, "use fence regs"); 526c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 1, "tiled surface"); 527c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 0, "tile walk ymajor"); 528c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 529c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 530c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 531298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t TMn.2: 0x%08x\n", ptr[j]); 532c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 31, 21, "dword pitch"); 533c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 20, 15, "cube face enables"); 534c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 14, 9, "max lod"); 535c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 8, "mip layout right"); 536c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 7, 0, "depth"); 537c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 538c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 539c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 540c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 541c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell stream->offset += len * sizeof(GLuint); 542c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell assert(j == len); 5432e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 544c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 545c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 5462e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 5472e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_sampler_state(struct debug_stream *stream, const char *name, GLuint len) 548c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 549c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 550c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell int j = 0; 551c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 552298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 553298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j++]); 554c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 555c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 556298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j]); 557c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 15, 0, "sampler mask"); 558c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 559c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 560c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 561c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell while (j < len) { 562c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 563298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t TSn.0: 0x%08x\n", ptr[j]); 564c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 31, "reverse gamma"); 565c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 30, "planar to packed"); 566c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 29, "yuv->rgb"); 567c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 28, 27, "chromakey index"); 568c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 26, 22, "base mip level"); 569c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 21, 20, "mip mode filter"); 570c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 19, 17, "mag mode filter"); 571c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 16, 14, "min mode filter"); 572c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 13, 5, "lod bias (s4.4)"); 573c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 4, "shadow enable"); 574c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 3, "max-aniso-4"); 575c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 2, 0, "shadow func"); 576c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 577c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 578c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 579c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 580298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t TSn.1: 0x%08x\n", ptr[j]); 581c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 31, 24, "min lod"); 582c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell MBZ( ptr[j], 23, 18 ); 583c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 17, "kill pixel enable"); 584c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 16, "keyed tex filter mode"); 585c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 15, "chromakey enable"); 586c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 14, 12, "tcx wrap mode"); 587c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 11, 9, "tcy wrap mode"); 588c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 8, 6, "tcz wrap mode"); 589c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 5, "normalized coords"); 590c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 4, 1, "map (surface) index"); 591c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 0, "EAST deinterlacer enable"); 592c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 593c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 594c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 595298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t TSn.2: 0x%08x (default color)\n", ptr[j]); 596c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 597c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 598c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 599c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 600c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell stream->offset += len * sizeof(GLuint); 601c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell assert(j == len); 6022e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 603c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 604c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 6052e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 6062e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_dest_vars(struct debug_stream *stream, const char *name, GLuint len) 607c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 608c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 609c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell int j = 0; 610c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 611298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 612298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j++]); 613c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 614c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 615298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j]); 616c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 31, "early classic ztest"); 617c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 30, "opengl tex default color"); 618c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 29, "bypass iz"); 619c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 28, "lod preclamp"); 620c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 27, 26, "dither pattern"); 621c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 25, "linear gamma blend"); 622c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 24, "debug dither"); 623c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 23, 20, "dstorg x"); 624c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 19, 16, "dstorg y"); 625c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell MBZ (ptr[j], 15, 15 ); 626c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 14, 12, "422 write select"); 627c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 11, 8, "cbuf format"); 628c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 3, 2, "zbuf format"); 629c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 1, "vert line stride"); 630c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 1, "vert line stride offset"); 631c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 632c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 633c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 634c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell stream->offset += len * sizeof(GLuint); 635c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell assert(j == len); 6362e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 637c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 638c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 6392e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 6402e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkedebug_buf_info(struct debug_stream *stream, const char *name, GLuint len) 641c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell{ 642c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 643c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell int j = 0; 644c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 645298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("%s (%d dwords):\n", name, len); 646298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j++]); 647c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 648c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell { 649298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x\n", ptr[j]); 650c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 28, 28, "aux buffer id"); 651c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 27, 24, "buffer id (7=depth, 3=back)"); 652c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 23, "use fence regs"); 653c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 22, "tiled surface"); 654c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell FLAG(ptr[j], 21, "tile walk ymajor"); 655c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell MBZ (ptr[j], 20, 14); 656c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell BITS(ptr[j], 13, 2, "dword pitch"); 657c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell MBZ (ptr[j], 2, 0); 658c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell j++; 659c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell } 660c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 661298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\t0x%08x -- buffer base address\n", ptr[j++]); 662c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell 663c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell stream->offset += len * sizeof(GLuint); 664c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell assert(j == len); 6652e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 666c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell} 6676b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 6682e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 6692e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkei915_debug_packet(struct debug_stream *stream) 6706b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell{ 6714a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint *ptr = (GLuint *)(stream->ptr + stream->offset); 6724a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint cmd = *ptr; 6734a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 6744a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell switch (((cmd >> 29) & 0x7)) { 6754a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x0: 6764a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell switch ((cmd >> 23) & 0x3f) { 6774a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x0: 6784a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "MI_NOOP", 1); 6794a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x3: 6804a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "MI_WAIT_FOR_EVENT", 1); 6814a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x4: 6824a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "MI_FLUSH", 1); 6834a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0xA: 6844a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell debug(stream, "MI_BATCH_BUFFER_END", 1); 6852e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 6864a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x22: 6874a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "MI_LOAD_REGISTER_IMM", 3); 6884a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x31: 6894a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug_chain(stream, "MI_BATCH_BUFFER_START", 2); 6904a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell default: 6914a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 6924a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 6934a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 6944a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x1: 6954a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 6964a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x2: 6974a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell switch ((cmd >> 22) & 0xff) { 6984a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x50: 699c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell return debug_color_blit(stream, "XY_COLOR_BLT", (cmd & 0xff) + 2); 7004a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x53: 701c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell return debug_copy_blit(stream, "XY_SRC_COPY_BLT", (cmd & 0xff) + 2); 7024a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell default: 7034a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "blit command", (cmd & 0xff) + 2); 7044a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 7054a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 7064a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x3: 7074a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell switch ((cmd >> 24) & 0x1f) { 7084a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x6: 7094a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_ANTI_ALIASING", 1); 7104a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x7: 7114a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_RASTERIZATION_RULES", 1); 7124a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x8: 7134a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_BACKFACE_STENCIL_OPS", 2); 7144a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x9: 7154a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_BACKFACE_STENCIL_MASKS", 1); 7164a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0xb: 7174a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_INDEPENDENT_ALPHA_BLEND", 1); 7184a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0xc: 7194a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_MODES5", 1); 7204a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0xd: 721c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell return debug_modes4(stream, "3DSTATE_MODES4", 1); 7224a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x15: 7234a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_FOG_COLOR", 1); 7244a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x16: 7254a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_COORD_SET_BINDINGS", 1); 7264a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x1c: 7274a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell /* 3DState16NP */ 7284a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell switch((cmd >> 19) & 0x1f) { 7294a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x10: 7304a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_SCISSOR_ENABLE", 1); 7314a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x11: 7324a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_DEPTH_SUBRECTANGLE_DISABLE", 1); 7334a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell default: 7344a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 7354a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 7364a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 7374a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x1d: 7384a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell /* 3DStateMW */ 7394a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell switch ((cmd >> 16) & 0xff) { 7404a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x0: 741c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell return debug_map_state(stream, "3DSTATE_MAP_STATE", (cmd & 0x1f) + 2); 7424a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x1: 743c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell return debug_sampler_state(stream, "3DSTATE_SAMPLER_STATE", (cmd & 0x1f) + 2); 7444a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x4: 7454a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug_load_immediate(stream, "3DSTATE_LOAD_STATE_IMMEDIATE", (cmd & 0xf) + 2); 7464a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x5: 7474a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug_program(stream, "3DSTATE_PIXEL_SHADER_PROGRAM", (cmd & 0x1ff) + 2); 7484a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x6: 7494a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_PIXEL_SHADER_CONSTANTS", (cmd & 0xff) + 2); 7504a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x7: 7514a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug_load_indirect(stream, "3DSTATE_LOAD_INDIRECT", (cmd & 0xff) + 2); 7524a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x80: 7534a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_DRAWING_RECTANGLE", (cmd & 0xffff) + 2); 7544a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x81: 7554a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_SCISSOR_RECTANGLE", (cmd & 0xffff) + 2); 7564a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x83: 7574a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_SPAN_STIPPLE", (cmd & 0xffff) + 2); 7584a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x85: 759c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell return debug_dest_vars(stream, "3DSTATE_DEST_BUFFER_VARS", (cmd & 0xffff) + 2); 7604a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x88: 7614a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_CONSTANT_BLEND_COLOR", (cmd & 0xffff) + 2); 7624a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x89: 7634a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_FOG_MODE", (cmd & 0xffff) + 2); 7644a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x8e: 765c60113cd41ac84f8737005ca1d7a1114e3725ae5Keith Whitwell return debug_buf_info(stream, "3DSTATE_BUFFER_INFO", (cmd & 0xffff) + 2); 7664a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x97: 7674a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_DEPTH_OFFSET_SCALE", (cmd & 0xffff) + 2); 7684a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x98: 7694a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_Z", (cmd & 0xffff) + 2); 7704a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x99: 7714a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_DIFFUSE", (cmd & 0xffff) + 2); 7724a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x9a: 7734a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_SPECULAR", (cmd & 0xffff) + 2); 7744a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x9c: 7754a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "3DSTATE_CLEAR_PARAMETERS", (cmd & 0xffff) + 2); 7764a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell default: 7774a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell assert(0); 7784a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return 0; 7794a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 7804a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 7814a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x1e: 7824a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (cmd & (1 << 23)) 7834a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "???", (cmd & 0xffff) + 1); 7844a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell else 7854a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "", 1); 7864a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 7874a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell case 0x1f: 7884a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if ((cmd & (1 << 23)) == 0) 7894a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug_prim(stream, "3DPRIM (inline)", 1, (cmd & 0x1ffff) + 2); 7904a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell else if (cmd & (1 << 17)) 7914a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell { 7924a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if ((cmd & 0xffff) == 0) 7934a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug_variable_length_prim(stream); 7944a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell else 7954a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug_prim(stream, "3DPRIM (indexed)", 0, (((cmd & 0xffff) + 1) / 2) + 1); 7964a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 7974a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell else 7984a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug_prim(stream, "3DPRIM (indirect sequential)", 0, 2); 7994a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 8004a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell default: 8014a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return debug(stream, "", 0); 8024a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 803cb1dcb55f9884431a5e2b90e9208b42558a95611Vinson Lee break; 8044a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell default: 8054a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell assert(0); 8064a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return 0; 8074a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell } 8084a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 8094a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell assert(0); 8104a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell return 0; 8116b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell} 8126b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 8136b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 8144a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 8156b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwellvoid 8164a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwelli915_dump_batchbuffer( GLuint *start, 8174a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint *end ) 8186b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell{ 8194a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell struct debug_stream stream; 8204a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell GLuint bytes = (end - start) * 4; 8212e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke bool done = false; 8226b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 823298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("\n\nBATCH: (%d)\n", bytes / 4); 8246b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 8254a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream.offset = 0; 8264a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream.ptr = (char *)start; 8274a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream.print_addresses = 0; 8286b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 8294a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell while (!done && 8304a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream.offset < bytes && 8314a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream.offset >= 0) 8324a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell { 8334a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell if (!i915_debug_packet( &stream )) 8344a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell break; 8356b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 8364a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell assert(stream.offset <= bytes && 8374a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell stream.offset >= 0); 8386b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell } 8396b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell 840298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("END-BATCH\n\n\n"); 8416b9e31f3eb3dbe20cbc8493b963bbc6530e392c6Keith Whitwell} 8424a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 8434a789e408dbba7891f1436b2f42e7c0824e5ba7aKeith Whitwell 844