i915_debug.c revision 27b49e91c982638497f7a92f7d611c29dd9cad18
101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell/************************************************************************** 201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * All Rights Reserved. 501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * copy of this software and associated documentation files (the 801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * "Software"), to deal in the Software without restriction, including 901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 1001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 1101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * permit persons to whom the Software is furnished to do so, subject to 1201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * the following conditions: 1301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 1401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * The above copyright notice and this permission notice (including the 1501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * next paragraph) shall be included in all copies or substantial portions 1601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * of the Software. 1701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 1801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 2601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell **************************************************************************/ 2701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 2801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell#include "i915_reg.h" 29c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell#include "i915_context.h" 30abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz#include "i915_screen.h" 3101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell#include "i915_debug.h" 32abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz#include "i915_debug_private.h" 331642dd2f86938242bfa8293323daaaf64573976fJakob Bornecrantz#include "i915_batch.h" 34ea4bf267e4b023b08043f91ac44592fed1736e7fJosé Fonseca#include "util/u_debug.h" 3501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 37abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 38abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzstatic const struct debug_named_value debug_options[] = { 39abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {"blit", DBG_BLIT, "Print when using the 2d blitter"}, 40abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {"emit", DBG_EMIT, "State emit information"}, 41abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {"atoms", DBG_ATOMS, "Print dirty state atoms"}, 42abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {"flush", DBG_FLUSH, "Flushing information"}, 43abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {"texture", DBG_TEXTURE, "Texture information"}, 44abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {"constants", DBG_CONSTANTS, "Constant buffers"}, 45abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz DEBUG_NAMED_VALUE_END 46abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz}; 47abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 48abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzunsigned i915_debug = 0; 499493fe85d1b10efc06e8c34de31971dc6e6a6062Daniel Vetterboolean i915_tiling = TRUE; 50abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 51fe6800a1bbd2f22fc3b3921765491d9ba179c4ffJakob BornecrantzDEBUG_GET_ONCE_FLAGS_OPTION(i915_debug, "I915_DEBUG", debug_options, 0); 52fe6800a1bbd2f22fc3b3921765491d9ba179c4ffJakob BornecrantzDEBUG_GET_ONCE_BOOL_OPTION(i915_no_tiling, "I915_NO_TILING", FALSE); 53fe6800a1bbd2f22fc3b3921765491d9ba179c4ffJakob Bornecrantz 5427b49e91c982638497f7a92f7d611c29dd9cad18Jakob Bornecrantzvoid i915_debug_init(struct i915_screen *is) 55abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz{ 56fe6800a1bbd2f22fc3b3921765491d9ba179c4ffJakob Bornecrantz i915_debug = debug_get_option_i915_debug(); 5727b49e91c982638497f7a92f7d611c29dd9cad18Jakob Bornecrantz is->debug.tiling = !debug_get_option_i915_no_tiling(); 58abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz} 59abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 60abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 61abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 62abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz/*********************************************************************** 63abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz * Batchbuffer dumping 64abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz */ 65abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michalstatic void 670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9MichalPRINTF( 680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal struct debug_stream *stream, 690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal const char *fmt, 700e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal ... ) 710e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal{ 720e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_list args; 730e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 740e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_start( args, fmt ); 75baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_vprintf( fmt, args ); 760e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_end( args ); 770e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal} 7801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 7901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 8040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug( struct debug_stream *stream, const char *name, unsigned len ) 8101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 8240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i; 8340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 84c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 85c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (len == 0) { 860e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "Error - zero length packet (0x%08x)\n", stream->ptr[0]); 87c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 8840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return FALSE; 8901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 9001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 91c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (stream->print_addresses) 920e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%08x: ", stream->offset); 93c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 9401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 96c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < len; i++) 970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 9901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 10040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 101c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 10240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 103c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell} 10401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 10501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 10640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic const char *get_prim_name( unsigned val ) 10701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 108c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch (val & PRIM3D_MASK) { 109c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRILIST: return "TRILIST"; break; 110c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRISTRIP: return "TRISTRIP"; break; 111c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRISTRIP_RVRSE: return "TRISTRIP_RVRSE"; break; 112c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_TRIFAN: return "TRIFAN"; break; 113c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_POLY: return "POLY"; break; 114c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_LINELIST: return "LINELIST"; break; 115c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_LINESTRIP: return "LINESTRIP"; break; 116c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_RECTLIST: return "RECTLIST"; break; 117c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_POINTLIST: return "POINTLIST"; break; 118c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_DIB: return "DIB"; break; 119c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_CLEAR_RECT: return "CLEAR_RECT"; break; 120c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case PRIM3D_ZONE_INIT: return "ZONE_INIT"; break; 121c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: return "????"; break; 12201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 12301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 12401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 12540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_prim( struct debug_stream *stream, const char *name, 12640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell boolean dump_floats, 12740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 12801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 12940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 130c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *prim = get_prim_name( ptr[0] ); 13140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i; 132c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 133c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 134c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s %s (%d dwords):\n", name, prim, len); 1360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[0]); 137c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 1; i < len; i++) { 138c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (dump_floats) 1390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x // %f\n", ptr[i], *(float *)&ptr[i]); 140c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 1410e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 142c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 143c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 144c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1450e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 146c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 14740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 148c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 14940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 15001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 151c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 15201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 153c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 154c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 15540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_program( struct debug_stream *stream, const char *name, unsigned len ) 15601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 15740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 158c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 159c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (len == 0) { 1600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "Error - zero length packet (0x%08x)\n", stream->ptr[0]); 161c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 16240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return FALSE; 163c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 164c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 165c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (stream->print_addresses) 1660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%08x: ", stream->offset); 167c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 169cb2d95ba68affe665619cc0ec7b74fd0aaae7fc2Keith Whitwell i915_disassemble_program( stream, ptr, len ); 170c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 17140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 17240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 17301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 17401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 175c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 17640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_chain( struct debug_stream *stream, const char *name, unsigned len ) 17701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 17840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 17940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned old_offset = stream->offset + len * sizeof(unsigned); 18040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i; 181c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 1820e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 183c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < len; i++) 1840e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 18501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 186c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream->offset = ptr[1] & ~0x3; 187c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 188c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (stream->offset < old_offset) 1890e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n... skipping backwards from 0x%x --> 0x%x ...\n\n", 190c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell old_offset, stream->offset ); 191c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 1920e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n... skipping from 0x%x --> 0x%x ...\n\n", 193c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell old_offset, stream->offset ); 19401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 195c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 19640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 197c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell} 19801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 19901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 20040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_variable_length_prim( struct debug_stream *stream ) 20101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 20240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 203c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *prim = get_prim_name( ptr[0] ); 20440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i, len; 20501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 20640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell ushort *idx = (ushort *)(ptr+1); 207c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; idx[i] != 0xffff; i++) 208c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell ; 20901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 210c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell len = 1+(i+2)/2; 21101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 2120e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "3DPRIM, %s variable length %d indicies (%d dwords):\n", prim, i, len); 213c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < len; i++) 2140e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[i]); 2150e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 216c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 21740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 21840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 219c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell} 220c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 221c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 2220e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michalstatic void 2230e31e24659a1e691bdfa213fcd073bbfaa4ed6e9MichalBITS( 2240e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal struct debug_stream *stream, 2250e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned dw, 2260e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned hi, 2270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned lo, 2280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal const char *fmt, 2290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal ... ) 2300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal{ 2310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_list args; 2320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned himask = ~0UL >> (31 - (hi)); 2330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2340e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t\t "); 2350e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2360e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_start( args, fmt ); 237baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_vprintf( fmt, args ); 2380e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_end( args ); 2390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2400e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, ": 0x%x\n", ((dw) & himask) >> (lo)); 2410e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal} 242a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 24396ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#ifdef DEBUG 244a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell#define MBZ( dw, hi, lo) do { \ 245a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned x = (dw) >> (lo); \ 246a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned lomask = (1 << (lo)) - 1; \ 247a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned himask; \ 248a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell himask = (1UL << (hi)) - 1; \ 249a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert ((x & himask & ~lomask) == 0); \ 250a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} while (0) 25196ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#else 25296ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#define MBZ( dw, hi, lo) do { \ 25396ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz} while (0) 25496ad8a36003a21180ad6b61aa0b7d7c9452b3449Jakob Bornecrantz#endif 255a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 2560e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michalstatic void 2570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9MichalFLAG( 2580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal struct debug_stream *stream, 2590e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned dw, 2600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal unsigned bit, 2610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal const char *fmt, 2620e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal ... ) 2630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal{ 2640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal if (((dw) >> (bit)) & 1) { 2650e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_list args; 2660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t\t "); 2680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_start( args, fmt ); 270baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_vprintf( fmt, args ); 2710e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal va_end( args ); 2720e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal 2730e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 2740e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal } 2750e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal} 276a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 27740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_load_immediate( struct debug_stream *stream, 278c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *name, 27940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 280c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell{ 28140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 28240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned bits = (ptr[0] >> 4) & 0xff; 28340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned j = 0; 284c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 2850e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords, flags: %x):\n", name, len, bits); 2860e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 287c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 288a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<0)) { 2890e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS0: 0x%08x\n", ptr[j]); 2900e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t vb address: 0x%08x\n", (ptr[j] & ~0x3)); 2910e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 0, 0, "vb invalidate disable"); 292a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 293a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 294a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<1)) { 2950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS1: 0x%08x\n", ptr[j]); 2960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 29, 24, "vb dword width"); 2970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 21, 16, "vb dword pitch"); 2980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 0, "vb max index"); 299a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 300a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 301a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<2)) { 302a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int i; 3030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS2: 0x%08x\n", ptr[j]); 304a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell for (i = 0; i < 8; i++) { 305a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell unsigned tc = (ptr[j] >> (i * 4)) & 0xf; 306a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (tc != 0xf) 3070e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, tc, 3, 0, "tex coord %d", i); 308c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 309a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 310a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 311a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<3)) { 3120e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS3: 0x%08x\n", ptr[j]); 313a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 314a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 315a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<4)) { 3160e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS4: 0x%08x\n", ptr[j]); 3170e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 23, "point width"); 3180e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 22, 19, "line width"); 3190e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 18, "alpha flatshade"); 3200e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 17, "fog flatshade"); 3210e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 16, "spec flatshade"); 3220e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 15, "rgb flatshade"); 3230e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 13, "cull mode"); 3240e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 12, "vfmt: point width"); 3250e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 11, "vfmt: specular/fog"); 3260e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 10, "vfmt: rgba"); 3270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 9, "vfmt: depth offset"); 3280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 8, 6, "vfmt: position (2==xyzw)"); 3290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 5, "force dflt diffuse"); 3300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 4, "force dflt specular"); 3310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "local depth offset enable"); 3320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "vfmt: fp32 fog coord"); 3330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "sprite point"); 3340e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "antialiasing"); 335a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 336a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 337a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<5)) { 3380e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS5: 0x%08x\n", ptr[j]); 3390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 28, "rgba write disables"); 3400e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 27, "force dflt point width"); 3410e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 26, "last pixel enable"); 3420e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 25, "global z offset enable"); 3430e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 24, "fog enable"); 3440e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 23, 16, "stencil ref"); 3450e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 13, "stencil test"); 3460e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 12, 10, "stencil fail op"); 3470e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 9, 7, "stencil pass z fail op"); 3480e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 6, 4, "stencil pass z pass op"); 3490e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "stencil write enable"); 3500e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "stencil test enable"); 3510e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "color dither enable"); 3520e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "logiop enable"); 353a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 35401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 355a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell if (bits & (1<<6)) { 3560e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t LIS6: 0x%08x\n", ptr[j]); 3570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 31, "alpha test enable"); 3580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 30, 28, "alpha func"); 3590e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 27, 20, "alpha ref"); 3600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 19, "depth test enable"); 3610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 18, 16, "depth func"); 3620e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 15, "blend enable"); 3630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 12, "blend func"); 3640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 11, 8, "blend src factor"); 3650e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 7, 4, "blend dst factor"); 3660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "depth write enable"); 3670e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "color write enable"); 3680e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 1, 0, "provoking vertex"); 369a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 370a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 371a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 37201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 3730e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 374c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 375c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(j == len); 376c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 37740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 378c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 37940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 38001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 381c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 38201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 38301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 38440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_load_indirect( struct debug_stream *stream, 385c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell const char *name, 38640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 38701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 38840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 38940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned bits = (ptr[0] >> 8) & 0x3f; 39040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned i, j = 0; 391c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 3920e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 3930e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 394c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 395c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell for (i = 0; i < 6; i++) { 396c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (bits & (1<<i)) { 397c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch (1<<(8+i)) { 398c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_STATIC_INDIRECT: 3990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " STATIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 401c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 402c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_DYNAMIC_INDIRECT: 4030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " DYNAMIC: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 404c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 405c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_SAMPLER: 4060e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " SAMPLER: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4070e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 408c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 409c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_MAP: 4100e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " MAP: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4110e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 412c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 413c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_PROGRAM: 4140e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " PROGRAM: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4150e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 416c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 417c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case LI0_STATE_CONSTANTS: 4180e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " CONSTANTS: 0x%08x | %x\n", ptr[j]&~3, ptr[j]&3); j++; 4190e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, " 0x%08x\n", ptr[j++]); 420c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 421c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 422c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 423c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 424c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 425c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 426c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 42701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 428c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (bits == 0) { 4290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t DUMMY: 0x%08x\n", ptr[j++]); 430c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 43101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 4320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\n"); 43301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 434c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 435c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(j == len); 436c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 43740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 438c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 43940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 44001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 441a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 442a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR13( struct debug_stream *stream, 44340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 444a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4450e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4460e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, val, 30, "clipping enable"); 4470e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 25, 24, "color depth (3==32bpp)"); 4480e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 23, 16, "raster op"); 4490e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "dest pitch"); 450a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 451a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 452a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 453a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR22( struct debug_stream *stream, 45440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 455a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4560e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 31, 16, "dest y1"); 4580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "dest x1"); 459a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 460a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 461a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR23( struct debug_stream *stream, 46240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 463a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4650e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 31, 16, "dest y2"); 4660e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "dest x2"); 467a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 468a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 469a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR09( struct debug_stream *stream, 47040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 471a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4720e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- dest address\n", val); 473a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 474a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 475a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR26( struct debug_stream *stream, 47640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 477a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4780e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4790e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 31, 16, "src y1"); 4800e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "src x1"); 481a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 482a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 483a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR11( struct debug_stream *stream, 48440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 485a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4860e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", val); 4870e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, val, 15, 0, "src pitch"); 488a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 489a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 490a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR12( struct debug_stream *stream, 49140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 492a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4930e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- src address\n", val); 494a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 495a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 496a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwellstatic void BR16( struct debug_stream *stream, 49740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned val ) 498a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 4990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- color\n", val); 500a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 501a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 50240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_copy_blit( struct debug_stream *stream, 503a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 50440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 505a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 50640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 507a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 508a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5090e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5100e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 511a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 512a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR13(stream, ptr[j++]); 513a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR22(stream, ptr[j++]); 514a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR23(stream, ptr[j++]); 515a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR09(stream, ptr[j++]); 516a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR26(stream, ptr[j++]); 517a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR11(stream, ptr[j++]); 518a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR12(stream, ptr[j++]); 519a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 52040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 521a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 52240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 523a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 524a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 52540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_color_blit( struct debug_stream *stream, 526a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 52740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 528a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 52940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 530a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 531a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5330e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 534a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 535a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR13(stream, ptr[j++]); 536a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR22(stream, ptr[j++]); 537a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR23(stream, ptr[j++]); 538a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR09(stream, ptr[j++]); 539a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell BR16(stream, ptr[j++]); 540a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 54140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 542a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 54340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 544a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 545a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 54640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_modes4( struct debug_stream *stream, 547a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 54840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 549a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 55040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 551a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 552a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5530e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5540e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 5550e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 21, 18, "logicop func"); 5560e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 17, "stencil test mask modify-enable"); 5570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 16, "stencil write mask modify-enable"); 5580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 8, "stencil test mask"); 5590e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 7, 0, "stencil write mask"); 560a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 561a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 56240a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 563a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 56440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 565a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 566a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 56740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_map_state( struct debug_stream *stream, 568a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 56940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 570a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 57140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 5725961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned j = 0; 573a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 5740e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 5750e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 576a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 577a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5780e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 5790e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 0, "map mask"); 580a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 581a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 582a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 583a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell while (j < len) { 584a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5850e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TMn.0: 0x%08x\n", ptr[j]); 5860e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t map address: 0x%08x\n", (ptr[j] & ~0x3)); 5870e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "vertical line stride"); 5880e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "vertical line stride offset"); 589a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 590a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 591a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 592a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 5930e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TMn.1: 0x%08x\n", ptr[j]); 5940e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 21, "height"); 5950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 20, 10, "width"); 5960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 9, 7, "surface format"); 5970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 6, 3, "texel format"); 5980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 2, "use fence regs"); 5990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "tiled surface"); 6000e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "tile walk ymajor"); 601a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 602a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 603a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6040e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TMn.2: 0x%08x\n", ptr[j]); 6050e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 21, "dword pitch"); 6060e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 20, 15, "cube face enables"); 6070e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 9, "max lod"); 6080e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 8, "mip layout right"); 6090e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 7, 0, "depth"); 610a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 611a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 612a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 613a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 61440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 615a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 61640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 617a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 618a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 61940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_sampler_state( struct debug_stream *stream, 620a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 62140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 622a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 62340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 6245961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned j = 0; 625a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 6260e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 6270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 628a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 629a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 6310e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 15, 0, "sampler mask"); 632a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 633a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 634a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 635a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell while (j < len) { 636a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6370e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TSn.0: 0x%08x\n", ptr[j]); 6380e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 31, "reverse gamma"); 6390e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 30, "planar to packed"); 6400e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 29, "yuv->rgb"); 6410e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 28, 27, "chromakey index"); 6420e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 26, 22, "base mip level"); 6430e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 21, 20, "mip mode filter"); 6440e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 19, 17, "mag mode filter"); 6450e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 16, 14, "min mode filter"); 6460e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 13, 5, "lod bias (s4.4)"); 6470e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 4, "shadow enable"); 6480e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 3, "max-aniso-4"); 6490e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 2, 0, "shadow func"); 650a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 651a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 652a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 653a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6540e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TSn.1: 0x%08x\n", ptr[j]); 6550e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 31, 24, "min lod"); 656a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ( ptr[j], 23, 18 ); 6570e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 17, "kill pixel enable"); 6580e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 16, "keyed tex filter mode"); 6590e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 15, "chromakey enable"); 6600e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 12, "tcx wrap mode"); 6610e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 11, 9, "tcy wrap mode"); 6620e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 8, 6, "tcz wrap mode"); 6630e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 5, "normalized coords"); 6640e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 4, 1, "map (surface) index"); 6650e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 0, "EAST deinterlacer enable"); 666a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 667a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 668a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6690e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t TSn.2: 0x%08x (default color)\n", ptr[j]); 670a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 671a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 672a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 673a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 67440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 675a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 67640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 677a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 678a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 67940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_dest_vars( struct debug_stream *stream, 680a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 68140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 682a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 68340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 684a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 685a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 6860e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 6870e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 688a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 689a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 6900e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 6910e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 31, "early classic ztest"); 6920e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 30, "opengl tex default color"); 6930e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 29, "bypass iz"); 6940e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 28, "lod preclamp"); 6950e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 27, 26, "dither pattern"); 6960e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 25, "linear gamma blend"); 6970e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 24, "debug dither"); 6980e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 23, 20, "dstorg x"); 6990e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 19, 16, "dstorg y"); 700a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ (ptr[j], 15, 15 ); 7010e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 14, 12, "422 write select"); 7020e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 11, 8, "cbuf format"); 7030e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 3, 2, "zbuf format"); 7040e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "vert line stride"); 7050e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 1, "vert line stride offset"); 706a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 707a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 708a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 70940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 710a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 71140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 712a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 713a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 71440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean debug_buf_info( struct debug_stream *stream, 715a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell const char *name, 71640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned len ) 717a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell{ 71840a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 719a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell int j = 0; 720a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 7210e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "%s (%d dwords):\n", name, len); 7220e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j++]); 723a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 724a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell { 7250e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x\n", ptr[j]); 7260e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 28, 28, "aux buffer id"); 7270e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 27, 24, "buffer id (7=depth, 3=back)"); 7280e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 23, "use fence regs"); 7290e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 22, "tiled surface"); 7300e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal FLAG(stream, ptr[j], 21, "tile walk ymajor"); 731a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ (ptr[j], 20, 14); 7320e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal BITS(stream, ptr[j], 13, 2, "dword pitch"); 733a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell MBZ (ptr[j], 2, 0); 734a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell j++; 735a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell } 736a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 7370e31e24659a1e691bdfa213fcd073bbfaa4ed6e9Michal PRINTF(stream, "\t0x%08x -- buffer base address\n", ptr[j++]); 738a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 73940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell stream->offset += len * sizeof(unsigned); 740a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell assert(j == len); 74140a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return TRUE; 742a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell} 74301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 74440a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwellstatic boolean i915_debug_packet( struct debug_stream *stream ) 74501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 74640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned *ptr = (unsigned *)(stream->ptr + stream->offset); 74740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned cmd = *ptr; 748c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 749c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch (((cmd >> 29) & 0x7)) { 750c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x0: 751c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 23) & 0x3f) { 752c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x0: 753c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_NOOP", 1); 754c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x3: 755c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_WAIT_FOR_EVENT", 1); 756c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x4: 757c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_FLUSH", 1); 758c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xA: 759c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell debug(stream, "MI_BATCH_BUFFER_END", 1); 76040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell return FALSE; 761c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x22: 762c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "MI_LOAD_REGISTER_IMM", 3); 763c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x31: 764c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_chain(stream, "MI_BATCH_BUFFER_START", 2); 765c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 766d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian (void)debug(stream, "UNKNOWN 0x0 case!", 1); 767d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian assert(0); 768c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 769c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 770c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 771c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1: 772d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian (void) debug(stream, "UNKNOWN 0x1 case!", 1); 773d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian assert(0); 774c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 775c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x2: 776c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 22) & 0xff) { 777c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x50: 778a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_color_blit(stream, "XY_COLOR_BLT", (cmd & 0xff) + 2); 779c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x53: 780a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_copy_blit(stream, "XY_SRC_COPY_BLT", (cmd & 0xff) + 2); 781c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 782c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "blit command", (cmd & 0xff) + 2); 783c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 784c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 785c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x3: 786c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 24) & 0x1f) { 787c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x6: 788c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_ANTI_ALIASING", 1); 789c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x7: 790c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_RASTERIZATION_RULES", 1); 791c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x8: 792c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_BACKFACE_STENCIL_OPS", 2); 793c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x9: 794c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_BACKFACE_STENCIL_MASKS", 1); 795c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xb: 796c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_INDEPENDENT_ALPHA_BLEND", 1); 797c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xc: 798c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_MODES5", 1); 799c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0xd: 800a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_modes4(stream, "3DSTATE_MODES4", 1); 801c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x15: 802c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_FOG_COLOR", 1); 803c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x16: 804c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_COORD_SET_BINDINGS", 1); 805c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1c: 806c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell /* 3DState16NP */ 807c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch((cmd >> 19) & 0x1f) { 808c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x10: 809c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_SCISSOR_ENABLE", 1); 810c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x11: 811c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEPTH_SUBRECTANGLE_DISABLE", 1); 812c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 813d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian (void) debug(stream, "UNKNOWN 0x1c case!", 1); 814d3eb25c575464bed7dbfc8be4717d85cb2928ec1Brian assert(0); 815c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 816c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 817c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 818c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1d: 819c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell /* 3DStateMW */ 820c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell switch ((cmd >> 16) & 0xff) { 821c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x0: 822a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_map_state(stream, "3DSTATE_MAP_STATE", (cmd & 0x1f) + 2); 823c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1: 824a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_sampler_state(stream, "3DSTATE_SAMPLER_STATE", (cmd & 0x1f) + 2); 825c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x4: 826c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_load_immediate(stream, "3DSTATE_LOAD_STATE_IMMEDIATE", (cmd & 0xf) + 2); 827c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x5: 828c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_program(stream, "3DSTATE_PIXEL_SHADER_PROGRAM", (cmd & 0x1ff) + 2); 829c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x6: 830c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_PIXEL_SHADER_CONSTANTS", (cmd & 0xff) + 2); 831c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x7: 832c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_load_indirect(stream, "3DSTATE_LOAD_INDIRECT", (cmd & 0xff) + 2); 833c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x80: 834c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DRAWING_RECTANGLE", (cmd & 0xffff) + 2); 835c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x81: 836c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_SCISSOR_RECTANGLE", (cmd & 0xffff) + 2); 837c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x83: 838c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_SPAN_STIPPLE", (cmd & 0xffff) + 2); 839c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x85: 840a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_dest_vars(stream, "3DSTATE_DEST_BUFFER_VARS", (cmd & 0xffff) + 2); 841c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x88: 842c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_CONSTANT_BLEND_COLOR", (cmd & 0xffff) + 2); 843c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x89: 844c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_FOG_MODE", (cmd & 0xffff) + 2); 845c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x8e: 846a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell return debug_buf_info(stream, "3DSTATE_BUFFER_INFO", (cmd & 0xffff) + 2); 847c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x97: 848c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEPTH_OFFSET_SCALE", (cmd & 0xffff) + 2); 849c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x98: 850c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_Z", (cmd & 0xffff) + 2); 851c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x99: 852c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_DIFFUSE", (cmd & 0xffff) + 2); 853c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x9a: 854c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_DEFAULT_SPECULAR", (cmd & 0xffff) + 2); 855c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x9c: 856c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "3DSTATE_CLEAR_PARAMETERS", (cmd & 0xffff) + 2); 857c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 858c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 859c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return 0; 860c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 861c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 862c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1e: 863c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (cmd & (1 << 23)) 864c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "???", (cmd & 0xffff) + 1); 865c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 866c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "", 1); 867c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 868c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell case 0x1f: 869c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if ((cmd & (1 << 23)) == 0) 870c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_prim(stream, "3DPRIM (inline)", 1, (cmd & 0x1ffff) + 2); 871c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else if (cmd & (1 << 17)) 872c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell { 873c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if ((cmd & 0xffff) == 0) 874c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_variable_length_prim(stream); 875c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 876c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_prim(stream, "3DPRIM (indexed)", 0, (((cmd & 0xffff) + 1) / 2) + 1); 877c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 878c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell else 879c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug_prim(stream, "3DPRIM (indirect sequential)", 0, 2); 880c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 881c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 882c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return debug(stream, "", 0); 883c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 884f6541773c4661247879995637207dcc5803bbf00Vinson Lee break; 885c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell default: 886c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 887c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return 0; 888c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell } 889c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 890c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(0); 891c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell return 0; 89201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 89301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 89401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 895c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 89601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwellvoid 897bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_dump_batchbuffer( struct i915_winsys_batchbuffer *batch ) 89801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 899c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell struct debug_stream stream; 9008340a116ea346ee7f11fe150a1439e1d7bd86118Jakob Bornecrantz unsigned *start = (unsigned*)batch->map; 9018340a116ea346ee7f11fe150a1439e1d7bd86118Jakob Bornecrantz unsigned *end = (unsigned*)batch->ptr; 9025961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned long bytes = (unsigned long) (end - start) * 4; 90340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell boolean done = FALSE; 90401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 905c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.offset = 0; 906c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.ptr = (char *)start; 907c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.print_addresses = 0; 90801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 9097a7899a2476592e846b908a557a738a49fa9a948José Fonseca if (!start || !end) { 910baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf( "\n\nBATCH: ???\n"); 9117a7899a2476592e846b908a557a738a49fa9a948José Fonseca return; 9127a7899a2476592e846b908a557a738a49fa9a948José Fonseca } 9137a7899a2476592e846b908a557a738a49fa9a948José Fonseca 91496c9b39a6a9553573fcbdb5fd6db0e9d59768442Jakob Bornecrantz debug_printf( "\n\nBATCH: (%d)\n", (int)bytes / 4); 915a0e48b1ff9884ed66a156bd2d11b475ff177f166Keith Whitwell 916c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell while (!done && 9175961732c1b59403b4e736fa354a64d4a0e5d8af2Michal stream.offset < bytes) 918c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell { 919c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell if (!i915_debug_packet( &stream )) 920c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell break; 92101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 922c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell assert(stream.offset <= bytes && 923c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell stream.offset >= 0); 92401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell } 92501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 926baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf( "END-BATCH\n\n\n"); 92701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 928c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 929c046174eb047c95e25f31390019f04f310ae2b8eKeith Whitwell 930abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 931abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz/*********************************************************************** 932abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz * Dirty state atom dumping 933abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz */ 934abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 935abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzvoid 936abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzi915_dump_dirty(struct i915_context *i915, const char *func) 937abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz{ 938abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz struct { 939abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz unsigned dirty; 940abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz const char *name; 941abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz } l[] = { 942abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_VIEWPORT, "viewport"}, 943abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_RASTERIZER, "rasterizer"}, 944abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_FS, "fs"}, 945abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_BLEND, "blend"}, 946abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_CLIP, "clip"}, 947abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_SCISSOR, "scissor"}, 948abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_STIPPLE, "stipple"}, 949abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_FRAMEBUFFER, "framebuffer"}, 950abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_ALPHA_TEST, "alpha_test"}, 951abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_DEPTH_STENCIL, "depth_stencil"}, 952abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_SAMPLER, "sampler"}, 953abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_SAMPLER_VIEW, "sampler_view"}, 9542e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz {I915_NEW_VS_CONSTANTS, "vs_const"}, 9552e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz {I915_NEW_FS_CONSTANTS, "fs_const"}, 956abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_VBO, "vbo"}, 957abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_NEW_VS, "vs"}, 958abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {0, NULL}, 959abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz }; 960abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz int i; 961abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 962abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("%s: ", func); 963abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz for (i = 0; l[i].name; i++) 964abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz if (i915->dirty & l[i].dirty) 965abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("%s ", l[i].name); 966abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("\n"); 967abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz} 968abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 969abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzvoid 970abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantzi915_dump_hardware_dirty(struct i915_context *i915, const char *func) 971abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz{ 972abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz struct { 973abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz unsigned dirty; 974abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz const char *name; 975abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz } l[] = { 976abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_STATIC, "static"}, 977abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_DYNAMIC, "dynamic"}, 978abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_SAMPLER, "sampler"}, 979abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_MAP, "map"}, 980abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_PROGRAM, "program"}, 981abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_CONSTANTS, "constants"}, 982abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {I915_HW_IMMEDIATE, "immediate"}, 983a185d439bdab24750d9c22e42a723f6baa23b730Brian Paul {I915_HW_INVARIANT, "invariant"}, 984abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz {0, NULL}, 985abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz }; 986abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz int i; 987abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 988abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("%s: ", func); 989abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz for (i = 0; l[i].name; i++) 990abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz if (i915->hardware_dirty & l[i].dirty) 991abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("%s ", l[i].name); 992abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz debug_printf("\n"); 993abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz} 994